/* antlr.h | |
* | |
* SOFTWARE RIGHTS | |
* | |
* We reserve no LEGAL rights to the Purdue Compiler Construction Tool | |
* Set (PCCTS) -- PCCTS is in the public domain. An individual or | |
* company may do whatever they wish with source code distributed with | |
* PCCTS or the code generated by PCCTS, including the incorporation of | |
* PCCTS, or its output, into commerical software. | |
* | |
* We encourage users to develop software with PCCTS. However, we do ask | |
* that credit is given to us for developing PCCTS. By "credit", | |
* we mean that if you incorporate our source code into one of your | |
* programs (commercial product, research project, or otherwise) that you | |
* acknowledge this fact somewhere in the documentation, research report, | |
* etc... If you like PCCTS and have developed a nice tool with the | |
* output, please mention that you developed it using PCCTS. In | |
* addition, we ask that this header remain intact in our source code. | |
* As long as these guidelines are kept, we expect to continue enhancing | |
* this system and expect to make other tools available as they are | |
* completed. | |
* | |
* ANTLR 1.33 | |
* Terence Parr | |
* Parr Research Corporation | |
* with Purdue University and AHPCRC, University of Minnesota | |
* 1989-2000 | |
*/ | |
#ifndef ANTLR_H | |
#define ANTLR_H | |
#include "pcctscfg.h" | |
#include "pccts_stdio.h" | |
/* turn off warnings for unreferenced labels */ | |
#ifdef _MSC_VER | |
#pragma warning(disable:4102) | |
#endif | |
/* | |
* Define all of the stack setup and manipulation of $i, #i variables. | |
* | |
* Notes: | |
* The type 'Attrib' must be defined before entry into this .h file. | |
*/ | |
#ifdef __USE_PROTOS | |
#include "pccts_stdlib.h" | |
#else | |
#ifdef VAXC | |
#include <stdlib.h> | |
#else | |
#include <malloc.h> | |
#endif | |
#endif | |
#include "pccts_string.h" | |
#if 0 | |
#include "set.h" | |
#endif | |
typedef int ANTLRTokenType; | |
typedef unsigned char SetWordType; | |
typedef char ANTLRChar; | |
/* G u e s s S t u f f */ | |
#ifdef ZZCAN_GUESS | |
#ifndef ZZINF_LOOK | |
#define ZZINF_LOOK | |
#endif | |
#endif | |
#ifdef ZZCAN_GUESS | |
typedef struct _zzjmp_buf { | |
jmp_buf state; | |
} zzjmp_buf; | |
#endif | |
/* can make this a power of 2 for more efficient lookup */ | |
#ifndef ZZLEXBUFSIZE | |
#define ZZLEXBUFSIZE 8000 /* MR22 raise from 2k to 8k */ | |
#endif | |
#define zzOvfChk \ | |
if ( zzasp <= 0 ) \ | |
{ \ | |
fprintf(stderr, zzStackOvfMsg, __FILE__, __LINE__); \ | |
exit(PCCTS_EXIT_FAILURE); \ | |
} | |
#ifndef ZZA_STACKSIZE | |
#define ZZA_STACKSIZE 400 | |
#endif | |
#ifndef ZZAST_STACKSIZE | |
#define ZZAST_STACKSIZE 400 | |
#endif | |
#ifndef zzfailed_pred | |
#ifdef ZZCAN_GUESS | |
#define zzfailed_pred(_p,_hasuseraction,_useraction) \ | |
if (zzguessing) { \ | |
zzGUESS_FAIL; \ | |
} else { \ | |
zzfailed_pred_action(_p,_hasuseraction,_useraction); \ | |
} | |
#else | |
#define zzfailed_pred(_p,_hasuseraction,_useraction) \ | |
zzfailed_pred_action(_p,_hasuseraction,_useraction); | |
#endif | |
#endif | |
/* MR23 Provide more control over failed predicate action | |
without any need for user to worry about guessing internals. | |
_hasuseraction == 0 => no user specified error action | |
_hasuseraction == 1 => user specified error action | |
*/ | |
#ifndef zzfailed_pred_action | |
#define zzfailed_pred_action(_p,_hasuseraction,_useraction) \ | |
if (_hasuseraction) { _useraction } \ | |
else { fprintf(stderr, "semantic error; failed predicate: '%s'\n",_p); } | |
#endif | |
/* MR19 zzchar_t additions */ | |
#ifdef LL_K | |
#define LOOKAHEAD \ | |
int zztokenLA[LL_K]; \ | |
zzchar_t zztextLA[LL_K][ZZLEXBUFSIZE]; \ | |
int zzlap = 0, zzlabase=0; /* labase only used for DEMAND_LOOK */ | |
#else | |
#define LOOKAHEAD \ | |
int zztoken; | |
#endif | |
#ifndef zzcr_ast | |
#define zzcr_ast(ast,attr,tok,text) | |
#endif | |
#ifdef DEMAND_LOOK | |
#define DemandLookData int zzdirty=1; | |
#else | |
#define DemandLookData | |
#endif | |
#ifndef zzUSER_GUESS_HOOK | |
#define zzUSER_GUESS_HOOK(seqFrozen,zzrv) | |
#endif | |
#ifndef zzUSER_GUESS_DONE_HOOK | |
#define zzUSER_GUESS_DONE_HOOK(seqFrozen) | |
#endif | |
/* S t a t e S t u f f */ | |
#ifdef ZZCAN_GUESS | |
#define zzGUESS_BLOCK zzantlr_state zzst; int zzrv; int zzGuessSeqFrozen; | |
/* MR10 change zzGUESS: do zzGUESS_DONE when zzrv==1 after longjmp as in C++ mode */ | |
#define zzGUESS zzsave_antlr_state(&zzst); \ | |
zzguessing = 1; \ | |
zzGuessSeqFrozen=++zzGuessSeq; \ | |
zzrv = setjmp(zzguess_start.state); \ | |
zzUSER_GUESS_HOOK(zzGuessSeqFrozen,zzrv) \ | |
if (zzrv) zzGUESS_DONE; | |
#ifdef zzTRACE_RULES | |
#define zzGUESS_FAIL { zzTraceGuessFail(); longjmp(zzguess_start.state, 1); } | |
#else | |
#define zzGUESS_FAIL longjmp(zzguess_start.state, 1) | |
#endif | |
/* MR10 change zzGUESS_DONE: zzrv=1 to simulate longjmp() return value as in C++ mode */ | |
#define zzGUESS_DONE { zzrestore_antlr_state(&zzst); zzrv=1; zzUSER_GUESS_DONE_HOOK(zzGuessSeqFrozen) } | |
#define zzNON_GUESS_MODE if ( !zzguessing ) | |
#define zzGuessData \ | |
zzjmp_buf zzguess_start; \ | |
int zzguessing; | |
#else | |
#define zzGUESS_BLOCK | |
#define zzGUESS | |
#define zzGUESS_FAIL | |
#define zzGUESS_DONE | |
#define zzNON_GUESS_MODE | |
#define zzGuessData | |
#endif | |
typedef struct _zzantlr_state { | |
#ifdef ZZCAN_GUESS | |
zzjmp_buf guess_start; | |
int guessing; | |
#endif | |
int asp; | |
int ast_sp; | |
#ifdef ZZINF_LOOK | |
int inf_lap; /* not sure we need to save this one */ | |
int inf_labase; | |
int inf_last; | |
/* MR6 Gunnar Rxnning (gunnar@candleweb.no) */ | |
/* MR6 Additional state needs to be saved/restored */ | |
/* MR6 Matching changes in err.h */ | |
int *inf_tokens; /* MR6 */ | |
char **inf_text; /* MR6 */ | |
char *inf_text_buffer; /* MR6 */ | |
int *inf_line; /* MR6 */ | |
#endif | |
#ifdef DEMAND_LOOK | |
int dirty; | |
#endif | |
#ifdef LL_K | |
int tokenLA[LL_K]; | |
char textLA[LL_K][ZZLEXBUFSIZE]; | |
int lap; | |
int labase; | |
#else | |
int token; | |
char text[ZZLEXBUFSIZE]; | |
#endif | |
#ifdef zzTRACE_RULES | |
int traceOptionValue; /* MR10 */ | |
int traceGuessOptionValue; /* MR10 */ | |
char *traceCurrentRuleName; /* MR10 */ | |
int traceDepth; /* MR10 */ | |
#endif | |
} zzantlr_state; | |
#ifdef zzTRACE_RULES | |
extern int zzTraceOptionValueDefault; | |
extern int zzTraceOptionValue; | |
extern int zzTraceGuessOptionValue; | |
extern char *zzTraceCurrentRuleName; | |
extern int zzTraceDepth; | |
#endif | |
extern int zzGuessSeq; /* MR10 */ | |
extern int zzSyntaxErrCount; /* MR11 */ | |
extern int zzLexErrCount; /* MR11 */ | |
/* I n f i n i t e L o o k a h e a d */ | |
#ifdef ZZINF_LOOK | |
#define InfLookData \ | |
int *zzinf_tokens; \ | |
char **zzinf_text; \ | |
char *zzinf_text_buffer; \ | |
int *zzinf_line; \ | |
int zzinf_labase; \ | |
int zzinf_last; | |
#else | |
#define InfLookData | |
#endif | |
#ifdef ZZINF_LOOK | |
#ifndef ZZINF_DEF_TEXT_BUFFER_SIZE | |
#define ZZINF_DEF_TEXT_BUFFER_SIZE 20000 | |
#endif | |
#ifndef ZZINF_DEF_TOKEN_BUFFER_SIZE | |
#define ZZINF_DEF_TOKEN_BUFFER_SIZE 2000 | |
#endif | |
/* WARNING!!!!!! | |
* ZZINF_BUFFER_TEXT_CHUNK_SIZE must be > sizeof(text) largest possible token. | |
*/ | |
#ifndef ZZINF_BUFFER_TEXT_CHUNK_SIZE | |
#define ZZINF_BUFFER_TEXT_CHUNK_SIZE 5000 | |
#endif | |
#ifndef ZZINF_BUFFER_TOKEN_CHUNK_SIZE | |
#define ZZINF_BUFFER_TOKEN_CHUNK_SIZE 1000 | |
#endif | |
#if ZZLEXBUFSIZE > ZZINF_BUFFER_TEXT_CHUNK_SIZE | |
#define ZZINF_BUFFER_TEXT_CHUNK_SIZE ZZLEXBUFSIZE+5 | |
#endif | |
/* make inf_look user-access macros */ | |
#ifdef LL_K | |
#define ZZINF_LA_VALID(i) (((zzinf_labase+i-1)-LL_K+1) <= zzinf_last) | |
#define ZZINF_LA(i) zzinf_tokens[(zzinf_labase+i-1)-LL_K+1] | |
#define ZZINF_LATEXT(i) zzinf_text[(zzinf_labase+i-1)-LL_K+1] | |
/* MR6 In 1.33 vanilla the #define ZZINF_LINE(i) is was commented out */ | |
#define ZZINF_LINE(i) zzinf_line[(zzinf_labase+i-1)-LL_K+1] | |
#else | |
#define ZZINF_LA_VALID(i) (((zzinf_labase+i-1)) <= zzinf_last) | |
#define ZZINF_LA(i) zzinf_tokens[(zzinf_labase+i-1)] | |
#define ZZINF_LATEXT(i) zzinf_text[(zzinf_labase+i-1)] | |
#endif | |
#define inf_zzgettok _inf_zzgettok() | |
extern void _inf_zzgettok(); | |
#endif /* ZZINF_LOOK */ | |
#ifdef LL_K | |
#ifdef __USE_PROTOS | |
#define ANTLR_INFO \ | |
Attrib zzempty_attr(void) {static Attrib a; return a;} \ | |
Attrib zzconstr_attr(int _tok, char *_text) \ | |
{Attrib a; zzcr_attr((&a),_tok,_text); return a;} \ | |
int zzasp=ZZA_STACKSIZE; \ | |
char zzStackOvfMsg[]="fatal: attrib/AST stack overflow %s(%d)!\n"; \ | |
Attrib zzaStack[ZZA_STACKSIZE]; DemandLookData \ | |
InfLookData \ | |
zzGuessData | |
#else | |
#define ANTLR_INFO \ | |
Attrib zzempty_attr() {static Attrib a; return a;} \ | |
Attrib zzconstr_attr(_tok, _text) int _tok; char *_text; \ | |
{Attrib a; zzcr_attr((&a),_tok,_text); return a;} \ | |
int zzasp=ZZA_STACKSIZE; \ | |
char zzStackOvfMsg[]="fatal: attrib/AST stack overflow %s(%d)!\n"; \ | |
Attrib zzaStack[ZZA_STACKSIZE]; DemandLookData \ | |
InfLookData \ | |
zzGuessData | |
#endif | |
#else | |
#ifdef __USE_PROTOS | |
#define ANTLR_INFO \ | |
Attrib zzempty_attr(void) {static Attrib a; return a;} \ | |
Attrib zzconstr_attr(int _tok, char *_text) \ | |
{Attrib a; zzcr_attr((&a),_tok,_text); return a;} \ | |
int zzasp=ZZA_STACKSIZE; \ | |
char zzStackOvfMsg[]="fatal: attrib/AST stack overflow %s(%d)!\n"; \ | |
Attrib zzaStack[ZZA_STACKSIZE]; DemandLookData \ | |
InfLookData \ | |
zzGuessData | |
#else | |
#define ANTLR_INFO \ | |
Attrib zzempty_attr() {static Attrib a; return a;} \ | |
Attrib zzconstr_attr(_tok, _text) int _tok; char *_text; \ | |
{Attrib a; zzcr_attr((&a),_tok,_text); return a;} \ | |
int zzasp=ZZA_STACKSIZE; \ | |
char zzStackOvfMsg[]="fatal: attrib/AST stack overflow %s(%d)!\n"; \ | |
Attrib zzaStack[ZZA_STACKSIZE]; DemandLookData \ | |
InfLookData \ | |
zzGuessData | |
#endif | |
#endif /* LL_k */ | |
#ifdef ZZINF_LOOK | |
#ifdef LL_K | |
#ifdef DEMAND_LOOK | |
#define zzPrimeLookAhead {zzdirty=LL_K; zzlap = zzlabase = 0;} | |
#else | |
#define zzPrimeLookAhead {zzlap = zzlabase = 0; zzfill_inf_look();\ | |
{int _i; for(_i=1;_i<=LL_K; _i++) \ | |
{zzCONSUME;} zzlap = zzlabase = 0;}} | |
#endif | |
#else /* LL_K */ | |
#ifdef DEMAND_LOOK | |
#define zzPrimeLookAhead zzfill_inf_look(); zzdirty=1 | |
#else | |
#define zzPrimeLookAhead zzfill_inf_look(); inf_zzgettok | |
#endif | |
#endif /* LL_K */ | |
#else /* ZZINF_LOOK */ | |
#ifdef LL_K | |
#ifdef DEMAND_LOOK | |
#define zzPrimeLookAhead {zzdirty=LL_K; zzlap = zzlabase = 0;} | |
#else | |
#define zzPrimeLookAhead {int _i; zzlap = 0; for(_i=1;_i<=LL_K; _i++) \ | |
{zzCONSUME;} zzlap = 0;} | |
#endif | |
#else | |
#ifdef DEMAND_LOOK | |
#define zzPrimeLookAhead zzdirty=1 | |
#else | |
#define zzPrimeLookAhead zzgettok() | |
#endif | |
#endif /* LL_K */ | |
#endif /* ZZINF_LOOK */ | |
#ifdef LL_K | |
#define zzenterANTLRs(s) \ | |
zzlextext = &(zztextLA[0][0]); zzrdstr( s ); zzPrimeLookAhead; | |
#define zzenterANTLRf(f) \ | |
zzlextext = &(zztextLA[0][0]); zzrdfunc( f ); zzPrimeLookAhead; | |
#define zzenterANTLR(f) \ | |
zzlextext = &(zztextLA[0][0]); zzrdstream( f ); zzPrimeLookAhead; | |
#ifdef ZZINF_LOOK | |
#define zzleaveANTLR(f) free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line); | |
#define zzleaveANTLRf(f) free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line); | |
#define zzleaveANTLRs(f) free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line); | |
#else | |
#define zzleaveANTLR(f) | |
#define zzleaveANTLRf(f) | |
#define zzleaveANTLRs(f) | |
#endif | |
#else | |
#define zzenterANTLRs(s) \ | |
{static char zztoktext[ZZLEXBUFSIZE]; \ | |
zzlextext = zztoktext; zzrdstr( s ); zzPrimeLookAhead;} | |
#define zzenterANTLRf(f) \ | |
{static char zztoktext[ZZLEXBUFSIZE]; \ | |
zzlextext = zztoktext; zzrdfunc( f ); zzPrimeLookAhead;} | |
#define zzenterANTLR(f) \ | |
{static char zztoktext[ZZLEXBUFSIZE]; \ | |
zzlextext = zztoktext; zzrdstream( f ); zzPrimeLookAhead;} | |
#ifdef ZZINF_LOOK | |
#define zzleaveANTLR(f) free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line); | |
#define zzleaveANTLRf(f) free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line); | |
#define zzleaveANTLRs(f) free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line); | |
#else | |
#define zzleaveANTLR(f) | |
#define zzleaveANTLRf(f) | |
#define zzleaveANTLRs(f) | |
#endif | |
#endif | |
/* MR19 Paul D. Smith (psmith@baynetworks.com) | |
Need to adjust AST stack pointer at exit. | |
Referenced in ANTLRx macros. | |
*/ | |
#ifdef GENAST | |
#define ZZAST_ADJUST ++zzast_sp; | |
#else | |
#define ZZAST_ADJUST | |
#endif | |
#define ANTLR(st, f) zzbufsize = ZZLEXBUFSIZE; \ | |
zzenterANTLR(f); \ | |
{ \ | |
zzBLOCK(zztasp1); \ | |
st; /* ++zzasp; Removed MR20 G. Hobbelt */ \ | |
/* ZZAST_ADJUST Removed MR20 G. Hobbelt */ \ | |
/* MR20 G. Hobbelt. Kill the top' attribute (+AST stack corr.) */ \ | |
zzEXIT_ANTLR(zztasp1 + 1); \ | |
} \ | |
zzleaveANTLR(f); | |
#define ANTLRm(st, f, _m) zzbufsize = ZZLEXBUFSIZE; \ | |
zzmode(_m); \ | |
zzenterANTLR(f); \ | |
{ \ | |
zzBLOCK(zztasp1); \ | |
st; /* ++zzasp; Removed MR20 G. Hobbelt */ \ | |
/* ZZAST_ADJUST Removed MR20 G. Hobbelt */ \ | |
/* MR20 G. Hobbelt. Kill the top' attribute (+AST stack corr.) */ \ | |
zzEXIT_ANTLR(zztasp1 + 1); \ | |
} \ | |
zzleaveANTLR(f); | |
#define ANTLRf(st, f) zzbufsize = ZZLEXBUFSIZE; \ | |
zzenterANTLRf(f); \ | |
{ \ | |
zzBLOCK(zztasp1); \ | |
st; /* ++zzasp; Removed MR20 G. Hobbelt */ \ | |
/* ZZAST_ADJUST Removed MR20 G. Hobbelt */ \ | |
/* MR20 G. Hobbelt. Kill the top' attribute (+AST stack corr.) */ \ | |
zzEXIT_ANTLR(zztasp1 + 1); \ | |
} \ | |
zzleaveANTLRf(f); | |
#define ANTLRs(st, s) zzbufsize = ZZLEXBUFSIZE; \ | |
zzenterANTLRs(s); \ | |
{ \ | |
zzBLOCK(zztasp1); \ | |
st; /* ++zzasp; Removed MR20 G. Hobbelt */ \ | |
/* ZZAST_ADJUST Removed MR20 G. Hobbelt */ \ | |
/* MR20 G. Hobbelt. Kill the top' attribute (+AST stack corr.) */ \ | |
zzEXIT_ANTLR(zztasp1 + 1); \ | |
} \ | |
zzleaveANTLRs(s); | |
#ifdef LL_K | |
#define zztext (&(zztextLA[zzlap][0])) | |
#else | |
#define zztext zzlextext | |
#endif | |
/* A r g u m e n t A c c e s s */ | |
#define zzaCur (zzaStack[zzasp]) | |
#define zzaRet (*zzaRetPtr) | |
#define zzaArg(v,n) zzaStack[v-n] | |
#define zzMakeAttr { zzNON_GUESS_MODE {zzOvfChk; --zzasp; zzcr_attr(&(zzaStack[zzasp]),LA(1),LATEXT(1));}} | |
#ifdef zzdef0 | |
#define zzMake0 { zzOvfChk; --zzasp; zzdef0(&(zzaStack[zzasp]));} | |
#else | |
#define zzMake0 { zzOvfChk; --zzasp;} | |
#endif | |
#define zzaPush(_v) { zzOvfChk; zzaStack[--zzasp] = _v;} | |
#ifndef zzd_attr | |
#define zzREL(t) zzasp=(t); /* Restore state of stack */ | |
#else | |
#define zzREL(t) for (; zzasp<(t); zzasp++) \ | |
{ zzd_attr(&(zzaStack[zzasp])); } | |
#endif | |
#define zzsetmatch(_es,_tokclassErrset) \ | |
if ( !_zzsetmatch(_es, &zzBadText, &zzMissText, &zzMissTok, &zzBadTok, &zzMissSet, _tokclassErrset) ) goto fail; /* MR23 */ | |
#ifdef ZZCAN_GUESS | |
#define zzsetmatch_wsig(_es, handler) \ | |
if ( !_zzsetmatch_wsig(_es) ) if (zzguessing) { zzGUESS_FAIL; } else {_signal=MismatchedToken; goto handler;} | |
#else | |
#define zzsetmatch_wsig(_es, handler) \ | |
if ( !_zzsetmatch_wsig(_es) ) {_signal=MismatchedToken; goto handler;} | |
#endif | |
#ifdef __USE_PROTOS | |
extern int _zzsetmatch(SetWordType *, char **, char **, int *, int *, SetWordType **, SetWordType * /* MR23 */); | |
extern int _zzsetmatch_wsig(SetWordType *); | |
#else | |
extern int _zzsetmatch(); | |
extern int _zzsetmatch_wsig(); | |
#endif | |
#define zzmatch(_t) \ | |
if ( !_zzmatch(_t, &zzBadText, &zzMissText, &zzMissTok, &zzBadTok, &zzMissSet) ) goto fail; | |
#ifdef ZZCAN_GUESS | |
#define zzmatch_wsig(_t,handler) \ | |
if ( !_zzmatch_wsig(_t) ) if (zzguessing) { zzGUESS_FAIL; } else {_signal=MismatchedToken; goto handler;} | |
#else | |
#define zzmatch_wsig(_t,handler) \ | |
if ( !_zzmatch_wsig(_t) ) {_signal=MismatchedToken; goto handler;} | |
#endif | |
#ifdef __USE_PROTOS | |
extern int _zzmatch(int, char **, char **, int *, int *, SetWordType **); | |
extern int _zzmatch_wsig(int); | |
#else | |
extern int _zzmatch(); | |
extern int _zzmatch_wsig(); | |
#endif | |
#define zzmatch_wdfltsig(_t,_f) \ | |
if ( !_zzmatch_wdfltsig(_t,_f) ) _signal=MismatchedToken; | |
#define zzsetmatch_wdfltsig(tw,tt,wf) \ | |
if ( !_zzsetmatch_wdfltsig(tw,tt,wf) ) _signal=MismatchedToken; | |
#ifdef __USE_PROTOS | |
extern int _zzmatch_wdfltsig(int, SetWordType *); | |
extern int _zzsetmatch_wdfltsig(SetWordType *tokensWanted, | |
int tokenTypeOfSet, | |
SetWordType *whatFollows); | |
#else | |
extern int _zzmatch_wdfltsig(); | |
extern int _zzsetmatch_wdfltsig(); | |
#endif | |
#ifdef GENAST | |
#define zzRULE Attrib *zzaRetPtr = &(zzaStack[zzasp-1]); \ | |
SetWordType *zzMissSet=NULL; int zzMissTok=0; \ | |
int zzBadTok=0; char *zzBadText=""; \ | |
int zzErrk=1,zzpf=0; \ | |
zzTRACEdata \ | |
char *zzMissText=""; zzASTVars | |
#else | |
#define zzRULE Attrib *zzaRetPtr = &(zzaStack[zzasp-1]); \ | |
int zzBadTok=0; char *zzBadText=""; \ | |
int zzErrk=1,zzpf=0; \ | |
zzTRACEdata \ | |
SetWordType *zzMissSet=NULL; int zzMissTok=0; char *zzMissText="" | |
#endif | |
#ifdef GENAST | |
#define zzBLOCK(i) int i = zzasp - 1; int zztsp = zzast_sp | |
#define zzEXIT(i) zzREL(i); zzastREL; zzNON_GUESS_MODE { zzastPush(*_root); } | |
#define zzEXIT_ANTLR(i) zzREL(i); zzastREL /* [i_a] added as we want this for the ANTLRx() macros */ | |
#define zzLOOP(i) zzREL(i); zzastREL | |
#else | |
#define zzBLOCK(i) int i = zzasp - 1 | |
#define zzEXIT(i) zzREL(i) | |
#define zzEXIT_ANTLR(i) zzREL(i) /* [i_a] added as we want this for the ANTLRx() macros */ | |
#define zzLOOP(i) zzREL(i) | |
#endif | |
#ifdef LL_K | |
#ifdef DEMAND_LOOK | |
#define LOOK(_k) {int i,stop=_k-(LL_K-zzdirty); for (i=1; i<=stop; i++) \ | |
zzCONSUME;} | |
#define zzCONSUME {zzgettok(); zzdirty--; \ | |
zzlap = (zzlap+1)&(LL_K-1); \ | |
zzlextext = &(zztextLA[zzlap][0]);} | |
#else | |
#ifdef ZZINF_LOOK | |
#define zzCONSUME {inf_zzgettok; \ | |
zzlap = (zzlap+1)&(LL_K-1); \ | |
zzlextext = &(zztextLA[zzlap][0]); \ | |
} | |
#else | |
#define zzCONSUME {zzgettok(); \ | |
zzlap = (zzlap+1)&(LL_K-1); \ | |
zzlextext = &(zztextLA[zzlap][0]);} | |
#endif /* ZZINF_LOOK */ | |
#endif /* DEMAND_LOOK */ | |
#else /* LL_K */ | |
#ifdef DEMAND_LOOK | |
#define LOOK(_k) if ( zzdirty) zzCONSUME; | |
#ifdef ZZINF_LOOK | |
#define zzCONSUME inf_zzgettok; zzdirty=0; | |
#else | |
#define zzCONSUME zzgettok(); zzdirty=0; | |
#endif /* ZZINF_LOOK */ | |
#else /* DEMAND_LOOK */ | |
#ifdef ZZINF_LOOK | |
#define zzCONSUME inf_zzgettok | |
#else | |
#define zzCONSUME zzgettok(); | |
#endif | |
#endif /* DEMAND_LOOK */ | |
#endif /* LL_K */ | |
#ifdef LL_K | |
#define NLA zztokenLA[zzlap&(LL_K-1)] /* --> next LA */ | |
#define NLATEXT zztextLA[zzlap&(LL_K-1)] /* --> next text of LA */ | |
#ifdef DEMAND_LOOK | |
#define LA(i) zztokenLA[(zzlabase+(i)-1)&(LL_K-1)] | |
#define LATEXT(i) (&(zztextLA[(zzlabase+(i)-1)&(LL_K-1)][0])) | |
#else | |
#define LA(i) zztokenLA[(zzlap+(i)-1)&(LL_K-1)] | |
#define LATEXT(i) (&(zztextLA[(zzlap+(i)-1)&(LL_K-1)][0])) | |
#endif | |
#else | |
#define NLA zztoken | |
#define NLATEXT zztext | |
#define LA(i) zztoken | |
#define LATEXT(i) zztext | |
#endif | |
/* S t a n d a r d S i g n a l s */ | |
#define NoSignal 0 | |
#define MismatchedToken 1 | |
#define NoViableAlt 2 | |
#define NoSemViableAlt 3 | |
/* MR7 Allow more control over signalling */ | |
/* by adding "Unwind" and "zzsetSignal" */ | |
#define Unwind 4 | |
#define zzsetSignal(newValue) *_retsignal=_signal=(newValue) | |
#define zzsuppressSignal *_retsignal=_signal=0 | |
#define zzexportSignal *_retsignal=_signal | |
/* F u n c t i o n T r a c i n g */ | |
#ifndef zzTRACE_RULES | |
#define zzTRACEdata | |
#else | |
#ifndef zzTRACEdata | |
#define zzTRACEdata ANTLRChar *zzTracePrevRuleName = NULL; | |
#endif | |
#endif | |
#ifndef zzTRACEIN | |
#define zzTRACEIN(r) zzTracePrevRuleName=zzTraceCurrentRuleName;zzTraceIn(r); | |
#endif | |
#ifndef zzTRACEOUT | |
#define zzTRACEOUT(r) zzTraceOut(r);zzTraceCurrentRuleName=zzTracePrevRuleName; | |
#endif | |
/* MR19 zzchar_t additions */ | |
#ifndef zzchar_t | |
#ifdef ZZWCHAR_T | |
#define zzchar_t wchar_t | |
#else | |
#define zzchar_t char | |
#endif | |
#endif | |
/* MR26 */ | |
#ifdef PCCTS_USE_STDARG | |
extern void zzFAIL(int k, ...); | |
#else | |
extern void zzFAIL(); | |
#endif | |
/* E x t e r n D e f s */ | |
#ifdef __USE_PROTOS | |
extern Attrib zzempty_attr(void); | |
extern Attrib zzconstr_attr(int, char *); | |
extern void zzsyn(char *, int, char *, SetWordType *, int, int, char *); | |
extern int zzset_el(unsigned, SetWordType *); | |
extern int zzset_deg(SetWordType *); | |
extern void zzedecode(SetWordType *); | |
extern void zzresynch(SetWordType *, SetWordType); | |
extern void zzsave_antlr_state(zzantlr_state *); | |
extern void zzrestore_antlr_state(zzantlr_state *); | |
extern void zzfill_inf_look(void); | |
extern void zzconsumeUntil(SetWordType *st); /* MR7 */ | |
extern void zzconsumeUntilToken(int t); /* MR7 */ | |
extern void zzTraceIn(char * ruleName); /* MR10 */ | |
extern void zzTraceOut(char * ruleName); /* MR10 */ | |
extern int zzTraceOption(int delta); /* MR10 */ | |
extern int zzTraceGuessOption(int delta); /* MR10 */ | |
extern void zzTraceReset(void); /* MR10 */ | |
extern void zzTraceGuessFail(void); /* MR10 */ | |
#ifdef EXCEPTION_HANDLING | |
extern void zzdflthandlers(int, int *); | |
#endif | |
#else | |
extern Attrib zzempty_attr(); | |
extern Attrib zzconstr_attr(); | |
extern void zzsyn(); | |
extern int zzset_el(); | |
extern int zzset_deg(); | |
extern void zzedecode(); | |
extern void zzresynch(); | |
extern void zzsave_antlr_state(); | |
extern void zzrestore_antlr_state(); | |
extern void zzfill_inf_look(); | |
extern void zzconsumeUntil(); /* MR7 */ | |
extern void zzconsumeUntilToken(); /* MR7 */ | |
extern void zzTraceIn(); /* MR10 */ | |
extern void zzTraceOut(); /* MR10 */ | |
extern int zzTraceOption(); /* MR10 */ | |
extern int zzTraceGuessOption(); /* MR10 */ | |
extern void zzTraceReset(); /* MR10 */ | |
extern void zzTraceGuessFail(); /* MR10 */ | |
#ifdef EXCEPTION_HANDLING | |
extern void zzdflthandlers(); | |
#endif | |
#endif | |
/* G l o b a l V a r i a b l e s */ | |
/* Define a parser; user should do a "#parser myname" in their grammar file */ | |
/*extern struct pccts_parser zzparser;*/ | |
extern char *zztokens[]; | |
#ifdef LL_K | |
extern int zztokenLA[]; | |
extern zzchar_t zztextLA[][ZZLEXBUFSIZE]; | |
extern int zzlap; | |
extern int zzlabase; | |
#else | |
extern int zztoken; | |
#endif | |
extern char zzStackOvfMsg[]; | |
extern int zzasp; | |
extern Attrib zzaStack[]; | |
#ifdef ZZINF_LOOK | |
extern int *zzinf_tokens; | |
extern char **zzinf_text; | |
extern char *zzinf_text_buffer; | |
extern int *zzinf_line; | |
extern int zzinf_labase; | |
extern int zzinf_last; | |
#endif | |
#ifdef DEMAND_LOOK | |
extern int zzdirty; | |
#endif | |
#ifdef ZZCAN_GUESS | |
extern int zzguessing; | |
extern zzjmp_buf zzguess_start; | |
#endif | |
/* Define global veriables that refer to values exported by the scanner. | |
* These declarations duplicate those in dlgdef.h, but are needed | |
* if ANTLR is not to generate a .dlg file (-gx); PS, this is a hack. | |
*/ | |
extern zzchar_t *zzlextext; /* text of most recently matched token */ | |
extern int zzbufsize; /* how long zzlextext is */ | |
#endif |