+++ /dev/null
-/*\r
- * globals.c -- File containing all variables/tables visible to all files.\r
- *\r
- * SOFTWARE RIGHTS\r
- *\r
- * We reserve no LEGAL rights to the Purdue Compiler Construction Tool\r
- * Set (PCCTS) -- PCCTS is in the public domain. An individual or\r
- * company may do whatever they wish with source code distributed with\r
- * PCCTS or the code generated by PCCTS, including the incorporation of\r
- * PCCTS, or its output, into commerical software.\r
- *\r
- * We encourage users to develop software with PCCTS. However, we do ask\r
- * that credit is given to us for developing PCCTS. By "credit",\r
- * we mean that if you incorporate our source code into one of your\r
- * programs (commercial product, research project, or otherwise) that you\r
- * acknowledge this fact somewhere in the documentation, research report,\r
- * etc... If you like PCCTS and have developed a nice tool with the\r
- * output, please mention that you developed it using PCCTS. In\r
- * addition, we ask that this header remain intact in our source code.\r
- * As long as these guidelines are kept, we expect to continue enhancing\r
- * this system and expect to make other tools available as they are\r
- * completed.\r
- *\r
- * ANTLR 1.33\r
- * Terence Parr\r
- * Parr Research Corporation\r
- * with Purdue University and AHPCRC, University of Minnesota\r
- * 1989-2001\r
- */\r
-\r
-#include <stdio.h>\r
-\r
-#include "pcctscfg.h"\r
-\r
-#include "set.h"\r
-#include "syn.h"\r
-#include "hash.h"\r
-#include "generic.h"\r
-\r
-char Version[] = "1.33MR33" ; /* PCCTS version number */ /* MRXXX */\r
-char VersionDef[] = "13333"; /* same (except int equiv for preproc symbol) */ /* MRXXX */\r
-\r
-char LexStartSymbol[] = "START";/* Name of starting lexical class/automaton */\r
-char *RemapFileName = "remap.h";\r
-char *DlgFileName = "parser.dlg";\r
-char *DefFileName = "tokens.h";\r
-char *ErrFileName = "err.c";\r
-char *ModeFileName = "mode.h";\r
-char *StdMsgName = NULL;\r
-\r
-char *ParserName = DefaultParserName;\r
-\r
-/* list of PCCTS supplied support symbols; these are renamed when more than\r
- * one ANTLR-generated parsers are linked together to avoid name conflicts.\r
- * Can't use '##' ANSIC preprocessor concat operator with K&R and:\r
- * #define zzskip zzparser ## skip\r
- * will not work for ANSI/C++ as 'zzparserskip' is created w/o zzparser\r
- * being substituted--ack!!!\r
- */\r
-char *StandardSymbols[] = {\r
-/* ANTLR stuff */\r
- "zzStackOvfMsg",\r
- "zzasp",\r
- "zzaStack",\r
- "inf_tokens",\r
- "inf_text",\r
- "inf_text_buffer",\r
- "inf_text_buffer_ptr",\r
- "inf_text_buffer_size",\r
- "inf_labase",\r
- "inf_last",\r
- "inf_lap",\r
- "zztokenLA",\r
- "zztextLA",\r
- "zzlap",\r
- "zzlabase",\r
- "zztoktext",\r
- "zztoken",\r
- "zzdirty",\r
- "zzguessing",\r
- "zzguess_start",\r
- "zzresynch",\r
- "zzinf_tokens",\r
- "zzinf_text",\r
- "zzinf_text_buffer",\r
- "zzinf_labase",\r
- "zzinf_last",\r
- "zzfill_inf_look",\r
- "zzFAIL",\r
- "zzsave_antlr_state",\r
- "zzrestore_antlr_state",\r
- "zzsyn",\r
- "zzset_el",\r
- "zzset_deg",\r
- "zzedecode",\r
- "_zzsetmatch",\r
- "_zzmatch",\r
- "_inf_zzgettok",\r
- "zzconsumeUntil",\r
- "zzconsumeUntilToken",\r
- "_zzmatch_wsig",\r
- "_zzsetmatch_wsig",\r
- "_zzmatch_wdfltsig",\r
- "_zzsetmatch_wdfltsig",\r
- "zzdflthandlers",\r
-/* DLG stuff */\r
- "zzreal_line",\r
- "zzcharfull",\r
- "zzerr",\r
- "zzlextext",\r
- "zzbegexpr",\r
- "zzendexpr",\r
- "zzbufsize",\r
- "zzbegcol",\r
- "zzendcol",\r
- "zzline",\r
- "zzchar",\r
- "zzbufovf",\r
- "zzrdstream",\r
- "zzrdfunc",\r
- "zzrdstr",\r
- "zzclose_stream",\r
- "zzsave_dlg_state",\r
- "zzrestore_dlg_state",\r
- "zzmode",\r
- "zzskip",\r
- "zzmore",\r
- "zzreplchar",\r
- "zzreplstr",\r
- "zzgettok",\r
- "zzadvance",\r
- "zzerrstd",\r
- "zzerr_in",\r
- "zzconstr_attr",\r
- "zzempty_attr",\r
- "zzerraction",\r
- "zztokens", /* list of token regular expressions */\r
- "dfa",\r
- "accepts",\r
- "actions",\r
- "zzTraceOptionValue", /* MR10 */\r
- "zzTraceGuessOptionValue", /* MR10 */\r
- "zzTraceCurrentRuleName", /* MR10 */\r
- "zzTraceDepth", /* MR10 */\r
- "zzGuessSeq", /* MR10 */\r
- "zzSyntaxErrCount", /* MR11 */\r
- "zzLexErrCount", /* MR11 */\r
- "zzTraceGuessDone", /* MR13 - BJS */\r
- "zzTraceGuessFail", /* MR13 - BJS */\r
- "zzTraceGuessOption", /* MR13 - BJS */\r
- "zzTraceIn", /* MR13 - BJS */\r
- "zzTraceOption", /* MR13 - BJS */\r
- "zzTraceOut", /* MR13 - BJS */\r
- "zzTraceReset", /* MR13 - BJS */\r
- NULL /* must be present */\r
-};\r
-\r
-/* list of PCCTS supplied support functions; these are renamed when more than\r
- * one ANTLR-generated parsers are linked together to avoid name conflicts.\r
- */\r
-char *ASTSymbols[] = {\r
- "AST",\r
- "zzast_sp",\r
- "zzastStack",\r
- "zzlink",\r
- "zzastnew",\r
- "zzsubchild",\r
- "zzsubroot",\r
- "zzpre_ast",\r
- "zzfree_ast",\r
- "zztmake",\r
- "zzdup_ast",\r
- "zztfree",\r
- "zzdouble_link",\r
- NULL /* must be present */\r
-};\r
-\r
-/* Current ambiguity examination information */\r
-int CurAmbigAlt1, CurAmbigAlt2, CurAmbigline, CurAmbigfile;\r
-char *CurAmbigbtype;\r
-\r
-\r
- /* M e t h o d T a b l e s */\r
-/*\r
- * The following tables are used to fill syntax diagram nodes with the correct\r
- * function pointers for computing FIRST sets and printing themselves.\r
- */\r
-\r
-/* fpTraverse[node type] == pointer to function that calculates trees\r
- * representing the FIRST sets for that node (maintains spatial info).\r
- * We use 'struct _tree' not 'tree' due to a g++ 2.4.3 bug.\r
- */\r
-#ifdef __cplusplus\r
-struct _tree *(*fpTraverse[NumNodeTypes+1])(... /* Node *, int, set * */) = {\r
- NULL,\r
- (struct _tree *(*)(...)) tJunc,\r
- (struct _tree *(*)(...)) tRuleRef,\r
- (struct _tree *(*)(...)) tToken,\r
- (struct _tree *(*)(...)) tAction\r
-};\r
-#else\r
-Tree *(*fpTraverse[NumNodeTypes+1])() = {\r
- NULL,\r
- tJunc,\r
- tRuleRef,\r
- tToken,\r
- tAction\r
-};\r
-#endif\r
-\r
-/* fpReach[node type] == pointer to function that calculates FIRST set for\r
- * that node. (r stands for reach). We use 'struct _set' not 'set'\r
- * due to a g++ 2.4.3 bug.\r
- */\r
-#ifdef __cplusplus\r
-struct _set (*fpReach[NumNodeTypes+1])(... /* Node *, int, set * */) = {\r
- NULL,\r
- (struct _set (*)(...)) rJunc,\r
- (struct _set (*)(...)) rRuleRef,\r
- (struct _set (*)(...)) rToken,\r
- (struct _set (*)(...)) rAction\r
-};\r
-#else\r
-set (*fpReach[NumNodeTypes+1])() = {\r
- NULL,\r
- rJunc,\r
- rRuleRef,\r
- rToken,\r
- rAction\r
-};\r
-#endif\r
-\r
-/* fpPrint[node type] == pointer to function that knows how to print that node. */\r
-#ifdef __cplusplus\r
-void (*fpPrint[NumNodeTypes+1])(... /* Node * */) = {\r
- NULL,\r
- (void (*)(...)) pJunc,\r
- (void (*)(...)) pRuleRef,\r
- (void (*)(...)) pToken,\r
- (void (*)(...)) pAction\r
-};\r
-#else\r
-void (*fpPrint[NumNodeTypes+1])() = {\r
- NULL,\r
- pJunc,\r
- pRuleRef,\r
- pToken,\r
- pAction\r
-};\r
-#endif\r
-\r
-char *decodeJType[] = {\r
- "invalid",\r
- "aSubBlk",\r
- "aOptBlk",\r
- "aLoopBlk",\r
- "EndBlk",\r
- "RuleBlk",\r
- "Generic",\r
- "EndRule",\r
- "aPlusBlk",\r
- "aLoopBegin"\r
-};\r
-\r
-\r
- /* H a s h T a b l e s */\r
-\r
-Entry **Tname, /* Table of all token names (maps name to tok num)*/\r
- **Texpr, /* Table of all token expressions\r
- (maps expr to tok num) */\r
- **Rname, /* Table of all Rules (has ptr to start of rule) */\r
- **Fcache, /* Cache of First/Follow Computations */\r
- **Tcache; /* Tree cache; First/Follow for permute trees */\r
-Entry **Elabel; /* Table of all element label names */\r
-Entry **Sname; /* Signal names */\r
-Entry **Pname; /* symbolic predicate names MR11 */\r
-\r
-\r
- /* V a r i a b l e s */\r
-\r
-int Save_argc; /* MR10 */\r
-char **Save_argv; /* MR10 */\r
-int EpToken=0; /* Imaginary Epsilon token number */\r
-int WildCardToken=0;\r
-int CurFile= -1; /* Index into FileStr table */\r
-char *CurPredName=NULL; /* MR11 */\r
-char *CurRule=NULL; /* Pointer to current rule name */\r
-int CurRuleDebug=0; /* MR13 debug flag */\r
-RuleEntry *CurRuleNode=NULL;/* Pointer to current rule node in syntax tree */\r
-char *CurRetDef=NULL; /* Pointer to current return type definition */\r
-char *CurParmDef=NULL; /* Pointer to current parameter definition */\r
-Junction *CurRuleBlk=NULL; /* Pointer to current block node for enclosing block */\r
-ListNode *CurExGroups=NULL; /* Current list of exception groups for rule/alts */\r
-ListNode *CurElementLabels=NULL;\r
-ListNode *CurAstLabelsInActions=NULL; /* MR27 */\r
-\r
-/* MR10 used by <<>>? to set "label_used_in_semantic_pred" */\r
-/* MR10 this will force LT(i) assignment even in guess mode */\r
-\r
-ListNode *CurActionLabels=NULL; /* MR10 Element Labels appearing in last action */\r
-int numericActionLabel=0 ; /* MR10 << ... $1 ... >> or << ... $1 ... >>? */\r
-ListNode *NumericPredLabels=NULL; /* MR10 << ... $1 ... >>? ONLY */\r
-ListNode *ContextGuardPredicateList=NULL; /* MR13 for re-evaluating predicates\r
- after meta tokens are defined */\r
-\r
-int CurBlockID=0; /* Unique int for each block */\r
-int CurAltNum=0;\r
-Junction *CurAltStart = NULL; /* Junction node that starts the alt */\r
-Junction *OuterAltStart = NULL; /* For chaining exception groups MR7 */\r
-int NumRules=0; /* Rules are from 1 to n */\r
-FILE *output=NULL; /* current parser output file */\r
-FILE *input=NULL; /* current grammar input file */\r
-char *FileStr[MaxNumFiles];/* Ptr to array of file names on command-line */\r
-int NumFiles=0; /* current grammar file number */\r
-#ifdef __cplusplus\r
-void (**fpTrans)(...), /* array of ptrs to funcs that translate nodes */\r
- (**fpJTrans)(...); /* ... that translate junctions */\r
-#else\r
-void (**fpTrans)(), /* array of ptrs to funcs that translate nodes */\r
- (**fpJTrans)(); /* ... that translate junctions */\r
-#endif\r
-int **FoStack; /* Array of LL_k ptrs to stacks of rule numbers */\r
-int **FoTOS; /* FOLLOW stack top-of-stack pointers */\r
-Junction *SynDiag = NULL; /* Pointer to start of syntax diagram */\r
-int BlkLevel=1; /* Current block level. Set by antlr.g, used by\r
- * scanner to translate $i.j attributes */\r
-set reserved_positions; /* set of token positions reserved by '#token T=i' cmds */\r
-set all_tokens; /* set of all token types */\r
-set imag_tokens; /* set of all imaginary token types (EpToken, errclasses...) */\r
-set tokclasses; /* set of all token class token types */\r
-ListNode *ForcedTokens = 0; /* list of token_id/token_num pairs to remap */\r
-ListNode *MetaTokenNodes=NULL; /* list of meta token refs such as token classes etc... */\r
-int *TokenInd=NULL; /* an indirection level between token num and position\r
- * of that token def in TokenStr and ExprStr */\r
-int LastTokenCounted=0; /* ==TokenNum if no token renumbering (same as old TokenNum) */\r
-int TokenNum=TokenStart;\r
-char **TokenStr=NULL; /* map token # to token name */\r
-char **ExprStr=NULL; /* map token # to expr */\r
-Junction **RulePtr=NULL; /* map rule # to RuleBlk node of rule */\r
-ListNode *ExprOrder=NULL; /* list of exprs as they are found in grammar */\r
-ListNode *BeforeActions=NULL;/* list of grammar actions before rules */\r
-ListNode *AfterActions=NULL;/* list of grammar actions after rules */\r
-ListNode *LexActions=NULL; /* list of lexical actions */\r
-\r
-/* MR1 */\r
-/* MR1 11-Apr-97 Provide mechanism for inserting code into DLG class */\r
-/* MR1 via #lexmember <<....>> */\r
-/* MR1 via #lexprefix <<....>> */\r
-/* MR1 */\r
-\r
-ListNode *LexMemberActions=NULL;/* list of lexical header member decl MR1 */\r
-ListNode *LexPrefixActions=NULL;/* list of lexical header #include decl MR1 */\r
-ListNode **Cycles=NULL; /* list of cycles (for each k) found when\r
- doing FOLLOWs */\r
-ListNode *eclasses=NULL; /* list of error classes */\r
-ListNode *tclasses=NULL; /* list of token classes */\r
-LClass lclass[MaxLexClasses]; /* array of lex class definitions */\r
-int CurrentLexClass; /* index into lclass */\r
-int NumLexClasses=0; /* in range 1..MaxLexClasses (init 0) */\r
-\r
-char *HdrAction=NULL; /* action defined with #header */\r
-char *FirstAction=NULL; /* action defined with #first MR11 */\r
-FILE *ErrFile; /* sets and error recovery stuff */\r
-FILE *DefFile=NULL; /* list of tokens, return value structs, setwd defs */\r
-FILE *MRinfoFile=NULL; /* MR10 information file */\r
-int MRinfo=0; /* MR10 */\r
-int MRinfoSeq=0; /* MR10 */\r
-int InfoP=0; /* MR10 predicates */\r
-int InfoT=0; /* MR10 tnodes */\r
-int InfoF=0; /* MR10 first/follow sets */\r
-int InfoM=0; /* MR10 monitor progress */\r
-int InfoO=0; /* MR12 orphan rules */\r
-int TnodesInUse=0; /* MR10 */\r
-int TnodesPeak=0; /* MR10 */\r
-int TnodesAllocated=0; /* MR10 */\r
-int TnodesReportThreshold=0; /* MR11 */\r
-int PotentialSuppression=0; /* MR10 */\r
-int PotentialDummy=0; /* MR10 */\r
-int CannotContinue=FALSE;\r
-int OutputLL_k = 1; /* LL_k for parsing must be power of 2 */\r
-int action_file; /* used to track start of action */\r
-int action_line;\r
-int FoundGuessBlk=0; /* there is a (...)? block somewhere in grammar */\r
-int FoundException=0; /* there is an exception somewhere in grammar */\r
-/* MR6 Distinguish between @ operator and real exception */\r
-/* MR6 by keeping separate flags for @ operator and real exceptions */\r
-int FoundAtOperator=0; /* MR6 */\r
-int FoundExceptionGroup=0; /* MR6 */\r
-int pLevel=0; /* print Level */\r
-int pAlt1,pAlt2; /* print "==>" in front of these alts */\r
-\r
-/* C++ output stuff */\r
-FILE *Parser_h, /* where subclass of ANTLRParser goes */\r
- *Parser_c; /* where code for subclass of ANTLRParser goes */\r
-char Parser_h_Name[MaxFileName+1] = "";\r
-char Parser_c_Name[MaxFileName+1] = "";\r
-char MRinfoFile_Name[MaxFileName+1] = ""; /* MR10 */\r
-char *ClassDeclStuff=NULL; /* MR10 */\r
-char *BaseClassName=NULL; /* MR22 */\r
-/* list of actions inside the #class {...} defs */\r
-ListNode *class_before_actions=NULL;\r
-ListNode *class_after_actions=NULL;\r
-\r
-char CurrentClassName[MaxRuleName]="";\r
-int no_classes_found=1;\r
-char *UserTokenDefsFile;\r
-int UserDefdTokens=0; /* found #tokdefs? */\r
-char *OutputDirectory=TopDirectory;\r
-ExceptionGroup *DefaultExGroup = NULL;\r
-int NumSignals = NumPredefinedSignals;\r
-int ContextGuardTRAV=0;\r
-\r
-char *MR_AmbAidRule=NULL; /* MR11 */\r
-int MR_AmbAidLine=0; /* MR11 */\r
-int MR_AmbAidDepth=0; /* MR11 */\r
-int MR_AmbAidMultiple=0; /* MR11 */\r
-int MR_skipped_e3_report=0; /* MR11 */\r
-int MR_usingPredNames=0; /* MR11 */\r
-int MR_BadExprSets=0; /* MR13 */\r
-int MR_Inhibit_Tokens_h_Gen=0; /* MR13 */\r
-int NewAST=0; /* MR13 */\r
-int tmakeInParser=0; /* MR23 */\r
-int AlphaBetaTrace=0; /* MR14 */\r
-int MR_BlkErr=0; /* MR21 */\r
-int MR_AlphaBetaMessageCount=0; /* MR14 */\r
-int MR_AlphaBetaWarning=0; /* MR14 */\r
-int MR_ErrorSetComputationActive=0; /* MR14 */\r
-int MR_MaintainBackTrace=0; /* MR14 */\r
-set MR_CompromisedRules; /* MR14 */\r
-\r
-Junction *MR_RuleBlkWithHalt; /* MR10 */\r
-\r
- /* C m d - L i n e O p t i o n s */\r
-\r
-int LL_k=1; /* how many tokens of full lookahead */\r
-int CLL_k= -1; /* how many tokens of compressed lookahead */\r
-int PrintOut = FALSE; /* print out the grammar */\r
-int PrintAnnotate = FALSE;/* annotate printout with FIRST sets */\r
-int CodeGen=TRUE; /* Generate output code? */\r
-int LexGen=TRUE; /* Generate lexical files? (tokens.h, parser.dlg) */\r
-int GenAST=FALSE; /* Generate AST's? */\r
-int GenANSI=FALSE; /* Generate ANSI code where necessary */\r
-int GenExprSetsOpt=TRUE;/* use sets not (LA(1)==tok) expression lists */\r
-int GenCR=FALSE; /* Generate cross reference? */\r
-int GenLineInfo=FALSE; /* Generate # line "file" stuff? */\r
-int GenLineInfoMS=FALSE;/* Like -gl but replace "\" with "/" for MS C/C++ systems */\r
-int TraceGen=FALSE; /* Generate code to trace rule invocation */\r
-int elevel=1; /* error level for ambiguity messages */\r
-int GenEClasseForRules=0;/* don't generate eclass for each rule */\r
-int TreeResourceLimit= -1;/* don't limit tree resource */\r
-int DemandLookahead = 0;/* demand/delayed lookahead or not */\r
-char *RulePrefix = ""; /* prefix each generated rule with this */\r
-char *stdpccts = "stdpccts.h";/* where to generate std pccts include file */\r
-int GenStdPccts = 0; /* don't gen stdpccts.h? */\r
-int ParseWithPredicates = 1;\r
-int WarningLevel = 1;\r
-int UseStdout = 0; /* MR6 */\r
-int TabWidth = 2; /* MR6 */ /* MR27 */\r
-int HoistPredicateContext = 0;\r
-int MRhoisting = 0; /* MR9 */\r
-int MRhoistingk = 0; /* MR13 */\r
-int MR_debugGenRule=0; /* MR11 */\r
-\r
-int GenCC = 0; /* Generate C++ output */\r
-\r
-PointerStack MR_BackTraceStack={0,0,NULL}; /* MR10 */\r
-PointerStack MR_PredRuleRefStack={0,0,NULL}; /* MR10 */\r
-PointerStack MR_RuleBlkWithHaltStack={0,0,NULL}; /* MR10 */\r
-\r
-/* DontCopyTokens and Pragma_DupLabeledTokens were a bad idea. I've just\r
- turned them off rather than backpatching the code. Who knows? We\r
- may need them in the future.\r
- */\r
-int DontCopyTokens = 1; /* in C++, don't copy ANTLRToken passed to ANTLR */\r
-\r
-/* Remember if LT(i), LA(i), or LATEXT(i) used in an action which is not\r
- a predicate. If so, give a warning for novice users.\r
-*/\r
-\r
-int LTinTokenAction = 0; /* MR23 */\r
-int PURIFY = 1; /* MR23 */\r
-\r
-int CurBlockID_array[MAX_BLK_LEVEL]; /* MR23 */\r
-int CurAltNum_array[MAX_BLK_LEVEL]; /* MR23 */\r