mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-12-20 15:48:18 +01:00
7c0aa811ec
Signed-off-by: Sergey Isakov <isakov-sl@bk.ru>
808 lines
25 KiB
C
808 lines
25 KiB
C
/* 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-2000
|
|
*/
|
|
|
|
#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,_hasuseraction,_useraction) \
|
|
if (zzguessing) { \
|
|
zzGUESS_FAIL; \
|
|
} else { \
|
|
zzfailed_pred_action(_p,_hasuseraction,_useraction); \
|
|
}
|
|
#else
|
|
#define zzfailed_pred(_p,_hasuseraction,_useraction) \
|
|
zzfailed_pred_action(_p,_hasuseraction,_useraction);
|
|
#endif
|
|
#endif
|
|
|
|
/* MR23 Provide more control over failed predicate action
|
|
without any need for user to worry about guessing internals.
|
|
_hasuseraction == 0 => no user specified error action
|
|
_hasuseraction == 1 => user specified error action
|
|
*/
|
|
|
|
#ifndef zzfailed_pred_action
|
|
#define zzfailed_pred_action(_p,_hasuseraction,_useraction) \
|
|
if (_hasuseraction) { _useraction } \
|
|
else { fprintf(stderr, "semantic error; failed predicate: '%s'\n",_p); }
|
|
#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,_tokclassErrset) \
|
|
if ( !_zzsetmatch(_es, &zzBadText, &zzMissText, &zzMissTok, &zzBadTok, &zzMissSet, _tokclassErrset) ) goto fail; /* MR23 */
|
|
|
|
#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 **, SetWordType * /* MR23 */);
|
|
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
|
|
|
|
|
|
/* MR26 */
|
|
|
|
#ifdef PCCTS_USE_STDARG
|
|
extern void zzFAIL(int k, ...);
|
|
#else
|
|
extern void zzFAIL();
|
|
#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 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 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 variables 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
|