| /* | |
| * generic.h -- generic include stuff for new PCCTS ANTLR. | |
| * | |
| * 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-2001 | |
| */ | |
| #define StrSame 0 | |
| #define DefaultParserName "zzparser" | |
| /* MR9 JVincent@novell.com Allow user to override default ZZLEXBUFSIZE */ | |
| /* MR11 thm Raise antlr's own default ZZLEXBUFSIZE to 8k */ | |
| /* MR22 thm Raise antlr's own default ZZLEXBUFSIZE to 32k */ | |
| #ifndef ZZLEXBUFSIZE | |
| #define ZZLEXBUFSIZE 32000 | |
| #endif | |
| /* Tree/FIRST/FOLLOW defines -- valid only after all grammar has been read */ | |
| #define ALT TokenNum+1 | |
| #define SET TokenNum+2 | |
| #define TREE_REF TokenNum+3 | |
| /* E r r o r M a c r o s */ | |
| #define fatal(err) fatalFL(err, __FILE__, __LINE__) | |
| #define fatal_internal(err) fatal_intern(err, __FILE__, __LINE__) | |
| #define eMsg1(s,a) eMsg3(s,a,NULL,NULL) | |
| #define eMsg2(s,a,b) eMsg3(s,a,b,NULL) | |
| /* S a n i t y C h e c k i n g */ | |
| #ifndef require | |
| #define require(expr, err) {if ( !(expr) ) fatal_internal(err);} | |
| #endif | |
| /* L i s t N o d e s */ | |
| typedef struct _ListNode { | |
| void *elem; /* pointer to any kind of element */ | |
| struct _ListNode *next; | |
| } ListNode; | |
| /* Define a Cycle node which is used to track lists of cycles for later | |
| * reconciliation by ResolveFoCycles(). | |
| */ | |
| typedef struct _c { | |
| int croot; /* cycle root */ | |
| set cyclicDep; /* cyclic dependents */ | |
| unsigned deg; /* degree of FOLLOW set of croot */ | |
| } Cycle; | |
| typedef struct _e { | |
| int tok; /* error class name == TokenStr[tok] */ | |
| ListNode *elist; /* linked list of elements in error set */ | |
| set eset; | |
| int setdeg; /* how big is the set */ | |
| int lexclass; /* which lex class is it in? */ | |
| } ECnode; | |
| typedef struct _TCnode { | |
| int tok; /* token class name */ | |
| ListNode *tlist; /* linked list of elements in token set */ | |
| set tset; | |
| int lexclass; /* which lex class is it in? */ | |
| unsigned char dumped; /* this def has been been dumped */ | |
| unsigned char dumpedComplement; /* this def has been been dumped */ | |
| unsigned setnum; /* which set number is this guy? (if dumped) */ | |
| unsigned setnumComplement; /* MR23 */ | |
| unsigned setnumErrSet; /* MR23 which set is this #tokclass error set (if dumped) */ | |
| unsigned setnumErrSetComplement; /* MR23 */ | |
| } TCnode; | |
| typedef struct _ft { | |
| char *token; /* id of token type to remap */ | |
| int tnum; /* move token type to which token position */ | |
| } ForcedToken; | |
| typedef struct _ContextGuardPredicates { /* MR13 */ | |
| Predicate *pred; /* MR13 */ | |
| } ContextGuardPredicates; /* MR13 */ | |
| #define newListNode (ListNode *) calloc(1, sizeof(ListNode)); | |
| #define newCycle (Cycle *) calloc(1, sizeof(Cycle)); | |
| #define newECnode (ECnode *) calloc(1, sizeof(ECnode)); | |
| #define newTCnode (TCnode *) calloc(1, sizeof(TCnode)); | |
| /* H a s h T a b l e E n t r i e s */ | |
| typedef struct _t { /* Token name or expression */ | |
| char *str; | |
| struct _t *next; | |
| int token; /* token number */ | |
| unsigned char classname; /* is it a err/tok class name or token */ | |
| TCnode *tclass; /* ptr to token class */ | |
| char *action; | |
| char *akaString; | |
| } TermEntry; | |
| typedef struct _r { /* Rule name and ptr to start of rule */ | |
| char *str; | |
| struct _t *next; | |
| int rulenum; /* RulePtr[rulenum]== ptr to RuleBlk junction */ | |
| unsigned char noAST;/* gen AST construction code? (def==gen code) */ | |
| char *egroup; /* which error group (err reporting stuff) */ | |
| #if 0 | |
| /* MR27 This appears to never be used. Delete this code later. */ | |
| ListNode *el_labels;/* list of element labels ref in all of rule */ | |
| #endif | |
| ListNode *ast_labels_in_actions; /* MR27 */ | |
| unsigned char has_rule_exception; | |
| char dontComputeErrorSet; /* MR14 - don't compute error set | |
| special for rule in alpha part of | |
| (alpha)? beta block */ | |
| } RuleEntry; | |
| typedef struct _f { /* cache Fi/Fo set */ | |
| char *str; /* key == (rulename, computation, k) */ | |
| struct _f *next; | |
| set fset; /* First/Follow of rule */ | |
| set rk; /* set of k's remaining to be done after ruleref */ | |
| int incomplete; /* only w/FOLLOW sets. Use only if complete */ | |
| } CacheEntry; | |
| typedef struct _LabelEntry { /* element labels */ | |
| char *str; | |
| struct _f *next; | |
| Node *elem; /* which element does it point to? */ | |
| ExceptionGroup *ex_group; | |
| /* Is there an exception attached to label? */ | |
| ExceptionGroup *outerEG; /* MR7 */ | |
| /* next EG if ex_group doesn't catch it MR7 */ | |
| struct _LabelEntry *pendingLink; /* MR7 */ | |
| /* too lazy to use ListNode ? MR7 */ | |
| int curAltNum; /* MR7 */ | |
| } LabelEntry; | |
| typedef struct _SignalEntry { | |
| char *str; | |
| struct _f *next; | |
| int signum; /* unique signal number */ | |
| } SignalEntry; | |
| typedef struct _PredEntry { /* MR11 predicate name and ptr to string */ | |
| char *str; | |
| struct _PredEntry *next; | |
| int file; | |
| int line; | |
| Predicate *pred; | |
| char *predLiteral; | |
| } PredEntry; | |
| typedef struct _PointerStack { /* MR10 */ | |
| int count; | |
| int size; | |
| void **data; | |
| } PointerStack; | |
| #define newTermEntry(s) (TermEntry *) newEntry(s, sizeof(TermEntry)) | |
| #define newRuleEntry(s) (RuleEntry *) newEntry(s, sizeof(RuleEntry)) | |
| #define newCacheEntry(s) (CacheEntry *) newEntry(s, sizeof(CacheEntry)) | |
| #define newLabelEntry(s) (LabelEntry *) newEntry(s, sizeof(LabelEntry)) | |
| #define newSignalEntry(s) (SignalEntry *) newEntry(s, sizeof(SignalEntry)) | |
| #define newPredEntry(s) (PredEntry *) newEntry(s,sizeof(PredEntry)) | |
| typedef struct _UserAction { | |
| char *action; | |
| int file, line; | |
| } UserAction; | |
| /* L e x i c a l C l a s s */ | |
| /* to switch lex classes, switch ExprStr and Texpr (hash table) */ | |
| typedef struct _lc { | |
| char *classnum, **exprs; | |
| Entry **htable; | |
| } LClass; | |
| typedef struct _exprOrder { | |
| char *expr; | |
| int lclass; | |
| } Expr; | |
| typedef Graph Attrib; | |
| /* M a x i m u m s */ | |
| /* MR20 Note G. Hobbelt These values are superceded by values in hash.h */ | |
| #ifndef HashTableSize | |
| #define HashTableSize 253 | |
| #endif | |
| #ifndef StrTableSize | |
| #define StrTableSize 15000 /* all tokens, nonterminals, rexprs stored here */ | |
| #endif | |
| #define MaxLexClasses 50 /* how many automatons */ | |
| /* TokenStart and EofToken are ignored if #tokdefs meta-op is used */ | |
| #define TokenStart 2 /* MUST be in 1 + EofToken */ | |
| #define EofToken 1 /* Always predefined to be 1 */ | |
| #ifndef MaxNumFiles | |
| #define MaxNumFiles 99 | |
| #endif | |
| /**** MR9 JVincent@novell.com Move to pcctscfg.h */ | |
| /**** #define MaxFileName 300 ****/ /* MR9 Move to pcctscfg.h */ /* largest file name size */ | |
| #define MaxRuleName 100 /* largest rule name size */ | |
| #define TSChunk 100 /* how much to expand TokenStr/ExprStr each time */ | |
| #define TIChunk TSChunk /* expand TokenInd by same as TokenStr to mirror them */ | |
| #define FoStackSize 100 /* deepest FOLLOW recursion possible */ | |
| #define MaxClassDeclStuff 256 /* MR10 */ | |
| #define NumPredefinedSignals 3 | |
| /* S t a n d a r d S i g n a l s */ | |
| #define sigNoSignal 0 | |
| #define sigMismatchedToken 1 | |
| #define sigNoViableAlt 2 | |
| #define sigNoSemViableAlt 3 | |
| /* AST token types */ | |
| #define ASTexclude 0 | |
| #define ASTchild 1 | |
| #define ASTroot 2 | |
| #define ASTinclude 3 /* include subtree made by rule ref */ | |
| #define PredictionVariable "zzpr_expr" | |
| #define PredictionLexClassSuffix "_zzpred" | |
| #define WildCardString "WildCard" | |
| #if 0 | |
| /* Removed in version 1.33MR19 | |
| Don't understand why this never caused problems before | |
| */ | |
| /********************************************************* | |
| #ifndef ANTLRm | |
| #define ANTLRm(st, f, _m) zzbufsize = ZZLEXBUFSIZE;\ | |
| zzmode(_m); \ | |
| zzenterANTLR(f); \ | |
| st; ++zzasp; \ | |
| zzleaveANTLR(f); | |
| #endif | |
| *********************************************************/ | |
| #endif | |
| #include "proto.h" | |
| #include "pcctscfg.h" /* MR14 */ | |
| #include <string.h> |