/* antlr.h 
 *
 * SOFTWARE RIGHTS
 *
 * We reserve no LEGAL rights to the Purdue Compiler Construction Tool
 * Set (PCCTS) -- PCCTS is in the public domain.  An individual or
 * company may do whatever they wish with source code distributed with
 * PCCTS or the code generated by PCCTS, including the incorporation of
 * PCCTS, or its output, into commerical software.
 *
 * We encourage users to develop software with PCCTS.  However, we do ask
 * that credit is given to us for developing PCCTS.  By "credit",
 * we mean that if you incorporate our source code into one of your
 * programs (commercial product, research project, or otherwise) that you
 * acknowledge this fact somewhere in the documentation, research report,
 * etc...  If you like PCCTS and have developed a nice tool with the
 * output, please mention that you developed it using PCCTS.  In
 * addition, we ask that this header remain intact in our source code.
 * As long as these guidelines are kept, we expect to continue enhancing
 * this system and expect to make other tools available as they are
 * completed.
 *
 * ANTLR 1.33
 * Terence Parr
 * Parr Research Corporation
 * with Purdue University and AHPCRC, University of Minnesota
 * 1989-1998
 */

#ifndef ANTLR_H
#define ANTLR_H

#include "pcctscfg.h"

#include "pccts_stdio.h"

/* turn off warnings for unreferenced labels */

#ifdef _MSC_VER
#pragma warning(disable:4102)
#endif

/*
 * Define all of the stack setup and manipulation of $i, #i variables.
 *
 *  Notes:
 *    The type 'Attrib' must be defined before entry into this .h file.
 */


#ifdef __USE_PROTOS
#include "pccts_stdlib.h"
#else
#ifdef VAXC
#include <stdlib.h>
#else
#include <malloc.h>
#endif
#endif
#include "pccts_string.h"

#if 0
#include "set.h"
#endif


typedef int ANTLRTokenType;
typedef unsigned char SetWordType;

typedef char ANTLRChar;

            /* G u e s s  S t u f f */

#ifdef ZZCAN_GUESS
#ifndef ZZINF_LOOK
#define ZZINF_LOOK
#endif
#endif

#ifdef ZZCAN_GUESS
typedef struct _zzjmp_buf {
      jmp_buf state;
    } zzjmp_buf;
#endif


/* can make this a power of 2 for more efficient lookup */

#ifndef ZZLEXBUFSIZE
#define ZZLEXBUFSIZE  8000 /* MR22 raise from 2k to 8k */
#endif

#define zzOvfChk                            \
            if ( zzasp <= 0 )                                           \
            {                                                           \
                fprintf(stderr, zzStackOvfMsg, __FILE__, __LINE__);    \
                exit(PCCTS_EXIT_FAILURE);                                               \
            }

#ifndef ZZA_STACKSIZE
#define ZZA_STACKSIZE  400
#endif
#ifndef ZZAST_STACKSIZE
#define ZZAST_STACKSIZE  400
#endif

#ifndef zzfailed_pred
#ifdef ZZCAN_GUESS
#define zzfailed_pred(_p) \
  if (zzguessing) { \
    zzGUESS_FAIL; \
  } else { \
    fprintf(stderr, "semantic error; failed predicate: '%s'\n",_p); \
  }
#else
#define zzfailed_pred(_p)  \
  fprintf(stderr, "semantic error; failed predicate: '%s'\n",_p)
#endif
#endif

/* MR19 zzchar_t additions */

#ifdef LL_K
#define LOOKAHEAD \
  int zztokenLA[LL_K]; \
  zzchar_t zztextLA[LL_K][ZZLEXBUFSIZE]; \
  int zzlap = 0, zzlabase=0; /* labase only used for DEMAND_LOOK */
#else
#define LOOKAHEAD                        \
  int zztoken;
#endif

#ifndef zzcr_ast
#define zzcr_ast(ast,attr,tok,text)
#endif

