⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 globals.c

📁 本工具提供一个词法分析器和语法分析器的集成开发环境
💻 C
📖 第 1 页 / 共 2 页
字号:
void (*fpPrint[NumNodeTypes+1])(... /* Node * */) = {	NULL,	(void (*)(...)) pJunc,	(void (*)(...)) pRuleRef,	(void (*)(...)) pToken,	(void (*)(...)) pAction};#elsevoid (*fpPrint[NumNodeTypes+1])() = {	NULL,	pJunc,	pRuleRef,	pToken,	pAction};#endifchar *decodeJType[] = {	"invalid",	"aSubBlk",	"aOptBlk",	"aLoopBlk",	"EndBlk",	"RuleBlk",	"Generic",	"EndRule",	"aPlusBlk",	"aLoopBegin"};							/* H a s h  T a b l e s */Entry	**Tname,			/* Table of all token names (maps name to tok num)*/		**Texpr,			/* Table of all token expressions							   (maps expr to tok num) */		**Rname,			/* Table of all Rules (has ptr to start of rule) */		**Fcache,			/* Cache of First/Follow Computations */		**Tcache;			/* Tree cache; First/Follow for permute trees */Entry	**Elabel;			/* Table of all element label names */Entry	**Sname;			/* Signal names */Entry   **Pname;            /* symbolic predicate names MR11 */							/* V a r i a b l e s */int     Save_argc;          /* MR10 */char    **Save_argv;        /* MR10 */int		EpToken=0;			/* Imaginary Epsilon token number */int		WildCardToken=0;int		CurFile= -1;		/* Index into FileStr table */char    *CurPredName=NULL;  /* MR11 */char	*CurRule=NULL;		/* Pointer to current rule name */int     CurRuleDebug=0;     /* MR13 debug flag */RuleEntry *CurRuleNode=NULL;/* Pointer to current rule node in syntax tree */char	*CurRetDef=NULL;	/* Pointer to current return type definition */char	*CurParmDef=NULL;	/* Pointer to current parameter definition */Junction *CurRuleBlk=NULL;	/* Pointer to current block node for enclosing block */ListNode *CurExGroups=NULL;	/* Current list of exception groups for rule/alts */ListNode *CurElementLabels=NULL;/* MR10  used by <<>>? to set "label_used_in_semantic_pred"  *//* MR10  this will force LT(i) assignment even in guess mode */ListNode *CurActionLabels=NULL;     /* MR10 Element Labels appearing in last action */int      numericActionLabel=0 ;     /* MR10 << ... $1 ... >> or << ... $1 ... >>?   */ListNode *NumericPredLabels=NULL;   /* MR10 << ... $1 ... >>?  ONLY                 */ListNode *ContextGuardPredicateList=NULL;  /* MR13 for re-evaluating predicates                                                   after meta tokens are defined    */int		CurBlockID=0;		/* Unique int for each block */int		CurAltNum=0;Junction *CurAltStart = NULL;	/* Junction node that starts the alt */Junction *OuterAltStart = NULL; /* For chaining exception groups        MR7 */int		NumRules=0;			/* Rules are from 1 to n */FILE	*output=NULL;		/* current parser output file */FILE	*input=NULL;		/* current grammar input file */char	*FileStr[MaxNumFiles];/* Ptr to array of file names on command-line */int		NumFiles=0;			/* current grammar file number */#ifdef __cplusplusvoid	(**fpTrans)(...),	/* array of ptrs to funcs that translate nodes */	 	(**fpJTrans)(...);	/*  ... that translate junctions */#elsevoid	(**fpTrans)(),		/* array of ptrs to funcs that translate nodes */	 	(**fpJTrans)();		/*  ... that translate junctions */#endifint		**FoStack;			/* Array of LL_k ptrs to stacks of rule numbers */int		**FoTOS;			/* FOLLOW stack top-of-stack pointers */Junction *SynDiag = NULL;	/* Pointer to start of syntax diagram */int		BlkLevel=1;			/* Current block level.  Set by antlr.g, used by							 * scanner to translate $i.j attributes */set		reserved_positions;	/* set of token positions reserved by '#token T=i' cmds */set		all_tokens;			/* set of all token types */set		imag_tokens;		/* set of all imaginary token types (EpToken, errclasses...) */set		tokclasses;			/* set of all token class token types */ListNode *ForcedTokens = 0;	/* list of token_id/token_num pairs to remap */ListNode *MetaTokenNodes=NULL; /* list of meta token refs such as token classes etc... */int		*TokenInd=NULL;		/* an indirection level between token num and position							 * of that token def in TokenStr and ExprStr */int		LastTokenCounted=0;	/* ==TokenNum if no token renumbering (same as old TokenNum) */int		TokenNum=TokenStart;char	**TokenStr=NULL;	/* map token # to token name */char	**ExprStr=NULL;		/* map token # to expr */Junction **RulePtr=NULL;	/* map rule # to RuleBlk node of rule */ListNode *ExprOrder=NULL;	/* list of exprs as they are found in grammar */ListNode *BeforeActions=NULL;/* list of grammar actions before rules */ListNode *AfterActions=NULL;/* list of grammar actions after rules */ListNode *LexActions=NULL;	/* list of lexical actions *//* MR1              									    *//* MR1  11-Apr-97	Provide mechanism for inserting code into DLG class     *//* MR1				via #lexmember <<....>>			            *//* MR1				via #lexprefix <<....>>			            *//* MR1				                					    */ListNode *LexMemberActions=NULL;/* list of lexical header member decl   MR1 */ListNode *LexPrefixActions=NULL;/* list of lexical header #include decl MR1 */ListNode **Cycles=NULL;		/* list of cycles (for each k) found when							   doing FOLLOWs */ListNode *eclasses=NULL;	/* list of error classes */ListNode *tclasses=NULL;	/* list of token classes */LClass	 lclass[MaxLexClasses]; /* array of lex class definitions */int		 CurrentLexClass;	/* index into lclass */int		 NumLexClasses=0;	/* in range 1..MaxLexClasses (init 0) */char	*HdrAction=NULL;	/* action defined with #header */char    *FirstAction=NULL;  /* action defined with #first MR11 */FILE	*ErrFile;			/* sets and error recovery stuff */FILE	*DefFile=NULL;		/* list of tokens, return value structs, setwd defs */FILE    *MRinfoFile=NULL;   /* MR10 information file */int     MRinfo=0;           /* MR10 */int     MRinfoSeq=0;        /* MR10 */int     InfoP=0;            /* MR10 predicates        */int     InfoT=0;            /* MR10 tnodes            */int     InfoF=0;            /* MR10 first/follow sets */int     InfoM=0;            /* MR10 monitor progress  */int     InfoO=0;            /* MR12 orphan rules      */int     TnodesInUse=0;      /* MR10 */int     TnodesPeak=0;       /* MR10 */int     TnodesAllocated=0;  /* MR10 */int     TnodesReportThreshold=0;    /* MR11 */int     PotentialSuppression=0; /* MR10 */int     PotentialDummy=0;       /* MR10 */int		CannotContinue=FALSE;int		OutputLL_k = 1;		/* LL_k for parsing must be power of 2 */int		action_file;		/* used to track start of action */int		action_line;int		FoundGuessBlk=0;	/* there is a (...)? block somewhere in grammar */int		FoundException=0;	/* there is an exception somewhere in grammar *//* MR6	Distinguish between @ operator and real exception 		    *//* MR6    by keeping separate flags for @ operator and real exceptions 	    */int		FoundAtOperator=0;					                     /* MR6 */int		FoundExceptionGroup=0;			                             /* MR6 */int		pLevel=0;			/* print Level */int		pAlt1,pAlt2;		/* print "==>" in front of these alts *//* C++ output stuff */FILE	*Parser_h,			/* where subclass of ANTLRParser goes */		*Parser_c;			/* where code for subclass of ANTLRParser goes */char	Parser_h_Name[MaxFileName+1] = "";char	Parser_c_Name[MaxFileName+1] = "";char    MRinfoFile_Name[MaxFileName+1] = "";                /* MR10 */char    *ClassDeclStuff=NULL;                               /* MR10 *//* list of actions inside the #class {...} defs */ListNode *class_before_actions=NULL;ListNode *class_after_actions=NULL;char	CurrentClassName[MaxRuleName]="";int		no_classes_found=1;char	*UserTokenDefsFile;int		UserDefdTokens=0;	/* found #tokdefs? */char	*OutputDirectory=TopDirectory;ExceptionGroup *DefaultExGroup = NULL;int		NumSignals = NumPredefinedSignals;int		ContextGuardTRAV=0;char    *MR_AmbAidRule=NULL;        /* MR11 */int     MR_AmbAidLine=0;            /* MR11 */int     MR_AmbAidDepth=0;           /* MR11 */int     MR_AmbAidMultiple=0;        /* MR11 */int     MR_skipped_e3_report=0;     /* MR11 */int     MR_usingPredNames=0;        /* MR11 */int     MR_BadExprSets=0;           /* MR13 */int     MR_Inhibit_Tokens_h_Gen=0;  /* MR13 */int     NewAST=0;                   /* MR13 */int     AlphaBetaTrace=0;           /* MR14 */int     MR_AlphaBetaMessageCount=0; /* MR14 */int     MR_AlphaBetaWarning=0;      /* MR14 */int     MR_ErrorSetComputationActive=0;     /* MR14 */int     MR_MaintainBackTrace=0;             /* MR14 */set     MR_CompromisedRules;        /* MR14 */Junction    *MR_RuleBlkWithHalt;    /* MR10 */					/* C m d - L i n e  O p t i o n s */int		LL_k=1;				/* how many tokens of full lookahead */int		CLL_k= -1;			/* how many tokens of compressed lookahead */int		PrintOut = FALSE;	/* print out the grammar */int		PrintAnnotate = FALSE;/* annotate printout with FIRST sets */int		CodeGen=TRUE;		/* Generate output code? */int		LexGen=TRUE;		/* Generate lexical files? (tokens.h, parser.dlg) */int		GenAST=FALSE;		/* Generate AST's? */int		GenANSI=FALSE;		/* Generate ANSI code where necessary */int		GenExprSetsOpt=TRUE;/* use sets not (LA(1)==tok) expression lists */int		GenCR=FALSE;		/* Generate cross reference? */int		GenLineInfo=FALSE;	/* Generate # line "file" stuff? */int		GenLineInfoMS=FALSE;/* Like -gl but replace "\" with "/" for MS C/C++ systems */int		TraceGen=FALSE;		/* Generate code to trace rule invocation */int		elevel=1;			/* error level for ambiguity messages */int		GenEClasseForRules=0;/* don't generate eclass for each rule */int		TreeResourceLimit= -1;/* don't limit tree resource */int		DemandLookahead = 0;/* demand/delayed lookahead or not */char	*RulePrefix = "";	/* prefix each generated rule with this */char	*stdpccts = "stdpccts.h";/* where to generate std pccts include file */int		GenStdPccts = 0;	/* don't gen stdpccts.h? */int		ParseWithPredicates = 1;int		WarningLevel = 1;int		UseStdout = 0;					/* MR6 */int		TabWidth = 0;					/* MR6 */int		HoistPredicateContext = 0;int     MRhoisting = 0;                 /* MR9 */int     MRhoistingk = 0;                /* MR13 */int     MR_debugGenRule=0;              /* MR11 */int		GenCC = 0;			/* Generate C++ output */PointerStack MR_BackTraceStack={0,0,NULL};            /* MR10 */PointerStack MR_PredRuleRefStack={0,0,NULL};          /* MR10 */PointerStack MR_RuleBlkWithHaltStack={0,0,NULL};      /* MR10 *//* DontCopyTokens and Pragma_DupLabeledTokens were a bad idea.  I've just   turned them off rather than backpatching the code.  Who knows?  We   may need them in the future. */int		DontCopyTokens = 1;	/* in C++, don't copy ANTLRToken passed to ANTLR */

⌨️ 快捷键说明

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