antlr.h

来自「本工具提供一个词法分析器和语法分析器的集成开发环境」· C头文件 代码 · 共 733 行 · 第 1/2 页

H
733
字号
/* 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/* * 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_Htypedef 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_GUESStypedef struct _zzjmp_buf {			jmp_buf state;		} zzjmp_buf;#endif/* can make this a power of 2 for more efficient lookup */#ifndef ZZLEXBUFSIZE#define ZZLEXBUFSIZE	2000#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#ifdef LL_K#define LOOKAHEAD												\	int zztokenLA[LL_K];										\	char 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#endiftypedef 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_RULESextern int  zzTraceOptionValueDefault;extern int  zzTraceOptionValue;extern int  zzTraceGuessOptionValue;extern char *zzTraceCurrentRuleName;extern int  zzTraceDepth;#endifextern 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() {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() {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

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?