#ifdef DEMAND_LOOK
#define DemandLookData  int zzdirty=1;
#else
#define DemandLookData
#endif

#ifndef zzUSER_GUESS_HOOK
#define zzUSER_GUESS_HOOK(seqFrozen,zzrv)
#endif

#ifndef zzUSER_GUESS_DONE_HOOK
#define zzUSER_GUESS_DONE_HOOK(seqFrozen)
#endif

            /* S t a t e  S t u f f */

#ifdef ZZCAN_GUESS
#define zzGUESS_BLOCK    zzantlr_state zzst; int zzrv; int zzGuessSeqFrozen;

/* MR10 change zzGUESS: do zzGUESS_DONE when zzrv==1 after longjmp as in C++ mode */

#define zzGUESS        zzsave_antlr_state(&zzst); \
              zzguessing = 1; \
                            zzGuessSeqFrozen=++zzGuessSeq; \
              zzrv = setjmp(zzguess_start.state); \
                            zzUSER_GUESS_HOOK(zzGuessSeqFrozen,zzrv) \
                            if (zzrv) zzGUESS_DONE;
#ifdef zzTRACE_RULES
#define zzGUESS_FAIL    { zzTraceGuessFail(); longjmp(zzguess_start.state, 1); }
#else
#define zzGUESS_FAIL    longjmp(zzguess_start.state, 1)
#endif

/* MR10 change zzGUESS_DONE: zzrv=1 to simulate longjmp() return value as in C++ mode */

#define zzGUESS_DONE    { zzrestore_antlr_state(&zzst); zzrv=1; zzUSER_GUESS_DONE_HOOK(zzGuessSeqFrozen) }
#define zzNON_GUESS_MODE  if ( !zzguessing )
#define zzGuessData                                     \
            zzjmp_buf zzguess_start;                    \
            int zzguessing;
#else
#define zzGUESS_BLOCK
#define zzGUESS
#define zzGUESS_FAIL
#define zzGUESS_DONE
#define zzNON_GUESS_MODE
#define zzGuessData
#endif

typedef struct _zzantlr_state {
#ifdef ZZCAN_GUESS
      zzjmp_buf guess_start;
      int guessing;
#endif
      int asp;
      int ast_sp;
#ifdef ZZINF_LOOK
      int inf_lap;  /* not sure we need to save this one */
      int inf_labase;
      int inf_last;

/* MR6   Gunnar Rxnning (gunnar@candleweb.no)                                */
/* MR6    Additional state needs to be saved/restored                       */
/* MR6    Matching changes in err.h                                         */

      int *inf_tokens;                                       /* MR6 */
      char **inf_text;                                       /* MR6 */
      char *inf_text_buffer;                                 /* MR6 */
      int *inf_line;                                         /* MR6 */
#endif
#ifdef DEMAND_LOOK
      int dirty;
#endif

#ifdef LL_K
      int tokenLA[LL_K];
      char textLA[LL_K][ZZLEXBUFSIZE];
      int lap;
      int labase;
#else
      int token;
      char text[ZZLEXBUFSIZE];
#endif
#ifdef zzTRACE_RULES
            int     traceOptionValue;       /* MR10 */
            int     traceGuessOptionValue;  /* MR10 */
            char    *traceCurrentRuleName;  /* MR10 */
            int     traceDepth;             /* MR10 */
#endif

    } zzantlr_state;

#ifdef zzTRACE_RULES
extern int  zzTraceOptionValueDefault;
extern int  zzTraceOptionValue;
extern int  zzTraceGuessOptionValue;
extern char *zzTraceCurrentRuleName;
extern int  zzTraceDepth;
#endif

extern int zzGuessSeq;                      /* MR10 */
extern int zzSyntaxErrCount;                /* MR11 */
extern int zzLexErrCount;                   /* MR11 */

                 /* I n f i n i t e  L o o k a h e a d */


