+++ /dev/null
-/* ANTLRParser.C\r
- *\r
- * SOFTWARE RIGHTS\r
- *\r
- * We reserve no LEGAL rights to the Purdue Compiler Construction Tool\r
- * Set (PCCTS) -- PCCTS is in the public domain. An individual or\r
- * company may do whatever they wish with source code distributed with\r
- * PCCTS or the code generated by PCCTS, including the incorporation of\r
- * PCCTS, or its output, into commerical software.\r
- *\r
- * We encourage users to develop software with PCCTS. However, we do ask\r
- * that credit is given to us for developing PCCTS. By "credit",\r
- * we mean that if you incorporate our source code into one of your\r
- * programs (commercial product, research project, or otherwise) that you\r
- * acknowledge this fact somewhere in the documentation, research report,\r
- * etc... If you like PCCTS and have developed a nice tool with the\r
- * output, please mention that you developed it using PCCTS. In\r
- * addition, we ask that this header remain intact in our source code.\r
- * As long as these guidelines are kept, we expect to continue enhancing\r
- * this system and expect to make other tools available as they are\r
- * completed.\r
- *\r
- * ANTLR 1.33\r
- * Terence Parr\r
- * Parr Research Corporation\r
- * with Purdue University and AHPCRC, University of Minnesota\r
- * 1989-1998\r
- */\r
-\r
-#include "pcctscfg.h"\r
-\r
-#include "pccts_stdlib.h"\r
-#include "pccts_stdarg.h"\r
-#include "pccts_string.h"\r
-#include "pccts_stdio.h"\r
-\r
-PCCTS_NAMESPACE_STD\r
-\r
-/* I have to put this here due to C++ limitation\r
- * that you can't have a 'forward' decl for enums.\r
- * I hate C++!!!!!!!!!!!!!!!\r
- * Of course, if I could use real templates, this would go away.\r
- */\r
-// MR1\r
-// MR1 10-Apr-97 133MR1 Prevent use of varying sizes for the\r
-// MR1 ANTLRTokenType enum\r
-// MR1\r
-\r
-enum ANTLRTokenType { TER_HATES_CPP=0, ITS_TOO_COMPLICATED=9999}; // MR1\r
-\r
-#define ANTLR_SUPPORT_CODE\r
-\r
-#include ATOKEN_H\r
-#include ATOKENBUFFER_H\r
-#include APARSER_H\r
-\r
-static const int zzINF_DEF_TOKEN_BUFFER_SIZE = 2000; /* MR14 */\r
-static const int zzINF_BUFFER_TOKEN_CHUNK_SIZE = 1000; /* MR14 */\r
-\r
- /* L o o k a h e a d M a c r o s */\r
-\r
-/* maximum of 32 bits/unsigned int and must be 8 bits/byte;\r
- * we only use 8 bits of it.\r
- */\r
-SetWordType ANTLRParser::bitmask[sizeof(SetWordType)*8] = {\r
- 0x00000001, 0x00000002, 0x00000004, 0x00000008,\r
- 0x00000010, 0x00000020, 0x00000040, 0x00000080\r
-};\r
-\r
-char ANTLRParser::eMsgBuffer[500] = "";\r
-\r
-ANTLRParser::\r
-~ANTLRParser()\r
-{\r
- delete [] token_type;\r
- delete [] zzFAILtext; // MR16 Manfred Kogler\r
-}\r
-\r
-ANTLRParser::\r
-ANTLRParser(ANTLRTokenBuffer *_inputTokens,\r
- int k,\r
- int use_inf_look,\r
- int dlook,\r
- int ssize)\r
-{\r
- LLk = k;\r
- can_use_inf_look = use_inf_look;\r
-/* MR14 */ if (dlook != 0) {\r
-/* MR14 */ panic("ANTLRParser::ANTLRParser - Demand lookahead not supported in C++ mode");\r
-/* MR14 */\r
-/* MR14 */ };\r
- demand_look = 0; /* demand_look = dlook; */\r
- bsetsize = ssize;\r
- guessing = 0;\r
- token_tbl = NULL;\r
- eofToken = (ANTLRTokenType)1;\r
-\r
- // allocate lookahead buffer\r
- token_type = new ANTLRTokenType[LLk];\r
- lap = 0;\r
- labase = 0;\r
-#ifdef ZZDEFER_FETCH\r
- stillToFetch = 0; // MR19\r
-#endif\r
- dirty = 0;\r
- inf_labase = 0; // MR7\r
- inf_last = 0; // MR7\r
- /* prime lookahead buffer, point to inputTokens */\r
- this->inputTokens = _inputTokens;\r
- this->inputTokens->setMinTokens(k);\r
- _inputTokens->setParser(this); // MR1\r
- resynchConsumed=1; // MR8\r
- zzFAILtext=NULL; // MR9\r
- traceOptionValueDefault=0; // MR10\r
- traceReset(); // MR10\r
- zzGuessSeq=0; // MR10\r
- syntaxErrCount=0; // MR11\r
-}\r
-\r
-void ANTLRParser::init()\r
-{\r
- prime_lookahead();\r
- resynchConsumed=1; // MR8\r
- traceReset(); // MR10\r
-}\r
-\r
-void ANTLRParser::traceReset()\r
-{\r
- traceOptionValue=traceOptionValueDefault;\r
- traceGuessOptionValue=1;\r
- traceCurrentRuleName=NULL;\r
- traceDepth=0;\r
-}\r
-\r
-int ANTLRParser::\r
-guess(ANTLRParserState *st)\r
-{\r
- saveState(st);\r
- guessing = 1;\r
- return setjmp(guess_start.state);\r
-}\r
-\r
-void ANTLRParser::\r
-saveState(ANTLRParserState *buf)\r
-{\r
- buf->guess_start = guess_start;\r
- buf->guessing = guessing;\r
- buf->inf_labase = inf_labase;\r
- buf->inf_last = inf_last;\r
- buf->dirty = dirty;\r
- buf->traceOptionValue=traceOptionValue; /* MR10 */\r
- buf->traceGuessOptionValue=traceGuessOptionValue; /* MR10 */\r
- buf->traceCurrentRuleName=traceCurrentRuleName; /* MR10 */\r
- buf->traceDepth=traceDepth; /* MR10 */\r
-}\r
-\r
-void ANTLRParser::\r
-restoreState(ANTLRParserState *buf)\r
-{\r
- int i;\r
- int prevTraceOptionValue;\r
-\r
- guess_start = buf->guess_start;\r
- guessing = buf->guessing;\r
- inf_labase = buf->inf_labase;\r
- inf_last = buf->inf_last;\r
- dirty = buf->dirty;\r
-\r
- // restore lookahead buffer from k tokens before restored TokenBuffer position\r
- // if demand_look, then I guess we don't look backwards for these tokens.\r
- for (i=1; i<=LLk; i++) token_type[i-1] =\r
- inputTokens->bufferedToken(i-LLk)->getType();\r
- lap = 0;\r
- labase = 0;\r
-\r
- /* MR10 */\r
-\r
- prevTraceOptionValue=traceOptionValue;\r
- traceOptionValue=buf->traceOptionValue;\r
- if ( (prevTraceOptionValue > 0) !=\r
- (traceOptionValue > 0)) {\r
- if (traceCurrentRuleName != NULL) { /* MR21 */\r
- if (traceOptionValue > 0) {\r
- fprintf(stderr,\r
- "trace enable restored in rule %s depth %d\n",\r
- traceCurrentRuleName,\r
- traceDepth);\r
- };\r
- if (traceOptionValue <= 0) {\r
- fprintf(stderr,\r
- "trace disable restored in rule %s depth %d\n",\r
- traceCurrentRuleName, /* MR21 */\r
- traceDepth);\r
- };\r
- }\r
- };\r
- traceGuessOptionValue=buf->traceGuessOptionValue;\r
- traceCurrentRuleName=buf->traceCurrentRuleName;\r
- traceDepth=buf->traceDepth;\r
- traceGuessDone(buf);\r
-}\r
-\r
-/* Get the next symbol from the input stream; put it into lookahead buffer;\r
- * fill token_type[] fast reference cache also. NLA is the next place where\r
- * a lookahead ANTLRAbstractToken should go.\r
- */\r
-void ANTLRParser::\r
-consume()\r
-{\r
-\r
-#ifdef ZZDEBUG_CONSUME_ACTION\r
- zzdebug_consume_action();\r
-#endif\r
-\r
-// MR19 V.H. Simonis\r
-// Defer Fetch feature\r
-// Moves action of consume() into LA() function\r
-\r
-#ifdef ZZDEFER_FETCH\r
- stillToFetch++;\r
-#else\r
- NLA = inputTokens->getToken()->getType();\r
- dirty--;\r
- lap = (lap+1)&(LLk-1);\r
-#endif\r
-\r
-}\r
-\r
-_ANTLRTokenPtr ANTLRParser::\r
-LT(int i)\r
-{\r
-\r
-// MR19 V.H. Simonis\r
-// Defer Fetch feature\r
-// Moves action of consume() into LA() function\r
-\r
-#ifdef ZZDEFER_FETCH\r
- undeferFetch();\r
-#endif\r
-\r
-#ifdef DEBUG_TOKENBUFFER\r
- if ( i >= inputTokens->bufferSize() || inputTokens->minTokens() < LLk ) /* MR20 Was "<=" */\r
- {\r
- char buf[2000]; /* MR20 Was "static" */\r
- sprintf(buf, "The minimum number of tokens you requested that the\nANTLRTokenBuffer buffer is not enough to satisfy your\nLT(%d) request; increase 'k' argument to constructor for ANTLRTokenBuffer\n", i);\r
- panic(buf);\r
- }\r
-#endif\r
- return inputTokens->bufferedToken(i-LLk);\r
-}\r
-\r
-void\r
-ANTLRParser::\r
-look(int k)\r
-{\r
- int i, c = k - (LLk-dirty);\r
- for (i=1; i<=c; i++) consume();\r
-}\r
-\r
-/* fill the lookahead buffer up with k symbols (even if DEMAND_LOOK);\r
- */\r
-void\r
-ANTLRParser::\r
-prime_lookahead()\r
-{\r
- int i;\r
- for(i=1;i<=LLk; i++) consume();\r
- dirty=0;\r
- // lap = 0; // MR14 Sinan Karasu (sinan.karasu@boeing.com)\r
- // labase = 0; // MR14\r
- labase=lap; // MR14\r
-}\r
-\r
-/* check to see if the current input symbol matches '_t'.\r
- * During NON demand lookahead mode, dirty will always be 0 and\r
- * hence the extra code for consuming tokens in _match is never\r
- * executed; the same routine can be used for both modes.\r
- */\r
-int ANTLRParser::\r
-_match(ANTLRTokenType _t, ANTLRChar **MissText,\r
- ANTLRTokenType *MissTok, _ANTLRTokenPtr *BadTok,\r
- SetWordType **MissSet)\r
-{\r
- if ( dirty==LLk ) {\r
- consume();\r
- }\r
- if ( LA(1)!=_t ) {\r
- *MissText=NULL;\r
- *MissTok= _t; *BadTok = LT(1);\r
- *MissSet=NULL;\r
- return 0;\r
- }\r
- dirty++;\r
- labase = (labase+1)&(LLk-1); // labase maintained even if !demand look\r
- return 1;\r
-}\r
-\r
-/* check to see if the current input symbol matches '_t'.\r
- * Used during exception handling.\r
- */\r
-int ANTLRParser::\r
-_match_wsig(ANTLRTokenType _t)\r
-{\r
- if ( dirty==LLk ) {\r
- consume();\r
- }\r
- if ( LA(1)!=_t ) return 0;\r
- dirty++;\r
- labase = (labase+1)&(LLk-1); // labase maintained even if !demand look\r
- return 1;\r
-}\r
-\r
-/* check to see if the current input symbol matches any token in a set.\r
- * During NON demand lookahead mode, dirty will always be 0 and\r
- * hence the extra code for consuming tokens in _match is never\r
- * executed; the same routine can be used for both modes.\r
- */\r
-int ANTLRParser::\r
-_setmatch(SetWordType *tset, ANTLRChar **MissText,\r
- ANTLRTokenType *MissTok, _ANTLRTokenPtr *BadTok,\r
- SetWordType **MissSet)\r
-{\r
- if ( dirty==LLk ) {\r
- consume();\r
- }\r
- if ( !set_el(LA(1), tset) ) {\r
- *MissText=NULL;\r
- *MissTok= (ANTLRTokenType)0; *BadTok=LT(1);\r
- *MissSet=tset;\r
- return 0;\r
- }\r
- dirty++;\r
- labase = (labase+1)&(LLk-1); // labase maintained even if !demand look\r
- return 1;\r
-}\r
-\r
-int ANTLRParser::\r
-_setmatch_wsig(SetWordType *tset)\r
-{\r
- if ( dirty==LLk ) {\r
- consume();\r
- }\r
- if ( !set_el(LA(1), tset) ) return 0;\r
- dirty++;\r
- labase = (labase+1)&(LLk-1); // labase maintained even if !demand look\r
- return 1;\r
-}\r
-\r
- /* Exception handling routines */\r
-//\r
-// 7-Apr-97 133MR1\r
-// Change suggested by Eli Sternheim (eli@interhdl.com)\r
-//\r
-void ANTLRParser::\r
-consumeUntil(SetWordType *st)\r
-{\r
- ANTLRTokenType tmp; // MR1\r
- const int Eof=1; // MR1\r
- while ( !set_el( (tmp=LA(1)), st) && tmp!=Eof) { consume(); } // MR1\r
-}\r
-\r
-//\r
-// 7-Apr-97 133MR1\r
-// Change suggested by Eli Sternheim (eli@interhdl.com)\r
-//\r
-void ANTLRParser::\r
-consumeUntilToken(int t)\r
-{\r
- int tmp; // MR1\r
- const int Eof=1; // MR1\r
- while ( (tmp=LA(1)) !=t && tmp!=Eof) { consume(); } // MR1\r
-}\r
-\r
-\r
- /* Old error stuff */\r
-\r
-void ANTLRParser::\r
-resynch(SetWordType *wd,SetWordType mask)\r
-{\r
-\r
-/* MR8 S.Bochnak@microtool.com.pl */\r
-/* MR8 Change file scope static "consumed" to instance var */\r
-\r
- /* if you enter here without having consumed a token from last resynch\r
- * force a token consumption.\r
- */\r
-/* MR8 */ if ( !resynchConsumed ) {consume(); resynchConsumed=1; return;}\r
-\r
- /* if current token is in resynch set, we've got what we wanted */\r
-\r
-/* MR8 */ if ( wd[LA(1)]&mask || LA(1) == eofToken ) {resynchConsumed=0; return;}\r
- \r
- /* scan until we find something in the resynch set */\r
-\r
- while ( !(wd[LA(1)]&mask) && LA(1) != eofToken ) {consume();}\r
-\r
-/* MR8 */ resynchConsumed=1;\r
-}\r
-\r
-/* standard error reporting function that assumes DLG-based scanners;\r
- * you should redefine in subclass to change it or if you use your\r
- * own scanner.\r
- */\r
-void ANTLRParser::\r
-syn(_ANTLRTokenPtr tok, ANTLRChar *egroup, SetWordType *eset,\r
- ANTLRTokenType etok, int k)\r
-{\r
- int line;\r
-\r
- line = LT(1)->getLine();\r
-\r
- syntaxErrCount++; /* MR11 */\r
- fprintf(stderr, "line %d: syntax error at \"%s\"",\r
- line,\r
- (LA(1)==eofToken && LT(1)->getText()[0] == '@')? \r
- "<eof>":LT(1)->getText() /* MR21a */);\r
- if ( !etok && !eset ) {fprintf(stderr, "\n"); return;}\r
- if ( k==1 ) fprintf(stderr, " missing");\r
- else\r
- {\r
- fprintf(stderr, "; \"%s\" not", LT(1)->getText());\r
- if ( set_deg(eset)>1 ) fprintf(stderr, " in");\r
- }\r
- if ( set_deg(eset)>0 ) edecode(eset);\r
- else fprintf(stderr, " %s", token_tbl[etok]);\r
- if ( strlen(egroup) > 0 ) fprintf(stderr, " in %s", egroup);\r
- fprintf(stderr, "\n");\r
-}\r
-\r
-/* is b an element of set p? */\r
-int ANTLRParser::\r
-set_el(ANTLRTokenType b, SetWordType *p)\r
-{\r
- return( p[DIVWORD(b)] & bitmask[MODWORD(b)] );\r
-}\r
-\r
-int ANTLRParser::\r
-set_deg(SetWordType *a)\r
-{\r
- /* Fast compute degree of a set... the number\r
- of elements present in the set. Assumes\r
- that all word bits are used in the set\r
- */\r
- register SetWordType *p = a;\r
- register SetWordType *endp = &(a[bsetsize]);\r
- register int degree = 0;\r
-\r
- if ( a == NULL ) return 0;\r
- while ( p < endp )\r
- {\r
- register SetWordType t = *p;\r
- register SetWordType *b = &(bitmask[0]);\r
- do {\r
- if (t & *b) ++degree;\r
- } while (++b < &(bitmask[sizeof(SetWordType)*8]));\r
- p++;\r
- }\r
-\r
- return(degree);\r
-}\r
-\r
-void ANTLRParser::\r
-edecode(SetWordType *a)\r
-{\r
- register SetWordType *p = a;\r
- register SetWordType *endp = &(p[bsetsize]);\r
- register unsigned e = 0;\r
-\r
- if ( set_deg(a)>1 ) fprintf(stderr, " {");\r
- do {\r
- register SetWordType t = *p;\r
- register SetWordType *b = &(bitmask[0]);\r
- do {\r
- if ( t & *b ) fprintf(stderr, " %s", token_tbl[e]);\r
- e++;\r
- } while (++b < &(bitmask[sizeof(SetWordType)*8]));\r
- } while (++p < endp);\r
- if ( set_deg(a)>1 ) fprintf(stderr, " }");\r
-}\r
-\r
-/* input looks like:\r
- * zzFAIL(k, e1, e2, ...,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk)\r
- * where the zzMiss stuff is set here to the token that did not match\r
- * (and which set wasn't it a member of).\r
- */\r
-\r
-// MR9 29-Sep-97 Stan Bochnak (S.Bochnak@microTool.com.pl)\r
-// MR9 Original fix to static allocated text didn't\r
-// MR9 work because a pointer to it was passed back\r
-// MR9 to caller. Replace with instance variable.\r
-\r
-const int SETWORDCOUNT=20;\r
-\r
-void\r
-ANTLRParser::FAIL(int k, ...)\r
-{\r
-//\r
-// MR1 10-Apr-97 \r
-//\r
-\r
- if (zzFAILtext == NULL) zzFAILtext=new char [1000]; // MR9\r
- SetWordType **f=new SetWordType *[SETWORDCOUNT]; // MR1 // MR9\r
- SetWordType **miss_set;\r
- ANTLRChar **miss_text;\r
- _ANTLRTokenPtr *bad_tok;\r
- ANTLRChar **bad_text;\r
-//\r
-// 7-Apr-97 133MR1\r
-// err_k is passed as a "int *", not "unsigned *"\r
-//\r
- int *err_k; // MR1\r
- int i;\r
- va_list ap;\r
-\r
- va_start(ap, k);\r
-\r
- zzFAILtext[0] = '\0';\r
- if ( k > SETWORDCOUNT ) panic("FAIL: overflowed buffer");\r
- for (i=1; i<=k; i++) /* collect all lookahead sets */\r
- {\r
- f[i-1] = va_arg(ap, SetWordType *);\r
- }\r
- for (i=1; i<=k; i++) /* look for offending token */\r
- {\r
- if ( i>1 ) strcat(zzFAILtext, " ");\r
- strcat(zzFAILtext, LT(i)->getText());\r
- if ( !set_el(LA(i), f[i-1]) ) break;\r
- }\r
- miss_set = va_arg(ap, SetWordType **);\r
- miss_text = va_arg(ap, ANTLRChar **);\r
- bad_tok = va_arg(ap, _ANTLRTokenPtr *);\r
- bad_text = va_arg(ap, ANTLRChar **);\r
- err_k = va_arg(ap, int *); // MR1\r
- if ( i>k )\r
- {\r
- /* bad; lookahead is permutation that cannot be matched,\r
- * but, the ith token of lookahead is valid at the ith position\r
- * (The old LL sub 1 (k) versus LL(k) parsing technique)\r
- */\r
- *miss_set = NULL;\r
- *miss_text = LT(1)->getText();\r
- *bad_tok = LT(1);\r
- *bad_text = (*bad_tok)->getText();\r
- *err_k = k;\r
-//\r
-// MR4 20-May-97 erroneously deleted contents of f[]\r
-// MR4 reported by Bruce Guenter (bruceg@qcc.sk.ca)\r
-// MR1 10-Apr-97 release temporary storage\r
-//\r
- delete [] f; // MR1\r
- return; // MR1\r
- }\r
-/* fprintf(stderr, "%s not in %dth set\n", zztokens[LA(i)], i);*/\r
- *miss_set = f[i-1];\r
- *miss_text = zzFAILtext;\r
- *bad_tok = LT(i);\r
- *bad_text = (*bad_tok)->getText();\r
- if ( i==1 ) *err_k = 1;\r
- else *err_k = k;\r
-//\r
-// MR4 20-May-97 erroneously deleted contents of f[]\r
-// MR4 reported by Bruce Guenter (bruceg@qcc.sk.ca)\r
-// MR1 10-Apr-97 release temporary storage\r
-//\r
- delete [] f; // MR1\r
- return; // MR1\r
-}\r
-\r
-int ANTLRParser::\r
-_match_wdfltsig(ANTLRTokenType tokenWanted, SetWordType *whatFollows)\r
-{\r
- if ( dirty==LLk ) consume();\r
-\r
- if ( LA(1)!=tokenWanted )\r
- {\r
- syntaxErrCount++; /* MR11 */\r
- fprintf(stderr,\r
- "line %d: syntax error at \"%s\" missing %s\n",\r
- LT(1)->getLine(),\r
- (LA(1)==eofToken && LT(1)->getText()[0] == '@')?"<eof>":LT(1)->getText(), /* MR21a */\r
- token_tbl[tokenWanted]);\r
- consumeUntil( whatFollows );\r
- return 0;\r
- }\r
- else {\r
- dirty++;\r
- labase = (labase+1)&(LLk-1); // labase maintained even if !demand look\r
-/* if ( !demand_look ) consume(); */\r
- return 1;\r
- }\r
-}\r
-\r
-\r
-int ANTLRParser::\r
-_setmatch_wdfltsig(SetWordType *tokensWanted,\r
- ANTLRTokenType tokenTypeOfSet,\r
- SetWordType *whatFollows)\r
-{\r
- if ( dirty==LLk ) consume();\r
- if ( !set_el(LA(1), tokensWanted) )\r
- {\r
- syntaxErrCount++; /* MR11 */\r
- fprintf(stderr,\r
- "line %d: syntax error at \"%s\" missing %s\n",\r
- LT(1)->getLine(),\r
- (LA(1)==eofToken && LT(1)->getText()[0] == '@')?"<eof>":LT(1)->getText(), /* MR21a */\r
- token_tbl[tokenTypeOfSet]);\r
- consumeUntil( whatFollows );\r
- return 0;\r
- }\r
- else {\r
- dirty++;\r
- labase = (labase+1)&(LLk-1); // labase maintained even if !demand look\r
-/* if ( !demand_look ) consume(); */\r
- return 1;\r
- }\r
-}\r
-\r
-char *ANTLRParser::\r
-eMsgd(char *err,int d)\r
-{\r
- sprintf(eMsgBuffer, err, d); // dangerous, but I don't care\r
- return eMsgBuffer;\r
-}\r
-\r
-char *ANTLRParser::\r
-eMsg(char *err, char *s)\r
-{\r
- sprintf(eMsgBuffer, err, s);\r
- return eMsgBuffer;\r
-}\r
-\r
-char *ANTLRParser::\r
-eMsg2(char *err,char *s, char *t)\r
-{\r
- sprintf(eMsgBuffer, err, s, t);\r
- return eMsgBuffer;\r
-}\r
-\r
-void ANTLRParser::\r
-panic(const char *msg) // MR20 const\r
-{\r
- fprintf(stderr, "ANTLR panic: %s\n", msg);\r
- exit(PCCTS_EXIT_FAILURE); // MR1\r
-}\r
-\r
-const ANTLRChar *ANTLRParser:: // MR1\r
-parserTokenName(int tok) { // MR1\r
- return token_tbl[tok]; // MR1\r
-} // MR1\r
-\r
-void ANTLRParser::traceGuessDone(const ANTLRParserState *state) {\r
-\r
- int doIt=0;\r
-\r
- if (traceCurrentRuleName == NULL) return;\r
-\r
- if (traceOptionValue <= 0) {\r
- doIt=0;\r
- } else if (traceGuessOptionValue <= 0) {\r
- doIt=0;\r
- } else {\r
- doIt=1;\r
- };\r
-\r
- if (doIt) {\r
- fprintf(stderr,"guess done - returning to rule %s {\"%s\"} at depth %d",\r
- state->traceCurrentRuleName,\r
- LT(1)->getType() == eofToken ? "@" : LT(1)->getText(),\r
- state->traceDepth);\r
- if (state->guessing != 0) {\r
- fprintf(stderr," (guess mode continues - an enclosing guess is still active)");\r
- } else {\r
- fprintf(stderr," (guess mode ends)");\r
- };\r
- fprintf(stderr,"\n");\r
- };\r
-}\r
-\r
-void ANTLRParser::traceGuessFail() {\r
-\r
- int doIt=0;\r
-\r
- if (traceCurrentRuleName == NULL) return; /* MR21 */\r
-\r
- if (traceOptionValue <= 0) {\r
- doIt=0;\r
- } else if (guessing && traceGuessOptionValue <= 0) {\r
- doIt=0;\r
- } else {\r
- doIt=1;\r
- };\r
-\r
- if (doIt) {\r
- fprintf(stderr,"guess failed\n");\r
- };\r
-}\r
-\r
-/* traceOption:\r
- zero value turns off trace\r
-*/\r
-\r
-void ANTLRParser::tracein(const ANTLRChar * rule) {\r
-\r
- int doIt=0;\r
-\r
- traceDepth++;\r
- traceCurrentRuleName=rule;\r
-\r
- if (traceOptionValue <= 0) {\r
- doIt=0;\r
- } else if (guessing && traceGuessOptionValue <= 0) {\r
- doIt=0;\r
- } else {\r
- doIt=1;\r
- };\r
-\r
- if (doIt) {\r
- fprintf(stderr,"enter rule %s {\"%s\"} depth %d",\r
- rule,\r
- LT(1)->getType() == eofToken ? "@" : LT(1)->getText(),\r
- traceDepth);\r
- if (guessing) fprintf(stderr," guessing");\r
- fprintf(stderr,"\n");\r
- };\r
- return;\r
-}\r
-\r
-void ANTLRParser::traceout(const ANTLRChar * rule) {\r
-\r
- int doIt=0;\r
-\r
- traceDepth--;\r
-\r
- if (traceOptionValue <= 0) {\r
- doIt=0;\r
- } else if (guessing && traceGuessOptionValue <= 0) {\r
- doIt=0;\r
- } else {\r
- doIt=1;\r
- };\r
-\r
- if (doIt) {\r
- fprintf(stderr,"exit rule %s {\"%s\"} depth %d",\r
- rule,\r
- LT(1)->getType() == eofToken ? "@" : LT(1)->getText(),\r
- traceDepth+1);\r
- if (guessing) fprintf(stderr," guessing");\r
- fprintf(stderr,"\n");\r
- };\r
-}\r
-\r
-int ANTLRParser::traceOption(int delta) {\r
-\r
- int prevValue=traceOptionValue;\r
-\r
- traceOptionValue=traceOptionValue+delta;\r
-\r
- if (traceCurrentRuleName != NULL) {\r
- if (prevValue <= 0 && traceOptionValue > 0) {\r
- fprintf(stderr,"trace enabled in rule %s depth %d\n",traceCurrentRuleName,traceDepth);\r
- };\r
- if (prevValue > 0 && traceOptionValue <= 0) {\r
- fprintf(stderr,"trace disabled in rule %s depth %d\n",traceCurrentRuleName,traceDepth);\r
- };\r
- };\r
-\r
- return prevValue;\r
-}\r
-\r
-int ANTLRParser::traceGuessOption(int delta) {\r
-\r
- int prevValue=traceGuessOptionValue;\r
-\r
- traceGuessOptionValue=traceGuessOptionValue+delta;\r
-\r
- if (traceCurrentRuleName != NULL) {\r
- if (prevValue <= 0 && traceGuessOptionValue > 0) {\r
- fprintf(stderr,"guess trace enabled in rule %s depth %d\n",traceCurrentRuleName,traceDepth);\r
- };\r
- if (prevValue > 0 && traceGuessOptionValue <= 0) {\r
- fprintf(stderr,"guess trace disabled in rule %s depth %d\n",traceCurrentRuleName,traceDepth);\r
- };\r
- };\r
- return prevValue;\r
-}\r
-\r
-// MR19 V.H. Simonis Defer Fetch feature\r
-\r
-void ANTLRParser::undeferFetch()\r
-{\r
-\r
-#ifdef ZZDEFER_FETCH\r
- if (stillToFetch) {\r
- for (int stillToFetch_x = 0; stillToFetch_x < stillToFetch; ++stillToFetch_x) {\r
- NLA = inputTokens->getToken()->getType();\r
- dirty--;\r
- lap = (lap+1)&(LLk-1);\r
- }\r
- stillToFetch = 0;\r
- }\r
-#else\r
- return;\r
-#endif\r
-\r
-}\r
-\r
-int ANTLRParser::isDeferFetchEnabled()\r
-{\r
-#ifdef ZZDEFER_FETCH\r
- return 1;\r
-#else\r
- return 0;\r
-#endif\r
-}\r