]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkCompatibilityPkg/Other/Maintained/Tools/Pccts/h/err.h
Add in the 1st version of ECP.
[mirror_edk2.git] / EdkCompatibilityPkg / Other / Maintained / Tools / Pccts / h / err.h
diff --git a/EdkCompatibilityPkg/Other/Maintained/Tools/Pccts/h/err.h b/EdkCompatibilityPkg/Other/Maintained/Tools/Pccts/h/err.h
new file mode 100644 (file)
index 0000000..c08dbb4
--- /dev/null
@@ -0,0 +1,1168 @@
+/*\r
+ * err.h\r
+ *\r
+ * Standard error handling mechanism\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
+ * Has grown to hold all kinds of stuff (err.h is increasingly misnamed)\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
+#ifndef ERR_H\r
+#define ERR_H\r
+\r
+#include "pcctscfg.h"\r
+#include <stdlib.h>\r
+#include <assert.h>\r
+\r
+/*                        */\r
+/*  7-Apr-97  133MR1                    */\r
+/*    Proper choice of STDC and cplusplus pre-processor symbols (?) */\r
+/*                        */\r
+#include "pccts_string.h"\r
+\r
+#ifdef PCCTS_USE_STDARG\r
+#include "pccts_stdarg.h"\r
+#else\r
+#include <varargs.h>\r
+#endif\r
+\r
+#ifdef DUM\r
+/* Define usable bits per unsigned int word (used for set stuff) */\r
+#ifdef PC\r
+#define BSETWORDSIZE 16\r
+#define BSETLOGWORDSIZE  4\r
+#else\r
+#define  BSETWORDSIZE 32\r
+#define BSETLOGWORDSIZE 5\r
+#endif\r
+#endif\r
+\r
+#define  BSETWORDSIZE 8\r
+#define BSETLOGWORDSIZE 3    /* SetWordType is 8bits */\r
+\r
+#define  BSETMODWORD(x) ((x) & (BSETWORDSIZE-1))    /* x % BSETWORDSIZE */\r
+#define  BSETDIVWORD(x) ((x) >> BSETLOGWORDSIZE)    /* x / BSETWORDSIZE */\r
+\r
+/* This is not put into the global pccts_parser structure because it is\r
+ * hidden and does not need to be saved during a "save state" operation\r
+ */\r
+/* maximum of 32 bits/unsigned int and must be 8 bits/byte */\r
+static SetWordType bitmask[] = {\r
+  0x00000001, 0x00000002, 0x00000004, 0x00000008,\r
+  0x00000010, 0x00000020, 0x00000040, 0x00000080\r
+};\r
+\r
+#ifdef zzTRACE_RULES\r
+int  zzTraceOptionValueDefault=1;\r
+int  zzTraceOptionValue=1;\r
+int  zzTraceGuessOptionValue=1;\r
+char *zzTraceCurrentRuleName=NULL;\r
+int  zzTraceDepth=0;\r
+#endif\r
+\r
+int  zzGuessSeq=0;          /* MR10 */\r
+int  zzSyntaxErrCount=0;    /* MR11 */\r
+int  zzLexErrCount=0;       /* MR11 */\r
+\r
+void\r
+#ifdef __USE_PROTOS\r
+zzresynch(SetWordType *wd,SetWordType mask)\r
+#else\r
+zzresynch(wd,mask)\r
+SetWordType *wd, mask;\r
+#endif\r
+{\r
+  static int consumed = 1;\r
+\r
+  /* if you enter here without having consumed a token from last resynch\r
+   * force a token consumption.\r
+   */\r
+  if ( !consumed ) {zzCONSUME; consumed=1; return;}   /* MR10 */\r
+\r
+  /* if current token is in resynch set, we've got what we wanted */\r
+  if ( wd[LA(1)]&mask || LA(1) == zzEOF_TOKEN ) {consumed=0; return;}\r
+  \r
+  /* scan until we find something in the resynch set */\r
+  while ( !(wd[LA(1)]&mask) && LA(1) != zzEOF_TOKEN ) {zzCONSUME;}\r
+  consumed=1;\r
+}\r
+\r
+/*                                                                          */\r
+/*  7-Apr-97 133MR1 for C++ and MR7 for C                                   */\r
+/*          Change suggested by Eli Sternheim (eli@interhdl.com)           */\r
+/*                                                                          */\r
+\r
+void\r
+#ifdef __USE_PROTOS\r
+zzconsumeUntil(SetWordType *st)\r
+#else\r
+zzconsumeUntil(st)\r
+SetWordType *st;\r
+#endif\r
+{\r
+    int     tmp;                                                     /* MR7 */\r
+  while ( !zzset_el( (tmp=LA(1)), st) && tmp!=1 /* Eof */) {       /* MR7 */\r
+                                                      zzCONSUME; }   /* MR7 */\r
+}\r
+\r
+/*                                                                          */\r
+/*  7-Apr-97 133MR1 for C++ and MR7 for C                                   */\r
+/*          Change suggested by Eli Sternheim (eli@interhdl.com)           */\r
+/*                                                                          */\r
+\r
+void\r
+#ifdef __USE_PROTOS\r
+zzconsumeUntilToken(int t)\r
+#else\r
+zzconsumeUntilToken(t)\r
+int t;\r
+#endif\r
+{\r
+    int     tmp;                                                     /* MR7 */\r
+  while ( (tmp=LA(1)) !=t && tmp!=1 /* Eof */) { zzCONSUME; }      /* MR7 */\r
+}\r
+\r
+/* input looks like:\r
+ *    zzFAIL(k, e1, e2, ...,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText)\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
+#ifdef PCCTS_USE_STDARG\r
+void zzFAIL(int k, ...)\r
+#else\r
+void zzFAIL(va_alist)\r
+va_dcl\r
+#endif\r
+{\r
+#ifdef LL_K\r
+  static char text[LL_K*ZZLEXBUFSIZE+1];\r
+  SetWordType *f[LL_K];\r
+#else\r
+  static char text[ZZLEXBUFSIZE+1];\r
+  SetWordType *f[1];\r
+#endif\r
+  SetWordType **miss_set;\r
+  char **miss_text;\r
+  int *bad_tok;\r
+  char **bad_text;\r
+  int *err_k;\r
+  int i;\r
+  va_list ap;\r
+#ifndef PCCTS_USE_STDARG      /* MR20 */\r
+  int k;\r
+#endif\r
+#ifdef PCCTS_USE_STDARG         /* MR20 */\r
+  va_start(ap, k);\r
+#else\r
+  va_start(ap);\r
+  k = va_arg(ap, int);  /* how many lookahead sets? */\r
+#endif\r
+    assert(k <= sizeof(f)/sizeof(f[0]));    /* MR20 G. Hobbelt */\r
+  text[0] = '\0';\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(text, " ");\r
+    strcat(text, LATEXT(i));\r
+    if ( !zzset_el((unsigned)LA(i), f[i-1]) ) break;\r
+  }\r
+  miss_set = va_arg(ap, SetWordType **);\r
+  miss_text = va_arg(ap, char **);\r
+  bad_tok = va_arg(ap, int *);\r
+  bad_text = va_arg(ap, char **);\r
+  err_k = va_arg(ap, int *);\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 = zzlextext;\r
+    *bad_tok = LA(1);\r
+    *bad_text = LATEXT(1);\r
+    *err_k = k;\r
+    return;\r
+  }\r
+/*  fprintf(stderr, "%s not in %dth set\n", zztokens[LA(i)], i);*/\r
+  *miss_set = f[i-1];\r
+  *miss_text = text;\r
+  *bad_tok = LA(i);\r
+  *bad_text = LATEXT(i);\r
+  if ( i==1 ) *err_k = 1;\r
+  else *err_k = k;\r
+}\r
+\r
+#ifdef __USE_PROTOS\r
+void zzTraceGuessDone(zzantlr_state *state)\r
+#else\r
+void zzTraceGuessDone(state)\r
+  zzantlr_state     *state;\r
+#endif\r
+{\r
+#ifdef zzTRACE_RULES\r
+#ifdef ZZCAN_GUESS\r
+\r
+  int   doIt=0;\r
+\r
+  if (zzTraceCurrentRuleName == NULL) return;\r
+\r
+  if (zzTraceOptionValue <= 0) {\r
+    doIt=0;\r
+  } else if (zzTraceGuessOptionValue <= 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
+        LATEXT(1),\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
+#endif\r
+#endif\r
+}\r
+\r
+void\r
+#ifdef __USE_PROTOS\r
+zzsave_antlr_state(zzantlr_state *buf)\r
+#else\r
+zzsave_antlr_state(buf)\r
+zzantlr_state *buf;\r
+#endif\r
+{\r
+#ifdef LL_K\r
+  int     i;\r
+#endif\r
+\r
+#ifdef ZZCAN_GUESS\r
+  buf->guess_start = zzguess_start;\r
+  buf->guessing = zzguessing;\r
+#endif\r
+  buf->asp = zzasp;\r
+#ifdef GENAST\r
+  buf->ast_sp = zzast_sp;\r
+#endif\r
+#ifdef ZZINF_LOOK\r
+  buf->inf_labase = zzinf_labase;\r
+  buf->inf_last = zzinf_last;\r
+\r
+/* MR6   Gunnar Rxnning (gunnar@candleweb.no)                                */\r
+/* MR6    Additional state needs to be saved/restored                       */\r
+\r
+    buf->inf_tokens = zzinf_tokens;                                  /* MR6 */\r
+  buf->inf_text = zzinf_text;                                      /* MR6 */\r
+  buf->inf_text_buffer = zzinf_text_buffer;                        /* MR6 */\r
+  buf->inf_line = zzinf_line;                                   /* MR6 */\r
+\r
+#endif\r
+#ifdef DEMAND_LOOK\r
+  buf->dirty = zzdirty;\r
+#endif\r
+#ifdef LL_K\r
+  for (i=0; i<LL_K; i++) buf->tokenLA[i] = zztokenLA[i];\r
+  for (i=0; i<LL_K; i++) strcpy(buf->textLA[i], zztextLA[i]);\r
+  buf->lap = zzlap;\r
+  buf->labase = zzlabase;\r
+#else\r
+  buf->token = zztoken;\r
+  strcpy(buf->text, zzlextext);\r
+#endif\r
+#ifdef zzTRACE_RULES\r
+\r
+    /* MR10 */\r
+\r
+    buf->traceOptionValue=zzTraceOptionValue;\r
+    buf->traceGuessOptionValue=zzTraceGuessOptionValue;\r
+    buf->traceCurrentRuleName=zzTraceCurrentRuleName;\r
+    buf->traceDepth=zzTraceDepth;\r
+#endif\r
+}\r
+\r
+void\r
+#ifdef __USE_PROTOS\r
+zzrestore_antlr_state(zzantlr_state *buf)\r
+#else\r
+zzrestore_antlr_state(buf)\r
+zzantlr_state *buf;\r
+#endif\r
+{\r
+\r
+#ifdef zzTRACE_RULES\r
+    int     prevTraceOptionValue;\r
+#endif\r
+\r
+#ifdef LL_K\r
+  int     i;\r
+#endif\r
+\r
+#ifdef ZZCAN_GUESS\r
+  zzguess_start = buf->guess_start;\r
+  zzguessing = buf->guessing;\r
+#endif\r
+  zzasp = buf->asp;\r
+#ifdef GENAST\r
+  zzast_sp = buf->ast_sp;\r
+#endif\r
+#ifdef ZZINF_LOOK\r
+  zzinf_labase = buf->inf_labase;\r
+  zzinf_last = buf->inf_last;\r
+\r
+/* MR6   Gunnar Rxnning (gunnar@candleweb.no)                                */\r
+/* MR6    Additional state needs to be saved/restored                       */\r
+\r
+  zzinf_tokens = buf->inf_tokens;                                  /* MR6 */\r
+  zzinf_text = buf->inf_text;                                      /* MR6 */\r
+  zzinf_text_buffer = buf->inf_text_buffer;                        /* MR6 */\r
+  zzinf_line = buf->inf_line;                                   /* MR6 */\r
+#endif\r
+#ifdef DEMAND_LOOK\r
+  zzdirty = buf->dirty;\r
+#endif\r
+#ifdef LL_K\r
+  for (i=0; i<LL_K; i++) zztokenLA[i] = buf->tokenLA[i];\r
+  for (i=0; i<LL_K; i++) strcpy(zztextLA[i], buf->textLA[i]);\r
+  zzlap = buf->lap;\r
+  zzlabase = buf->labase;\r
+#else\r
+  zztoken = buf->token;\r
+  strcpy(zzlextext, buf->text);\r
+#endif\r
+#ifdef zzTRACE_RULES\r
+\r
+    prevTraceOptionValue=zzTraceOptionValue;\r
+    zzTraceOptionValue=buf->traceOptionValue;\r
+    if ( (prevTraceOptionValue > 0) !=\r
+             (zzTraceOptionValue > 0)) {\r
+      if (zzTraceOptionValue > 0) {\r
+        fprintf(stderr,"trace enable restored in rule %s depth %d\n",\r
+                        zzTraceCurrentRuleName,zzTraceDepth);\r
+      };\r
+      if (zzTraceOptionValue <= 0) {\r
+        fprintf(stderr,"trace disable restored in rule %s depth %d\n",\r
+                        zzTraceCurrentRuleName,zzTraceDepth);\r
+      };\r
+    };\r
+\r
+    zzTraceOptionValue=buf->traceOptionValue;            /* MR10 */\r
+    zzTraceGuessOptionValue=buf->traceGuessOptionValue;  /* MR10 */\r
+    zzTraceCurrentRuleName=buf->traceCurrentRuleName;    /* MR10 */\r
+    zzTraceDepth=buf->traceDepth;                        /* MR10 */\r
+    zzTraceGuessDone(buf);                               /* MR10 */\r
+#endif\r
+}\r
+\r
+void\r
+#ifdef __USE_PROTOS\r
+zzedecode(SetWordType *a)\r
+#else\r
+zzedecode(a)\r
+SetWordType *a;\r
+#endif\r
+{\r
+  register SetWordType *p = a;\r
+  register SetWordType *endp = &(p[zzSET_SIZE]);\r
+  register unsigned e = 0;\r
+\r
+  if ( zzset_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", zztokens[e]);\r
+      e++;\r
+    } while (++b < &(bitmask[sizeof(SetWordType)*8]));\r
+  } while (++p < endp);\r
+  if ( zzset_deg(a)>1 ) fprintf(stderr, " }");\r
+}\r
+\r
+#ifndef USER_ZZSYN\r
+/* standard error reporting function */\r
+void\r
+#ifdef __USE_PROTOS\r
+zzsyn(char *text, int tok, char *egroup, SetWordType *eset, int etok, int k, char *bad_text)\r
+#else\r
+zzsyn(text, tok, egroup, eset, etok, k, bad_text)\r
+char *text, *egroup, *bad_text;\r
+int tok;\r
+int etok;\r
+int k;\r
+SetWordType *eset;\r
+#endif\r
+{\r
+  \r
+    zzSyntaxErrCount++;                             /* MR11 */\r
+  fprintf(stderr, "line %d: syntax error at \"%s\"", zzline, (tok==zzEOF_TOKEN)?"EOF":bad_text);\r
+  if ( !etok && !eset ) {fprintf(stderr, "\n"); return;}\r
+  if ( k==1 ) fprintf(stderr, " missing");\r
+  else\r
+  {\r
+    fprintf(stderr, "; \"%s\" not", bad_text);\r
+    if ( zzset_deg(eset)>1 ) fprintf(stderr, " in");\r
+  }\r
+  if ( zzset_deg(eset)>0 ) zzedecode(eset);\r
+  else fprintf(stderr, " %s", zztokens[etok]);\r
+  if ( strlen(egroup) > 0 ) fprintf(stderr, " in %s", egroup);\r
+  fprintf(stderr, "\n");\r
+}\r
+#endif\r
+\r
+/* is b an element of set p? */\r
+int\r
+#ifdef __USE_PROTOS\r
+zzset_el(unsigned b, SetWordType *p)\r
+#else\r
+zzset_el(b,p)\r
+unsigned b;\r
+SetWordType *p;\r
+#endif\r
+{\r
+  return( p[BSETDIVWORD(b)] & bitmask[BSETMODWORD(b)] );\r
+}\r
+\r
+int\r
+#ifdef __USE_PROTOS\r
+zzset_deg(SetWordType *a)\r
+#else\r
+zzset_deg(a)\r
+SetWordType *a;\r
+#endif\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[zzSET_SIZE]);\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
+#ifdef DEMAND_LOOK\r
+\r
+#ifdef LL_K\r
+int\r
+#ifdef __USE_PROTOS\r
+_zzmatch(int _t, char **zzBadText, char **zzMissText,\r
+    int *zzMissTok, int *zzBadTok,\r
+    SetWordType **zzMissSet)\r
+#else\r
+_zzmatch(_t, zzBadText, zzMissText, zzMissTok, zzBadTok, zzMissSet)\r
+int _t;\r
+char **zzBadText;\r
+char **zzMissText;\r
+int *zzMissTok, *zzBadTok;\r
+SetWordType **zzMissSet;\r
+#endif\r
+{\r
+  if ( zzdirty==LL_K ) {\r
+    zzCONSUME;\r
+  }\r
+  if ( LA(1)!=_t ) {\r
+    *zzBadText = *zzMissText=LATEXT(1);  \r
+    *zzMissTok= _t; *zzBadTok=LA(1);\r
+    *zzMissSet=NULL;        \r
+    return 0;\r
+  }\r
+  zzMakeAttr            \r
+  zzdirty++;            \r
+  zzlabase++;            \r
+  return 1;\r
+}\r
+\r
+int\r
+#ifdef __USE_PROTOS\r
+_zzmatch_wsig(int _t)\r
+#else\r
+_zzmatch_wsig(_t)\r
+int _t;\r
+#endif\r
+{\r
+  if ( zzdirty==LL_K ) {\r
+    zzCONSUME;\r
+  }\r
+  if ( LA(1)!=_t ) {\r
+    return 0;\r
+  }\r
+  zzMakeAttr            \r
+  zzdirty++;            \r
+  zzlabase++;            \r
+  return 1;\r
+}\r
+\r
+#else\r
+\r
+int\r
+#ifdef __USE_PROTOS\r
+_zzmatch(int _t, char **zzBadText, char **zzMissText,\r
+     int *zzMissTok, int *zzBadTok, SetWordType **zzMissSet)\r
+#else\r
+_zzmatch(_t, zzBadText, zzMissText, zzMissTok, zzBadTok, zzMissSet)\r
+int _t;\r
+char **zzBadText;\r
+char **zzMissText;\r
+int *zzMissTok, *zzBadTok;\r
+SetWordType **zzMissSet;\r
+#endif\r
+{                \r
+  if ( zzdirty ) {zzCONSUME;}    \r
+  if ( LA(1)!=_t ) {\r
+    *zzBadText = *zzMissText=LATEXT(1);  \r
+    *zzMissTok= _t; *zzBadTok=LA(1);\r
+    *zzMissSet=NULL;        \r
+    return 0;\r
+  }                \r
+  zzdirty = 1;          \r
+  zzMakeAttr            \r
+  return 1;\r
+}\r
+\r
+int\r
+#ifdef __USE_PROTOS\r
+_zzmatch_wsig(int _t)\r
+#else\r
+_zzmatch_wsig(_t)\r
+int _t;\r
+#endif\r
+{\r
+  if ( zzdirty ) {zzCONSUME;}    \r
+  if ( LA(1)!=_t ) {\r
+    return 0;\r
+  }\r
+  zzdirty = 1;          \r
+  zzMakeAttr            \r
+  return 1;\r
+}\r
+\r
+#endif /*LL_K*/\r
+\r
+#else\r
+\r
+int\r
+#ifdef __USE_PROTOS\r
+_zzmatch(int _t, char **zzBadText, char **zzMissText,\r
+    int *zzMissTok, int *zzBadTok,\r
+    SetWordType **zzMissSet)\r
+#else\r
+_zzmatch(_t, zzBadText, zzMissText, zzMissTok, zzBadTok, zzMissSet)\r
+int _t;\r
+char **zzBadText;\r
+char **zzMissText;\r
+int *zzMissTok, *zzBadTok;\r
+SetWordType **zzMissSet;\r
+#endif\r
+{\r
+  if ( LA(1)!=_t ) {        \r
+    *zzBadText = *zzMissText=LATEXT(1);  \r
+    *zzMissTok= _t; *zzBadTok=LA(1);\r
+    *zzMissSet=NULL;        \r
+    return 0;\r
+  }\r
+  zzMakeAttr\r
+  return 1;\r
+}\r
+\r
+int\r
+#ifdef __USE_PROTOS\r
+_zzmatch_wsig(int _t)\r
+#else\r
+_zzmatch_wsig(_t)\r
+int _t;\r
+#endif\r
+{\r
+  if ( LA(1)!=_t ) return 0;\r
+  zzMakeAttr            \r
+  return 1;\r
+}\r
+\r
+#endif /*DEMAND_LOOK*/\r
+\r
+#ifdef ZZINF_LOOK\r
+void\r
+#ifdef __USE_PROTOS\r
+_inf_zzgettok(void)\r
+#else\r
+_inf_zzgettok()\r
+#endif\r
+{\r
+  if ( zzinf_labase >= zzinf_last )          \r
+    {NLA = zzEOF_TOKEN; strcpy(NLATEXT, "");}  \r
+  else {                      \r
+    NLA = zzinf_tokens[zzinf_labase];\r
+    zzline = zzinf_line[zzinf_labase];  /* wrong in 1.21 */\r
+    strcpy(NLATEXT, zzinf_text[zzinf_labase]);    \r
+    zzinf_labase++;                 \r
+  }                        \r
+}\r
+#endif\r
+\r
+#ifdef ZZINF_LOOK\r
+/* allocate default size text,token and line arrays;\r
+ * then, read all of the input reallocing the arrays as needed.\r
+ * Once the number of total tokens is known, the LATEXT(i) array (zzinf_text)\r
+ * is allocated and it's pointers are set to the tokens in zzinf_text_buffer.\r
+ */\r
+void\r
+#ifdef __USE_PROTOS\r
+zzfill_inf_look(void)\r
+#else\r
+zzfill_inf_look()\r
+#endif\r
+{\r
+  int tok, line;\r
+  int zzinf_token_buffer_size = ZZINF_DEF_TOKEN_BUFFER_SIZE;\r
+  int zzinf_text_buffer_size = ZZINF_DEF_TEXT_BUFFER_SIZE;\r
+  int zzinf_text_buffer_index = 0;\r
+  int zzinf_lap = 0;\r
+\r
+  /* allocate text/token buffers */\r
+  zzinf_text_buffer = (char *) malloc(zzinf_text_buffer_size);\r
+  if ( zzinf_text_buffer == NULL )\r
+  {\r
+    fprintf(stderr, "cannot allocate lookahead text buffer (%d bytes)\n",\r
+    zzinf_text_buffer_size);\r
+    exit(PCCTS_EXIT_FAILURE);                  \r
+  }\r
+  zzinf_tokens = (int *) calloc(zzinf_token_buffer_size,sizeof(int));\r
+  if ( zzinf_tokens == NULL )\r
+  {\r
+    fprintf(stderr,  "cannot allocate token buffer (%d tokens)\n",\r
+        zzinf_token_buffer_size);\r
+    exit(PCCTS_EXIT_FAILURE);                  \r
+  }\r
+    zzinf_line = (int *) calloc(zzinf_token_buffer_size,sizeof(int));\r
+    if ( zzinf_line == NULL )\r
+    {\r
+        fprintf(stderr, "cannot allocate line buffer (%d ints)\n",\r
+                zzinf_token_buffer_size);\r
+        exit(PCCTS_EXIT_FAILURE);\r
+  }\r
+\r
+  /* get tokens, copying text to text buffer */\r
+  zzinf_text_buffer_index = 0;\r
+  do {\r
+    zzgettok();\r
+    line = zzreal_line;\r
+    while ( zzinf_lap>=zzinf_token_buffer_size )\r
+    {\r
+      zzinf_token_buffer_size += ZZINF_BUFFER_TOKEN_CHUNK_SIZE;\r
+      zzinf_tokens = (int *) realloc(zzinf_tokens,\r
+                         zzinf_token_buffer_size*sizeof(int));\r
+      if ( zzinf_tokens == NULL )\r
+      {\r
+        fprintf(stderr, "cannot allocate lookahead token buffer (%d tokens)\n",\r
+            zzinf_token_buffer_size);\r
+        exit(PCCTS_EXIT_FAILURE);\r
+      }\r
+            zzinf_line = (int *) realloc(zzinf_line,\r
+                                         zzinf_token_buffer_size*sizeof(int));\r
+            if ( zzinf_line == NULL )\r
+            {\r
+                fprintf(stderr, "cannot allocate lookahead line buffer (%d ints)\n",\r
+                        zzinf_token_buffer_size);\r
+                exit(PCCTS_EXIT_FAILURE);\r
+      }\r
+\r
+    }\r
+    while ( (zzinf_text_buffer_index+strlen(NLATEXT)+1) >= zzinf_text_buffer_size )\r
+    {\r
+      zzinf_text_buffer_size += ZZINF_BUFFER_TEXT_CHUNK_SIZE;\r
+      zzinf_text_buffer = (char *) realloc(zzinf_text_buffer,\r
+                         zzinf_text_buffer_size);\r
+      if ( zzinf_text_buffer == NULL )\r
+      {\r
+        fprintf(stderr,  "cannot allocate lookahead text buffer (%d bytes)\n",\r
+            zzinf_text_buffer_size);\r
+        exit(PCCTS_EXIT_FAILURE);\r
+      }\r
+    }\r
+    /* record token and text and line of input symbol */\r
+    tok = zzinf_tokens[zzinf_lap] = NLA;\r
+    strcpy(&zzinf_text_buffer[zzinf_text_buffer_index], NLATEXT);\r
+    zzinf_text_buffer_index += strlen(NLATEXT)+1;\r
+        zzinf_line[zzinf_lap] = line;\r
+    zzinf_lap++;\r
+  } while (tok!=zzEOF_TOKEN);\r
+  zzinf_labase = 0;\r
+  zzinf_last = zzinf_lap-1;\r
+\r
+  /* allocate ptrs to text of ith token */\r
+  zzinf_text = (char **) calloc(zzinf_last+1,sizeof(char *));\r
+  if ( zzinf_text == NULL )\r
+  {\r
+    fprintf(stderr,  "cannot allocate lookahead text buffer (%d)\n",\r
+        zzinf_text_buffer_size);\r
+    exit(PCCTS_EXIT_FAILURE);                    \r
+  }                          \r
+  zzinf_text_buffer_index = 0;\r
+  zzinf_lap = 0;\r
+  /* set ptrs so that zzinf_text[i] is the text of the ith token found on input */\r
+  while (zzinf_lap<=zzinf_last)\r
+  {\r
+      zzinf_text[zzinf_lap++] = &zzinf_text_buffer[zzinf_text_buffer_index];\r
+    zzinf_text_buffer_index += strlen(&zzinf_text_buffer[zzinf_text_buffer_index])+1;\r
+  }\r
+}\r
+#endif\r
+\r
+int\r
+#ifdef __USE_PROTOS\r
+_zzsetmatch(SetWordType *e, char **zzBadText, char **zzMissText,\r
+      int *zzMissTok, int *zzBadTok,\r
+      SetWordType **zzMissSet)\r
+#else\r
+_zzsetmatch(e, zzBadText, zzMissText, zzMissTok, zzBadTok, zzMissSet)\r
+SetWordType *e;\r
+char **zzBadText;\r
+char **zzMissText;\r
+int *zzMissTok, *zzBadTok;\r
+SetWordType **zzMissSet;\r
+#endif\r
+{\r
+#ifdef DEMAND_LOOK\r
+#ifdef LL_K\r
+  if ( zzdirty==LL_K ) {zzCONSUME;}\r
+#else\r
+  if ( zzdirty ) {zzCONSUME;}\r
+#endif\r
+#endif\r
+  if ( !zzset_el((unsigned)LA(1), e) ) {\r
+    *zzBadText = LATEXT(1); *zzMissText=NULL;\r
+    *zzMissTok= 0; *zzBadTok=LA(1);\r
+    *zzMissSet=e;\r
+    return 0;\r
+  }\r
+  zzMakeAttr           /* MR14 Ger Hobbelt (hobbelt@axa.nl) */\r
+#ifdef DEMAND_LOOK\r
+#ifdef LL_K\r
+  zzdirty++;\r
+    zzlabase++;          /* MR14 Ger Hobbelt (hobbelt@axa.nl) */\r
+#else\r
+  zzdirty = 1;\r
+#endif\r
+#endif\r
+  return 1;\r
+}\r
+\r
+int\r
+#ifdef __USE_PROTOS\r
+_zzmatch_wdfltsig(int tokenWanted, SetWordType *whatFollows)\r
+#else\r
+_zzmatch_wdfltsig(tokenWanted, whatFollows)\r
+int tokenWanted;\r
+SetWordType *whatFollows;\r
+#endif\r
+{\r
+#ifdef DEMAND_LOOK\r
+#ifdef LL_K\r
+  if ( zzdirty==LL_K ) {\r
+      zzCONSUME;\r
+  }\r
+#else\r
+  if ( zzdirty ) {zzCONSUME;}\r
+#endif\r
+#endif\r
+\r
+  if ( LA(1)!=tokenWanted )\r
+  {\r
+        zzSyntaxErrCount++;     /* MR11 */\r
+    fprintf(stderr,\r
+        "line %d: syntax error at \"%s\" missing %s\n",\r
+        zzline,\r
+        (LA(1)==zzEOF_TOKEN)?"<eof>":(char *)LATEXT(1),\r
+        zztokens[tokenWanted]);\r
+    zzconsumeUntil( whatFollows );\r
+    return 0;\r
+  }\r
+  else {\r
+    zzMakeAttr            \r
+#ifdef DEMAND_LOOK\r
+#ifdef LL_K\r
+    zzdirty++;\r
+    zzlabase++;\r
+#else\r
+    zzdirty = 1;\r
+#endif\r
+#else\r
+/*    zzCONSUME;     consume if not demand lookahead */\r
+#endif\r
+    return 1;\r
+  }\r
+}\r
+\r
+int\r
+#ifdef __USE_PROTOS\r
+_zzsetmatch_wdfltsig(SetWordType *tokensWanted,\r
+           int tokenTypeOfSet,\r
+           SetWordType *whatFollows)\r
+#else\r
+_zzsetmatch_wdfltsig(tokensWanted, tokenTypeOfSet, whatFollows)\r
+SetWordType *tokensWanted;\r
+int tokenTypeOfSet;\r
+SetWordType *whatFollows;\r
+#endif\r
+{\r
+#ifdef DEMAND_LOOK\r
+#ifdef LL_K\r
+  if ( zzdirty==LL_K ) {zzCONSUME;}\r
+#else\r
+  if ( zzdirty ) {zzCONSUME;}\r
+#endif\r
+#endif\r
+  if ( !zzset_el((unsigned)LA(1), tokensWanted) )\r
+  {\r
+        zzSyntaxErrCount++;     /* MR11 */\r
+    fprintf(stderr,\r
+        "line %d: syntax error at \"%s\" missing %s\n",\r
+        zzline,\r
+        (LA(1)==zzEOF_TOKEN)?"<eof>":(char *)LATEXT(1),\r
+        zztokens[tokenTypeOfSet]);\r
+    zzconsumeUntil( whatFollows );\r
+    return 0;\r
+  }\r
+  else {\r
+    zzMakeAttr\r
+#ifdef DEMAND_LOOK\r
+#ifdef LL_K\r
+    zzdirty++;\r
+    zzlabase++;\r
+#else\r
+    zzdirty = 1;\r
+#endif\r
+#else\r
+/*    zzCONSUME;    consume if not demand lookahead */\r
+#endif\r
+    return 1;\r
+  }\r
+}\r
+\r
+int\r
+#ifdef __USE_PROTOS\r
+_zzsetmatch_wsig(SetWordType *e)\r
+#else\r
+_zzsetmatch_wsig(e)\r
+SetWordType *e;\r
+#endif\r
+{\r
+#ifdef DEMAND_LOOK\r
+#ifdef LL_K\r
+  if ( zzdirty==LL_K ) {zzCONSUME;}\r
+#else\r
+  if ( zzdirty ) {zzCONSUME;}\r
+#endif\r
+#endif\r
+  if ( !zzset_el((unsigned)LA(1), e) ) return 0;\r
+  zzMakeAttr           /* MR14 Ger Hobbelt (hobbelt@axa.nl) */\r
+#ifdef DEMAND_LOOK\r
+#ifdef LL_K\r
+  zzdirty++;\r
+    zzlabase++;          /* MR14 Ger Hobbelt (hobbelt@axa.nl) */\r
+#else\r
+  zzdirty = 1;\r
+#endif\r
+#endif\r
+  return 1;\r
+}\r
+\r
+#ifdef USER_ZZMODE_STACK\r
+static int  zzmstk[ZZMAXSTK] = { -1 };\r
+static int  zzmdep = 0;\r
+static char zzmbuf[70];\r
+\r
+void\r
+#ifdef __USE_PROTOS\r
+zzmpush( int m )\r
+#else\r
+zzmpush( m )\r
+int m;\r
+#endif\r
+{\r
+   if(zzmdep == ZZMAXSTK - 1) {\r
+     sprintf(zzmbuf, "Mode stack overflow ");\r
+     zzerr(zzmbuf);\r
+   } else {\r
+     zzmstk[zzmdep++] = zzauto;\r
+     zzmode(m);\r
+   }\r
+}\r
+\r
+void\r
+#ifdef __USE_PROTOS\r
+zzmpop( void )\r
+#else\r
+zzmpop( )\r
+#endif\r
+{\r
+   if(zzmdep == 0)\r
+   {  sprintf(zzmbuf, "Mode stack underflow ");\r
+      zzerr(zzmbuf);\r
+   }\r
+   else\r
+   {  zzmdep--;\r
+      zzmode(zzmstk[zzmdep]);\r
+   }\r
+}\r
+\r
+void\r
+#ifdef __USE_PROTOS\r
+zzsave_mode_stack( int modeStack[], int *modeLevel )\r
+#else\r
+zzsave_mode_stack( modeStack, modeLevel )\r
+int modeStack[];\r
+int *modeLevel;\r
+#endif\r
+{\r
+  int i;\r
+  memcpy(modeStack, zzmstk, sizeof(zzmstk));\r
+  *modeLevel = zzmdep;\r
+  zzmdep = 0;\r
+\r
+  return;\r
+}\r
+\r
+void\r
+#ifdef __USE_PROTOS\r
+zzrestore_mode_stack( int modeStack[], int *modeLevel )\r
+#else\r
+zzrestore_mode_stack( modeStack, modeLevel )\r
+int modeStack[];\r
+int *modeLevel;\r
+#endif\r
+{\r
+  int i;\r
+\r
+  memcpy(zzmstk, modeStack, sizeof(zzmstk));\r
+  zzmdep = *modeLevel;\r
+\r
+  return;\r
+}\r
+#endif /* USER_ZZMODE_STACK */\r
+\r
+#ifdef __USE_PROTOS\r
+void zzTraceReset(void)\r
+#else\r
+void zzTraceReset()\r
+#endif\r
+{\r
+#ifdef zzTRACE_RULES\r
+  zzTraceOptionValue=zzTraceOptionValueDefault;\r
+  zzTraceGuessOptionValue=1;\r
+  zzTraceCurrentRuleName=NULL;\r
+  zzTraceDepth=0;\r
+#endif\r
+}\r
+\r
+#ifdef __USE_PROTOS\r
+void zzTraceGuessFail(void)\r
+#else\r
+void zzTraceGuessFail()\r
+#endif\r
+{\r
+\r
+#ifdef zzTRACE_RULES\r
+#ifdef ZZCAN_GUESS\r
+\r
+  int   doIt=0;\r
+\r
+  if (zzTraceOptionValue <= 0) {\r
+    doIt=0;\r
+  } else if (zzguessing && zzTraceGuessOptionValue <= 0) {\r
+    doIt=0;\r
+  } else {\r
+    doIt=1;\r
+  };\r
+\r
+  if (doIt) {\r
+    fprintf(stderr,"guess failed\n");\r
+  };\r
+#endif\r
+#endif\r
+}\r
+\r
+/* zzTraceOption:\r
+     zero value turns off trace\r
+*/\r
+\r
+#ifdef __USE_PROTOS\r
+void zzTraceIn(char * rule)\r
+#else\r
+void zzTraceIn(rule)\r
+  char  *rule;\r
+#endif\r
+{\r
+#ifdef zzTRACE_RULES\r
+\r
+  int           doIt=0;\r
+\r
+  zzTraceDepth++;\r
+  zzTraceCurrentRuleName=rule;\r
+\r
+  if (zzTraceOptionValue <= 0) {\r
+    doIt=0;\r
+#ifdef ZZCAN_GUESS\r
+  } else if (zzguessing && zzTraceGuessOptionValue <= 0) {\r
+    doIt=0;\r
+#endif\r
+  } else {\r
+    doIt=1;\r
+  };\r
+\r
+  if (doIt) {\r
+    fprintf(stderr,"enter rule %s {\"%s\"} depth %d",\r
+            rule,\r
+            LA(1)==1 ? "@" : (char *) LATEXT(1),    /* MR19 */\r
+            zzTraceDepth);\r
+#ifdef ZZCAN_GUESS\r
+    if (zzguessing) fprintf(stderr," guessing");\r
+#endif\r
+    fprintf(stderr,"\n");\r
+  };\r
+#endif\r
+  return;\r
+}\r
+\r
+#ifdef __USE_PROTOS\r
+void zzTraceOut(char * rule)\r
+#else\r
+void zzTraceOut(rule)\r
+  char  *rule;\r
+#endif\r
+{\r
+#ifdef zzTRACE_RULES\r
+  int       doIt=0;\r
+\r
+  zzTraceDepth--;\r
+\r
+  if (zzTraceOptionValue <= 0) {\r
+    doIt=0;\r
+#ifdef ZZCAN_GUESS\r
+  } else if (zzguessing && zzTraceGuessOptionValue <= 0) {\r
+    doIt=0;\r
+#endif\r
+  } else {\r
+    doIt=1;\r
+  };\r
+\r
+  if (doIt) {\r
+    fprintf(stderr,"exit rule %s {\"%s\"} depth %d",\r
+            rule,\r
+            LA(1)==1 ? "@" : (char *) LATEXT(1), /* MR19 */\r
+            zzTraceDepth+1);\r
+#ifdef ZZCAN_GUESS\r
+    if (zzguessing) fprintf(stderr," guessing");\r
+#endif\r
+    fprintf(stderr,"\n");\r
+  };\r
+#endif\r
+}\r
+\r
+#ifdef __USE_PROTOS\r
+int zzTraceOption(int delta)\r
+#else\r
+int zzTraceOption(delta)\r
+  int   delta;\r
+#endif\r
+{\r
+#ifdef zzTRACE_RULES\r
+    int     prevValue=zzTraceOptionValue;\r
+\r
+    zzTraceOptionValue=zzTraceOptionValue+delta;\r
+\r
+    if (zzTraceCurrentRuleName != NULL) {\r
+      if (prevValue <= 0 && zzTraceOptionValue > 0) {\r
+        fprintf(stderr,"trace enabled in rule %s depth %d\n",\r
+                                            zzTraceCurrentRuleName,zzTraceDepth);\r
+      };\r
+      if (prevValue > 0 && zzTraceOptionValue <= 0) {\r
+        fprintf(stderr,"trace disabled in rule %s depth %d\n",\r
+                                            zzTraceCurrentRuleName,zzTraceDepth);\r
+      };\r
+    };\r
+    return  prevValue;\r
+#else\r
+    return 0;\r
+#endif\r
+}\r
+\r
+#ifdef __USE_PROTOS\r
+int zzTraceGuessOption(int delta)\r
+#else\r
+int zzTraceGuessOption(delta)\r
+  int   delta;\r
+#endif\r
+{\r
+#ifdef zzTRACE_RULES\r
+#ifdef ZZCAN_GUESS\r
+    int     prevValue=zzTraceGuessOptionValue;\r
+\r
+    zzTraceGuessOptionValue=zzTraceGuessOptionValue+delta;\r
+\r
+    if (zzTraceCurrentRuleName != NULL) {\r
+      if (prevValue <= 0 && zzTraceGuessOptionValue > 0) {\r
+        fprintf(stderr,"guess trace enabled in rule %s depth %d\n",\r
+                                                zzTraceCurrentRuleName,zzTraceDepth);\r
+      };\r
+      if (prevValue > 0 && zzTraceGuessOptionValue <= 0) {\r
+        fprintf(stderr,"guess trace disabled in rule %s depth %d\n",\r
+                                                zzTraceCurrentRuleName,zzTraceDepth);\r
+      };\r
+    };\r
+    return prevValue;\r
+#else\r
+    return 0;\r
+#endif\r
+#else\r
+    return 0;\r
+#endif\r
+}\r
+\r
+#endif /* ERR_H */\r