#ifdef ZZINF_LOOK
#define InfLookData  \
  int *zzinf_tokens;  \
  char **zzinf_text;  \
  char *zzinf_text_buffer;  \
  int *zzinf_line;        \
  int zzinf_labase;  \
  int zzinf_last;
#else
#define InfLookData
#endif

#ifdef ZZINF_LOOK

#ifndef ZZINF_DEF_TEXT_BUFFER_SIZE
#define ZZINF_DEF_TEXT_BUFFER_SIZE      20000
#endif
#ifndef ZZINF_DEF_TOKEN_BUFFER_SIZE
#define ZZINF_DEF_TOKEN_BUFFER_SIZE      2000
#endif
/* WARNING!!!!!!
 * ZZINF_BUFFER_TEXT_CHUNK_SIZE must be > sizeof(text) largest possible token.
 */
#ifndef ZZINF_BUFFER_TEXT_CHUNK_SIZE
#define ZZINF_BUFFER_TEXT_CHUNK_SIZE  5000
#endif
#ifndef ZZINF_BUFFER_TOKEN_CHUNK_SIZE
#define ZZINF_BUFFER_TOKEN_CHUNK_SIZE  1000
#endif

#if ZZLEXBUFSIZE > ZZINF_BUFFER_TEXT_CHUNK_SIZE
#define ZZINF_BUFFER_TEXT_CHUNK_SIZE  ZZLEXBUFSIZE+5
#endif

/* make inf_look user-access macros */
#ifdef LL_K
#define ZZINF_LA_VALID(i)  (((zzinf_labase+i-1)-LL_K+1) <= zzinf_last)
#define ZZINF_LA(i)      zzinf_tokens[(zzinf_labase+i-1)-LL_K+1]
#define ZZINF_LATEXT(i)    zzinf_text[(zzinf_labase+i-1)-LL_K+1]
/* MR6  In 1.33 vanilla the #define ZZINF_LINE(i) is was commented out  */
#define ZZINF_LINE(i)       zzinf_line[(zzinf_labase+i-1)-LL_K+1]
#else
#define ZZINF_LA_VALID(i)  (((zzinf_labase+i-1)) <= zzinf_last)
#define ZZINF_LA(i)      zzinf_tokens[(zzinf_labase+i-1)]
#define ZZINF_LATEXT(i)    zzinf_text[(zzinf_labase+i-1)]
#endif

#define inf_zzgettok _inf_zzgettok()
extern void _inf_zzgettok();

#endif  /* ZZINF_LOOK */


#ifdef LL_K

#ifdef __USE_PROTOS
#define ANTLR_INFO  \
  Attrib zzempty_attr(void) {static Attrib a; return a;} \
  Attrib zzconstr_attr(int _tok, char *_text) \
    {Attrib a; zzcr_attr((&a),_tok,_text); return a;} \
  int zzasp=ZZA_STACKSIZE; \
  char zzStackOvfMsg[]="fatal: attrib/AST stack overflow %s(%d)!\n"; \
  Attrib zzaStack[ZZA_STACKSIZE]; DemandLookData \
  InfLookData \
    zzGuessData
#else
#define ANTLR_INFO                        \
  Attrib zzempty_attr() {static Attrib a; return a;}        \
  Attrib zzconstr_attr(_tok, _text) int _tok; char *_text;    \
    {Attrib a; zzcr_attr((&a),_tok,_text); return a;}      \
  int zzasp=ZZA_STACKSIZE;              \
  char zzStackOvfMsg[]="fatal: attrib/AST stack overflow %s(%d)!\n";  \
  Attrib zzaStack[ZZA_STACKSIZE]; DemandLookData          \
  InfLookData                                                 \
    zzGuessData
#endif

#else

