]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/TianoTools/Pccts/h/AParser.cpp
Restructuring for better separation of Tool packages.
[mirror_edk2.git] / Tools / Source / TianoTools / Pccts / h / AParser.cpp
diff --git a/Tools/Source/TianoTools/Pccts/h/AParser.cpp b/Tools/Source/TianoTools/Pccts/h/AParser.cpp
deleted file mode 100644 (file)
index 720fe75..0000000
+++ /dev/null
@@ -1,871 +0,0 @@
-/* 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-2000\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
-\r
-#ifdef _MSC_VER  // MR23\r
-//Turn off warning:\r
-//interaction between '_setjmp' and C++ object destruction is non-portable\r
-#pragma warning(disable : 4611)\r
-#endif\r
-int ANTLRParser::\r
-guess(ANTLRParserState *st)\r
-{\r
-       saveState(st);\r
-       guessing = 1;\r
-       return setjmp(guess_start.state);\r
-}\r
-#ifdef _MSC_VER  // MR23\r
-#pragma warning(default: 4611)\r
-#endif\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
-            /* MR23 */ printMessage(stderr,\r
-                   "trace enable restored in rule %s depth %d\n",\r
-                   traceCurrentRuleName,\r
-                   traceDepth);\r
-          };\r
-          if (traceOptionValue <= 0) {\r
-            /* MR23 */ printMessage(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;\r
-               *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, SetWordType *tokclassErrset)\r
-{\r
-       if ( dirty==LLk ) {\r
-               consume();\r
-       }\r
-       if ( !set_el(LA(1), tset) ) {\r
-               *MissText=NULL;                                                                         /* MR23 */\r
-               *MissTok=(ANTLRTokenType) 0;                                            /* MR23 */\r
-               *BadTok=LT(1);                                                                          /* MR23 */\r
-               *MissSet=tokclassErrset;                                                        /* MR23 */\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
-\r
-/* MR23 THM There appears to be a parameter "badText" passed to syn()\r
-            which is not present in the parameter list.  This may be\r
-            because in C mode there is no attribute function which\r
-            returns the text, so the text representation of the token\r
-            must be passed explicitly.  I think.\r
-*/\r
-           \r
-void ANTLRParser::\r
-syn(_ANTLRTokenPtr /*tok MR23*/, ANTLRChar *egroup, SetWordType *eset,\r
-       ANTLRTokenType etok, int k)\r
-{\r
-       int line;\r
-\r
-       line = LT(1)->getLine();\r
-\r
-    syntaxErrCount++;                                   /* MR11 */\r
-\r
-    /* MR23  If the token is not an EOF token, then use the ->getText() value.\r
-\r
-             If the token is the EOF token the text returned by ->getText() \r
-             may be garbage.  If the text from the token table is "@" use\r
-             "<eof>" instead, because end-users don't know what "@" means.\r
-             If the text is not "@" then use that text, which must have been\r
-             supplied by the grammar writer.\r
-     */\r
-       const char * errorAt = LT(1)->getText();\r
-       if (LA(1) == eofToken) {\r
-         errorAt = parserTokenName(LA(1));\r
-         if (errorAt[0] == '@') errorAt = "<eof>";\r
-       }\r
-       /* MR23 */ printMessage(stderr, "line %d: syntax error at \"%s\"",\r
-                                       line, errorAt);\r
-       if ( !etok && !eset ) {/* MR23 */ printMessage(stderr, "\n"); return;}\r
-       if ( k==1 ) /* MR23 */ printMessage(stderr, " missing");\r
-       else\r
-       {\r
-               /* MR23 */ printMessage(stderr, "; \"%s\" not", LT(k)->getText()); // MR23 use LT(k) since k>1\r
-               if ( set_deg(eset)>1 ) /* MR23 */ printMessage(stderr, " in");\r
-       }\r
-       if ( set_deg(eset)>0 ) edecode(eset);\r
-       else /* MR23 */ printMessage(stderr, " %s", token_tbl[etok]);\r
-       if ( strlen(egroup) > 0 ) /* MR23 */ printMessage(stderr, " in %s", egroup);\r
-       /* MR23 */ printMessage(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 ) /* MR23 */ printMessage(stderr, " {");\r
-       do {\r
-               register SetWordType t = *p;\r
-               register SetWordType *b = &(bitmask[0]);\r
-               do {\r
-                       if ( t & *b ) /* MR23 */ printMessage(stderr, " %s", token_tbl[e]);\r
-                       e++;\r
-               } while (++b < &(bitmask[sizeof(SetWordType)*8]));\r
-       } while (++p < endp);\r
-       if ( set_deg(a)>1 ) /* MR23 */ printMessage(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
-/*  MR23 printMessage(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
-               /* MR23 */ printMessage(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
-               /* MR23 */ printMessage(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
-       /* MR23 */ printMessage(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
-    /* MR23 */ printMessage(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
-      /* MR23 */ printMessage(stderr," (guess mode continues - an enclosing guess is still active)");\r
-    } else {\r
-      /* MR23 */ printMessage(stderr," (guess mode ends)");\r
-    };\r
-    /* MR23 */ printMessage(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
-    /* MR23 */ printMessage(stderr,"guess failed in %s\n",traceCurrentRuleName);\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
-    /* MR23 */ printMessage(stderr,"enter rule %s {\"%s\"} depth %d",\r
-            rule,\r
-            LT(1)->getType() == eofToken ? "@" : LT(1)->getText(),\r
-            traceDepth);\r
-    if (guessing) /* MR23 */ printMessage(stderr," guessing");\r
-    /* MR23 */ printMessage(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
-    /* MR23 */ printMessage(stderr,"exit rule %s {\"%s\"} depth %d",\r
-            rule,\r
-            LT(1)->getType() == eofToken ? "@" : LT(1)->getText(),\r
-            traceDepth+1);\r
-    if (guessing) /* MR23 */ printMessage(stderr," guessing");\r
-    /* MR23 */ printMessage(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
-        /* MR23 */ printMessage(stderr,"trace enabled in rule %s depth %d\n",traceCurrentRuleName,traceDepth);\r
-      };\r
-      if (prevValue > 0 && traceOptionValue <= 0) {\r
-        /* MR23 */ printMessage(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
-        /* MR23 */ printMessage(stderr,"guess trace enabled in rule %s depth %d\n",traceCurrentRuleName,traceDepth);\r
-      };\r
-      if (prevValue > 0 && traceGuessOptionValue <= 0) {\r
-        /* MR23 */ printMessage(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
-\r
-//MR23\r
-int ANTLRParser::printMessage(FILE* pFile, const char* pFormat, ...)\r
-{\r
-       va_list marker;\r
-       va_start( marker, pFormat );\r
-       int iRet = printMessageV(pFile, pFormat, marker);\r
-       va_end( marker );\r
-       return iRet;\r
-}\r
-\r
-int ANTLRParser::printMessageV(FILE* pFile, const char* pFormat, va_list arglist) // MR23\r
-{\r
-       return vfprintf(pFile, pFormat, arglist);\r
-}\r
-\r
-// MR23 Move semantic predicate error handling from macro to virtual function\r
-//\r
-// Called by the zzfailed_pred\r
-\r
-void ANTLRParser::failedSemanticPredicate(const char* predicate)\r
-{\r
-    printMessage(stdout,"line %d: semantic error; failed predicate: '%s'\n",\r
-       LT(1)->getLine(), predicate);\r
-}\r