+++ /dev/null
-/*\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