#ifdef __USE_PROTOS
#define ANTLR_INFO                        \
  Attrib zzempty_attr(void) {static Attrib a; return a;}      \
  Attrib zzconstr_attr(int _tok, char *_text)        \
    {Attrib a; zzcr_attr((&a),_tok,_text); return a;}    \
  int zzasp=ZZA_STACKSIZE;            \
  char zzStackOvfMsg[]="fatal: attrib/AST stack overflow %s(%d)!\n";      \
  Attrib zzaStack[ZZA_STACKSIZE]; DemandLookData        \
  InfLookData                                                             \
    zzGuessData
#else
#define ANTLR_INFO                        \
  Attrib zzempty_attr() {static Attrib a; return a;}      \
  Attrib zzconstr_attr(_tok, _text) int _tok; char *_text;                \
    {Attrib a; zzcr_attr((&a),_tok,_text); return a;}    \
  int zzasp=ZZA_STACKSIZE;            \
  char zzStackOvfMsg[]="fatal: attrib/AST stack overflow %s(%d)!\n";      \
  Attrib zzaStack[ZZA_STACKSIZE]; DemandLookData        \
  InfLookData                                                             \
    zzGuessData
#endif
  
#endif /* LL_k */


#ifdef ZZINF_LOOK

#ifdef LL_K
#ifdef DEMAND_LOOK
#define zzPrimeLookAhead  {zzdirty=LL_K; zzlap = zzlabase = 0;}
#else
#define zzPrimeLookAhead  {zzlap = zzlabase = 0; zzfill_inf_look();\
              {int _i;  for(_i=1;_i<=LL_K; _i++)    \
                    {zzCONSUME;} zzlap = zzlabase = 0;}}
#endif

#else /* LL_K */

#ifdef DEMAND_LOOK
#define zzPrimeLookAhead  zzfill_inf_look(); zzdirty=1
#else
#define zzPrimeLookAhead  zzfill_inf_look(); inf_zzgettok

#endif
#endif  /* LL_K */

#else  /* ZZINF_LOOK */

#ifdef LL_K
#ifdef DEMAND_LOOK
#define zzPrimeLookAhead  {zzdirty=LL_K; zzlap = zzlabase = 0;}
#else
#define zzPrimeLookAhead  {int _i; zzlap = 0; for(_i=1;_i<=LL_K; _i++)    \
                    {zzCONSUME;} zzlap = 0;}
#endif

#else

#ifdef DEMAND_LOOK
#define zzPrimeLookAhead  zzdirty=1
#else
#define zzPrimeLookAhead  zzgettok()
#endif
#endif  /* LL_K */

#endif  /* ZZINF_LOOK */


#ifdef LL_K
#define zzenterANTLRs(s)                            \
        zzlextext = &(zztextLA[0][0]); zzrdstr( s ); zzPrimeLookAhead;
#define zzenterANTLRf(f)              \
    zzlextext = &(zztextLA[0][0]); zzrdfunc( f ); zzPrimeLookAhead;
#define zzenterANTLR(f)              \
    zzlextext = &(zztextLA[0][0]); zzrdstream( f ); zzPrimeLookAhead;
#ifdef ZZINF_LOOK
#define zzleaveANTLR(f)      free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line);
#define zzleaveANTLRf(f)       free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line);
#define zzleaveANTLRs(f)    free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line);
#else
#define zzleaveANTLR(f)
#define zzleaveANTLRf(f)
#define zzleaveANTLRs(f)
#endif

#else

#define zzenterANTLRs(s)                            \
        {static char zztoktext[ZZLEXBUFSIZE];   \
        zzlextext = zztoktext; zzrdstr( s ); zzPrimeLookAhead;}
#define zzenterANTLRf(f)              \
    {static char zztoktext[ZZLEXBUFSIZE];  \
    zzlextext = zztoktext; zzrdfunc( f ); zzPrimeLookAhead;}
#define zzenterANTLR(f)              \
    {static char zztoktext[ZZLEXBUFSIZE];  \
    zzlextext = zztoktext; zzrdstream( f ); zzPrimeLookAhead;}
