/* 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 #else #include #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 variables 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