4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Standard error handling mechanism
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * SOFTWARE RIGHTS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * We reserve no LEGAL rights to the Purdue Compiler Construction Tool
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Set (PCCTS) -- PCCTS is in the public domain. An individual or
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * company may do whatever they wish with source code distributed with
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * PCCTS or the code generated by PCCTS, including the incorporation of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * PCCTS, or its output, into commerical software.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * We encourage users to develop software with PCCTS. However, we do ask
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * that credit is given to us for developing PCCTS. By "credit",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * we mean that if you incorporate our source code into one of your
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * programs (commercial product, research project, or otherwise) that you
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * acknowledge this fact somewhere in the documentation, research report,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * etc... If you like PCCTS and have developed a nice tool with the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * output, please mention that you developed it using PCCTS. In
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * addition, we ask that this header remain intact in our source code.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * As long as these guidelines are kept, we expect to continue enhancing
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * this system and expect to make other tools available as they are
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * completed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Has grown to hold all kinds of stuff (err.h is increasingly misnamed)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * ANTLR 1.33
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Terence Parr
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Parr Research Corporation
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * with Purdue University and AHPCRC, University of Minnesota
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * 1989-2000
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* 7-Apr-97 133MR1 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* Proper choice of STDC and cplusplus pre-processor symbols (?) */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* Define usable bits per unsigned int word (used for set stuff) */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define BSETLOGWORDSIZE 3 /* SetWordType is 8bits */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define BSETMODWORD(x) ((x) & (BSETWORDSIZE-1)) /* x % BSETWORDSIZE */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define BSETDIVWORD(x) ((x) >> BSETLOGWORDSIZE) /* x / BSETWORDSIZE */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* This is not put into the global pccts_parser structure because it is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * hidden and does not need to be saved during a "save state" operation
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* maximum of 32 bits/unsigned int and must be 8 bits/byte */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* if you enter here without having consumed a token from last resynch
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * force a token consumption.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( !consumed ) {zzCONSUME; consumed=1; return;} /* MR10 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* if current token is in resynch set, we've got what we wanted */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( wd[LA(1)]&mask || LA(1) == zzEOF_TOKEN ) {consumed=0; return;}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* scan until we find something in the resynch set */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while ( !(wd[LA(1)]&mask) && LA(1) != zzEOF_TOKEN ) {zzCONSUME;}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* 7-Apr-97 133MR1 for C++ and MR7 for C */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* Change suggested by Eli Sternheim (eli@interhdl.com) */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while ( !zzset_el( (tmp=LA(1)), st) && tmp!=1 /* Eof */) { /* MR7 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* 7-Apr-97 133MR1 for C++ and MR7 for C */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* Change suggested by Eli Sternheim (eli@interhdl.com) */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while ( (tmp=LA(1)) !=t && tmp!=1 /* Eof */) { zzCONSUME; } /* MR7 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* input looks like:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * zzFAIL(k, e1, e2, ...,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * where the zzMiss stuff is set here to the token that did not match
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * (and which set wasn't it a member of).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync k = va_arg(ap, int); /* how many lookahead sets? */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync assert(k <= sizeof(f)/sizeof(f[0])); /* MR20 G. Hobbelt */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (i=1; i<=k; i++) /* collect all lookahead sets */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (i=1; i<=k; i++) /* look for offending token */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* bad; lookahead is permutation that cannot be matched,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * but, the ith token of lookahead is valid at the ith position
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * (The old LL sub 1 (k) versus LL(k) parsing technique)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* fprintf(stderr, "%s not in %dth set\n", zztokens[LA(i)], i);*/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (zzTraceGuessOptionValue <= 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(stderr,"guess done - returning to rule %s {\"%s\"} at depth %d",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(stderr," (guess mode continues - an enclosing guess is still active)");
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR6 Gunnar Rxnning (gunnar@candleweb.no) */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR6 Additional state needs to be saved/restored */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync buf->inf_text_buffer = zzinf_text_buffer; /* MR6 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (i=0; i<LL_K; i++) buf->tokenLA[i] = zztokenLA[i];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (i=0; i<LL_K; i++) strcpy(buf->textLA[i], zztextLA[i]);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync buf->traceGuessOptionValue=zzTraceGuessOptionValue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR6 Gunnar Rxnning (gunnar@candleweb.no) */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* MR6 Additional state needs to be saved/restored */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync zzinf_text_buffer = buf->inf_text_buffer; /* MR6 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (i=0; i<LL_K; i++) zztokenLA[i] = buf->tokenLA[i];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (i=0; i<LL_K; i++) strcpy(zztextLA[i], buf->textLA[i]);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(stderr,"trace enable restored in rule %s depth %d\n",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(stderr,"trace disable restored in rule %s depth %d\n",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync zzTraceOptionValue=buf->traceOptionValue; /* MR10 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync zzTraceGuessOptionValue=buf->traceGuessOptionValue; /* MR10 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync zzTraceCurrentRuleName=buf->traceCurrentRuleName; /* MR10 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync register SetWordType *p = a;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync register unsigned e = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync register SetWordType t = *p;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } while (++p < endp);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* standard error reporting function */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynczzsyn(char *text, int tok, char *egroup, SetWordType *eset, int etok, int k, char *bad_text)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(stderr, "line %d: syntax error at \"%s\"", zzline, (tok==zzEOF_TOKEN)?"EOF":bad_text);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( !etok && !eset ) {fprintf(stderr, "\n"); return;}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( strlen(egroup) > 0 ) fprintf(stderr, " in %s", egroup);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* is b an element of set p? */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return( p[BSETDIVWORD(b)] & bitmask[BSETMODWORD(b)] );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* Fast compute degree of a set... the number
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync of elements present in the set. Assumes
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync that all word bits are used in the set
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync register SetWordType *p = a;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if ( a == NULL ) return 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while ( p < endp )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync register SetWordType t = *p;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (t & *b) ++degree;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync_zzmatch(int _t, char **zzBadText, char **zzMissText,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync_zzmatch(_t, zzBadText, zzMissText, zzMissTok, zzBadTok, zzMissSet)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync_zzmatch(int _t, char **zzBadText, char **zzMissText,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync int *zzMissTok, int *zzBadTok, SetWordType **zzMissSet)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync_zzmatch(_t, zzBadText, zzMissText, zzMissTok, zzBadTok, zzMissSet)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif /*LL_K*/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync_zzmatch(int _t, char **zzBadText, char **zzMissText,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync_zzmatch(_t, zzBadText, zzMissText, zzMissTok, zzBadTok, zzMissSet)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif /*DEMAND_LOOK*/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync zzline = zzinf_line[zzinf_labase]; /* wrong in 1.21 */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* allocate default size text,token and line arrays;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * then, read all of the input reallocing the arrays as needed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Once the number of total tokens is known, the LATEXT(i) array (zzinf_text)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * is allocated and it's pointers are set to the tokens in zzinf_text_buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync int zzinf_token_buffer_size = ZZINF_DEF_TOKEN_BUFFER_SIZE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync int zzinf_text_buffer_size = ZZINF_DEF_TEXT_BUFFER_SIZE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* allocate text/token buffers */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync zzinf_text_buffer = (char *) malloc(zzinf_text_buffer_size);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(stderr, "cannot allocate lookahead text buffer (%d bytes)\n",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync zzinf_tokens = (int *) calloc(zzinf_token_buffer_size,sizeof(int));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(stderr, "cannot allocate token buffer (%d tokens)\n",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync zzinf_line = (int *) calloc(zzinf_token_buffer_size,sizeof(int));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(stderr, "cannot allocate line buffer (%d ints)\n",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* get tokens, copying text to text buffer */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync zzinf_token_buffer_size += ZZINF_BUFFER_TOKEN_CHUNK_SIZE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(stderr, "cannot allocate lookahead token buffer (%d tokens)\n",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(stderr, "cannot allocate lookahead line buffer (%d ints)\n",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync while ( (zzinf_text_buffer_index+strlen(NLATEXT)+1) >= zzinf_text_buffer_size )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync zzinf_text_buffer_size += ZZINF_BUFFER_TEXT_CHUNK_SIZE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync zzinf_text_buffer = (char *) realloc(zzinf_text_buffer,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(stderr, "cannot allocate lookahead text buffer (%d bytes)\n",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* record token and text and line of input symbol */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync strcpy(&zzinf_text_buffer[zzinf_text_buffer_index], NLATEXT);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* allocate ptrs to text of ith token */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync zzinf_text = (char **) calloc(zzinf_last+1,sizeof(char *));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(stderr, "cannot allocate lookahead text buffer (%d)\n",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /* set ptrs so that zzinf_text[i] is the text of the ith token found on input */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync zzinf_text[zzinf_lap++] = &zzinf_text_buffer[zzinf_text_buffer_index];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync zzinf_text_buffer_index += strlen(&zzinf_text_buffer[zzinf_text_buffer_index])+1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync_zzsetmatch(SetWordType *e, char **zzBadText, char **zzMissText,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync_zzsetmatch(e, zzBadText, zzMissText, zzMissTok, zzBadTok, zzMissSet, zzTokclassErrset /* MR23 */)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync zzlabase++; /* MR14 Ger Hobbelt (hobbelt@axa.nl) */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync_zzmatch_wdfltsig(int tokenWanted, SetWordType *whatFollows)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync "line %d: syntax error at \"%s\" missing %s\n",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* zzCONSUME; consume if not demand lookahead */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync_zzsetmatch_wdfltsig(tokensWanted, tokenTypeOfSet, whatFollows)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync "line %d: syntax error at \"%s\" missing %s\n",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* zzCONSUME; consume if not demand lookahead */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync zzlabase++; /* MR14 Ger Hobbelt (hobbelt@axa.nl) */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynczzsave_mode_stack( int modeStack[], int *modeLevel )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynczzrestore_mode_stack( int modeStack[], int *modeLevel )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif /* USER_ZZMODE_STACK */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (zzguessing && zzTraceGuessOptionValue <= 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/* zzTraceOption:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync zero value turns off trace
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (zzguessing && zzTraceGuessOptionValue <= 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync } else if (zzguessing && zzTraceGuessOptionValue <= 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(stderr,"trace enabled in rule %s depth %d\n",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(stderr,"trace disabled in rule %s depth %d\n",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync zzTraceGuessOptionValue=zzTraceGuessOptionValue+delta;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (prevValue <= 0 && zzTraceGuessOptionValue > 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(stderr,"guess trace enabled in rule %s depth %d\n",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (prevValue > 0 && zzTraceGuessOptionValue <= 0) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync fprintf(stderr,"guess trace disabled in rule %s depth %d\n",
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif /* ERR_H */