#ifdef ZZINF_LOOK
#define zzleaveANTLR(f)      free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line);
#define zzleaveANTLRf(f)       free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line);
#define zzleaveANTLRs(f)    free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line);
#else
#define zzleaveANTLR(f)
#define zzleaveANTLRf(f)
#define zzleaveANTLRs(f)
#endif

#endif

/* MR19 Paul D. Smith (psmith@baynetworks.com)
   Need to adjust AST stack pointer at exit.
   Referenced in ANTLRx macros.
*/

#ifdef GENAST
#define ZZAST_ADJUST ++zzast_sp;
#else
#define ZZAST_ADJUST
#endif

#define ANTLR(st, f)  zzbufsize = ZZLEXBUFSIZE;  \
            zzenterANTLR(f);      \
            {                                            \
              zzBLOCK(zztasp1);                          \
              st; /* ++zzasp; Removed MR20 G. Hobbelt */     \
                  /* ZZAST_ADJUST Removed MR20 G. Hobbelt */ \
              /* MR20 G. Hobbelt. Kill the top' attribute (+AST stack corr.) */  \
              zzEXIT_ANTLR(zztasp1 + 1);                 \
            }                                            \
            zzleaveANTLR(f);
            
#define ANTLRm(st, f, _m)  zzbufsize = ZZLEXBUFSIZE;  \
            zzmode(_m);        \
            zzenterANTLR(f);      \
            {                                            \
              zzBLOCK(zztasp1);                          \
              st; /* ++zzasp; Removed MR20 G. Hobbelt */     \
                  /* ZZAST_ADJUST Removed MR20 G. Hobbelt */ \
              /* MR20 G. Hobbelt. Kill the top' attribute (+AST stack corr.) */  \
              zzEXIT_ANTLR(zztasp1 + 1);                 \
            }                                            \
            zzleaveANTLR(f);
            
#define ANTLRf(st, f)  zzbufsize = ZZLEXBUFSIZE;  \
            zzenterANTLRf(f);      \
            {                                            \
              zzBLOCK(zztasp1);                          \
              st; /* ++zzasp; Removed MR20 G. Hobbelt */     \
                  /* ZZAST_ADJUST Removed MR20 G. Hobbelt */ \
              /* MR20 G. Hobbelt. Kill the top' attribute (+AST stack corr.) */  \
              zzEXIT_ANTLR(zztasp1 + 1);                 \
            }                                            \
            zzleaveANTLRf(f);

#define ANTLRs(st, s)   zzbufsize = ZZLEXBUFSIZE;  \
                        zzenterANTLRs(s);           \
            {                                            \
              zzBLOCK(zztasp1);                          \
              st; /* ++zzasp; Removed MR20 G. Hobbelt */     \
                  /* ZZAST_ADJUST Removed MR20 G. Hobbelt */ \
              /* MR20 G. Hobbelt. Kill the top' attribute (+AST stack corr.) */  \
              zzEXIT_ANTLR(zztasp1 + 1);                 \
            }                                            \
                        zzleaveANTLRs(s);

#ifdef LL_K
#define zztext    (&(zztextLA[zzlap][0]))
#else
#define zztext    zzlextext
#endif


          /* A r g u m e n t  A c c e s s */

#define zzaCur      (zzaStack[zzasp])
#define zzaRet      (*zzaRetPtr)
#define zzaArg(v,n)    zzaStack[v-n]
#define zzMakeAttr    { zzNON_GUESS_MODE {zzOvfChk; --zzasp; zzcr_attr(&(zzaStack[zzasp]),LA(1),LATEXT(1));}}
#ifdef zzdef0
#define zzMake0      { zzOvfChk; --zzasp; zzdef0(&(zzaStack[zzasp]));}
#else
#define zzMake0      { zzOvfChk; --zzasp;}
#endif
#define zzaPush(_v)    { zzOvfChk; zzaStack[--zzasp] = _v;}
#ifndef zzd_attr
#define zzREL(t)    zzasp=(t);    /* Restore state of stack */
#else
#define zzREL(t)    for (; zzasp<(t); zzasp++)        \
            { zzd_attr(&(zzaStack[zzasp])); }
#endif


#define zzsetmatch(_es)            \
  if ( !_zzsetmatch(_es, &zzBadText, &zzMissText, &zzMissTok, &zzBadTok, &zzMissSet) ) goto fail;

#ifdef ZZCAN_GUESS
#define zzsetmatch_wsig(_es, handler)    \
  if ( !_zzsetmatch_wsig(_es) ) if (zzguessing) { zzGUESS_FAIL; } else {_signal=MismatchedToken; goto handler;}
#else
#define zzsetmatch_wsig(_es, handler)    \
  if ( !_zzsetmatch_wsig(_es) ) {_signal=MismatchedToken; goto handler;}
#endif

#ifdef __USE_PROTOS
extern int _zzsetmatch(SetWordType *, char **, char **, int *, int *, SetWordType **);
extern int _zzsetmatch_wsig(SetWordType *);
#else
extern int _zzsetmatch();
extern int _zzsetmatch_wsig();
#endif

#define zzmatch(_t)              \
  if ( !_zzmatch(_t, &zzBadText, &zzMissText, &zzMissTok, &zzBadTok, &zzMissSet) ) goto fail;

#ifdef ZZCAN_GUESS
#define zzmatch_wsig(_t,handler)      \
  if ( !_zzmatch_wsig(_t) ) if (zzguessing) { zzGUESS_FAIL; } else {_signal=MismatchedToken; goto handler;}
#else
#define zzmatch_wsig(_t,handler)      \
  if ( !_zzmatch_wsig(_t) ) {_signal=MismatchedToken; goto handler;}
#endif

#ifdef __USE_PROTOS
extern int _zzmatch(int, char **, char **, int *, int *, SetWordType **);
extern int _zzmatch_wsig(int);
#else
extern int _zzmatch();
extern int _zzmatch_wsig();
#endif

#define zzmatch_wdfltsig(_t,_f)      \
  if ( !_zzmatch_wdfltsig(_t,_f) ) _signal=MismatchedToken;
#define zzsetmatch_wdfltsig(tw,tt,wf)    \
  if ( !_zzsetmatch_wdfltsig(tw,tt,wf) ) _signal=MismatchedToken;

#ifdef __USE_PROTOS
extern int _zzmatch_wdfltsig(int, SetWordType *);
extern int _zzsetmatch_wdfltsig(SetWordType *tokensWanted,
                int tokenTypeOfSet,
                SetWordType *whatFollows);
#else
extern int _zzmatch_wdfltsig();
extern int _zzsetmatch_wdfltsig();
#endif

#ifdef GENAST
#define zzRULE    Attrib *zzaRetPtr = &(zzaStack[zzasp-1]);  \
          SetWordType *zzMissSet=NULL; int zzMissTok=0;    \
          int zzBadTok=0; char *zzBadText="";    \
          int zzErrk=1,zzpf=0;          \
                    zzTRACEdata \
          char *zzMissText=""; zzASTVars
#else
#define zzRULE    Attrib *zzaRetPtr = &(zzaStack[zzasp-1]);  \
          int zzBadTok=0; char *zzBadText="";    \
          int zzErrk=1,zzpf=0;                \
                    zzTRACEdata \
          SetWordType *zzMissSet=NULL; int zzMissTok=0; char *zzMissText=""
#endif

#ifdef GENAST
#define zzBLOCK(i)  int i = zzasp - 1; int zztsp = zzast_sp
#define zzEXIT(i)  zzREL(i); zzastREL; zzNON_GUESS_MODE { zzastPush(*_root); }
#define zzEXIT_ANTLR(i)  zzREL(i); zzastREL /* [i_a] added as we want this for the ANTLRx() macros */
#define zzLOOP(i)  zzREL(i); zzastREL
#else
#define zzBLOCK(i)  int i = zzasp - 1
#define zzEXIT(i)  zzREL(i)
#define zzEXIT_ANTLR(i)  zzREL(i)           /* [i_a] added as we want this for the ANTLRx() macros */
#define zzLOOP(i)  zzREL(i)
#endif

#ifdef LL_K

#ifdef DEMAND_LOOK
#define LOOK(_k)  {int i,stop=_k-(LL_K-zzdirty); for (i=1; i<=stop; i++)  \
          zzCONSUME;}
#define zzCONSUME  {zzgettok(); zzdirty--;              \
          zzlap = (zzlap+1)&(LL_K-1);            \
          zzlextext = &(zztextLA[zzlap][0]);}
#else
#ifdef ZZINF_LOOK
#define zzCONSUME  {inf_zzgettok;                   \
          zzlap = (zzlap+1)&(LL_K-1);            \
          zzlextext = &(zztextLA[zzlap][0]);        \
          }
#else
#define zzCONSUME  {zzgettok();                   \
          zzlap = (zzlap+1)&(LL_K-1);            \
          zzlextext = &(zztextLA[zzlap][0]);}
#endif /* ZZINF_LOOK */
#endif /* DEMAND_LOOK */

#else /* LL_K */

#ifdef DEMAND_LOOK
#define LOOK(_k)  if ( zzdirty) zzCONSUME;
#ifdef ZZINF_LOOK
#define zzCONSUME  inf_zzgettok; zzdirty=0;
#else
#define zzCONSUME  zzgettok(); zzdirty=0;
#endif /* ZZINF_LOOK */

#else  /* DEMAND_LOOK */

#ifdef ZZINF_LOOK
#define zzCONSUME  inf_zzgettok
#else
#define zzCONSUME  zzgettok();
#endif

#endif /* DEMAND_LOOK */

#endif /* LL_K */

#ifdef LL_K
#define NLA      zztokenLA[zzlap&(LL_K-1)]  /* --> next LA */
#define NLATEXT    zztextLA[zzlap&(LL_K-1)]  /* --> next text of LA */
#ifdef DEMAND_LOOK
#define LA(i)       zztokenLA[(zzlabase+(i)-1)&(LL_K-1)]
#define LATEXT(i)   (&(zztextLA[(zzlabase+(i)-1)&(LL_K-1)][0]))
#else
#define LA(i)       zztokenLA[(zzlap+(i)-1)&(LL_K-1)]
#define LATEXT(i)   (&(zztextLA[(zzlap+(i)-1)&(LL_K-1)][0]))
#endif
#else
#define NLA      zztoken
#define NLATEXT    zztext
#define LA(i)       zztoken
#define LATEXT(i)   zztext
#endif


           /* S t a n d a r d  S i g n a l s */

#define NoSignal      0
#define MismatchedToken    1
#define NoViableAlt      2
#define NoSemViableAlt    3

/* MR7  Allow more control over signalling                                  */
/*        by adding "Unwind" and "zzsetSignal"                              */

#define Unwind              4
#define zzsetSignal(newValue) *_retsignal=_signal=(newValue)
#define zzsuppressSignal *_retsignal=_signal=0
#define zzexportSignal    *_retsignal=_signal

           /* F u n c t i o n  T r a c i n g */

#ifndef zzTRACE_RULES
#define zzTRACEdata
#else
#ifndef zzTRACEdata
#define zzTRACEdata     ANTLRChar *zzTracePrevRuleName = NULL;
#endif
#endif

#ifndef zzTRACEIN
#define zzTRACEIN(r)  zzTracePrevRuleName=zzTraceCurrentRuleName;zzTraceIn(r);
#endif
#ifndef zzTRACEOUT
#define zzTRACEOUT(r)  zzTraceOut(r);zzTraceCurrentRuleName=zzTracePrevRuleName;
#endif

/* MR19 zzchar_t additions */

#ifndef zzchar_t
#ifdef ZZWCHAR_T
#define zzchar_t wchar_t
#else
#define zzchar_t char
#endif
#endif

        /* E x t e r n  D e f s */

#ifdef __USE_PROTOS
extern Attrib zzempty_attr(void);
extern Attrib zzconstr_attr(int, char *);
extern void zzsyn(char *, int, char *, SetWordType *, int, int, char *);
extern int zzset_el(unsigned, SetWordType *);
extern int zzset_deg(SetWordType *);
extern void zzedecode(SetWordType *);
extern void zzFAIL(int k, ...);
extern void zzresynch(SetWordType *, SetWordType);
extern void zzsave_antlr_state(zzantlr_state *);
extern void zzrestore_antlr_state(zzantlr_state *);
extern void zzfill_inf_look(void);
extern void zzconsumeUntil(SetWordType *st);                         /* MR7 */
extern void zzconsumeUntilToken(int t);                              /* MR7 */
extern void zzTraceIn(char * ruleName);                              /* MR10 */
extern void zzTraceOut(char * ruleName);                             /* MR10 */
extern int  zzTraceOption(int delta);                                /* MR10 */
extern int  zzTraceGuessOption(int delta);                           /* MR10 */
extern void zzTraceReset(void);                                      /* MR10 */
extern void zzTraceGuessFail(void);                                  /* MR10 */
#ifdef EXCEPTION_HANDLING
extern void zzdflthandlers(int, int *);
#endif
#else
extern Attrib zzempty_attr();
extern Attrib zzconstr_attr();
extern void zzsyn();
extern int zzset_el();
extern int zzset_deg();
extern void zzedecode();
extern void zzFAIL();
extern void zzresynch();
extern void zzsave_antlr_state();
extern void zzrestore_antlr_state();
extern void zzfill_inf_look();
extern void zzconsumeUntil();                                        /* MR7 */
extern void zzconsumeUntilToken();                                   /* MR7 */
extern void zzTraceIn();                                             /* MR10 */
extern void zzTraceOut();                                            /* MR10 */
extern int  zzTraceOption();                                         /* MR10 */
extern int  zzTraceGuessOption();                                    /* MR10 */
extern void zzTraceReset();                                          /* MR10 */
extern void zzTraceGuessFail();                                      /* MR10 */
#ifdef EXCEPTION_HANDLING
extern void zzdflthandlers();
#endif
#endif

        /* G l o b a l  V a r i a b l e s */

/* Define a parser; user should do a "#parser myname" in their grammar file */
/*extern struct pccts_parser zzparser;*/

extern char *zztokens[];
#ifdef LL_K
extern int zztokenLA[];
extern zzchar_t zztextLA[][ZZLEXBUFSIZE];
extern int zzlap;
extern int zzlabase;
#else
extern int zztoken;
#endif

extern char zzStackOvfMsg[];
extern int zzasp;
extern Attrib zzaStack[];
#ifdef ZZINF_LOOK
extern int *zzinf_tokens;
extern char **zzinf_text;
extern char *zzinf_text_buffer;
extern int *zzinf_line;
extern int zzinf_labase;
extern int zzinf_last;
#endif
#ifdef DEMAND_LOOK
extern int zzdirty;
#endif
#ifdef ZZCAN_GUESS
extern int zzguessing;
extern zzjmp_buf zzguess_start;
#endif

/* Define global veriables that refer to values exported by the scanner.
 * These declarations duplicate those in dlgdef.h, but are needed
 * if ANTLR is not to generate a .dlg file (-gx); PS, this is a hack.
 */
extern zzchar_t *zzlextext;     /* text of most recently matched token */
extern int      zzbufsize;      /* how long zzlextext is */

#endif
