1 /* 2 * generic.h -- generic include stuff for new PCCTS ANTLR. 3 * 4 * SOFTWARE RIGHTS 5 * 6 * We reserve no LEGAL rights to the Purdue Compiler Construction Tool 7 * Set (PCCTS) -- PCCTS is in the public domain. An individual or 8 * company may do whatever they wish with source code distributed with 9 * PCCTS or the code generated by PCCTS, including the incorporation of 10 * PCCTS, or its output, into commerical software. 11 * 12 * We encourage users to develop software with PCCTS. However, we do ask 13 * that credit is given to us for developing PCCTS. By "credit", 14 * we mean that if you incorporate our source code into one of your 15 * programs (commercial product, research project, or otherwise) that you 16 * acknowledge this fact somewhere in the documentation, research report, 17 * etc... If you like PCCTS and have developed a nice tool with the 18 * output, please mention that you developed it using PCCTS. In 19 * addition, we ask that this header remain intact in our source code. 20 * As long as these guidelines are kept, we expect to continue enhancing 21 * this system and expect to make other tools available as they are 22 * completed. 23 * 24 * ANTLR 1.33 25 * Terence Parr 26 * Parr Research Corporation 27 * with Purdue University and AHPCRC, University of Minnesota 28 * 1989-2001 29 */ 30 31 #define StrSame 0 32 33 #define DefaultParserName "zzparser" 34 35 /* MR9 JVincent (at) novell.com Allow user to override default ZZLEXBUFSIZE */ 36 /* MR11 thm Raise antlr's own default ZZLEXBUFSIZE to 8k */ 37 /* MR22 thm Raise antlr's own default ZZLEXBUFSIZE to 32k */ 38 39 #ifndef ZZLEXBUFSIZE 40 #define ZZLEXBUFSIZE 32000 41 #endif 42 43 /* Tree/FIRST/FOLLOW defines -- valid only after all grammar has been read */ 44 #define ALT TokenNum+1 45 #define SET TokenNum+2 46 #define TREE_REF TokenNum+3 47 48 /* E r r o r M a c r o s */ 49 50 #define fatal(err) fatalFL(err, __FILE__, __LINE__) 51 #define fatal_internal(err) fatal_intern(err, __FILE__, __LINE__) 52 53 54 #define eMsg1(s,a) eMsg3(s,a,NULL,NULL) 55 #define eMsg2(s,a,b) eMsg3(s,a,b,NULL) 56 57 /* S a n i t y C h e c k i n g */ 58 59 #ifndef require 60 #define require(expr, err) {if ( !(expr) ) fatal_internal(err);} 61 #endif 62 63 /* L i s t N o d e s */ 64 65 typedef struct _ListNode { 66 void *elem; /* pointer to any kind of element */ 67 struct _ListNode *next; 68 } ListNode; 69 70 /* Define a Cycle node which is used to track lists of cycles for later 71 * reconciliation by ResolveFoCycles(). 72 */ 73 typedef struct _c { 74 int croot; /* cycle root */ 75 set cyclicDep; /* cyclic dependents */ 76 unsigned deg; /* degree of FOLLOW set of croot */ 77 } Cycle; 78 79 typedef struct _e { 80 int tok; /* error class name == TokenStr[tok] */ 81 ListNode *elist; /* linked list of elements in error set */ 82 set eset; 83 int setdeg; /* how big is the set */ 84 int lexclass; /* which lex class is it in? */ 85 } ECnode; 86 87 typedef struct _TCnode { 88 int tok; /* token class name */ 89 ListNode *tlist; /* linked list of elements in token set */ 90 set tset; 91 int lexclass; /* which lex class is it in? */ 92 unsigned char dumped; /* this def has been been dumped */ 93 unsigned char dumpedComplement; /* this def has been been dumped */ 94 unsigned setnum; /* which set number is this guy? (if dumped) */ 95 unsigned setnumComplement; /* MR23 */ 96 unsigned setnumErrSet; /* MR23 which set is this #tokclass error set (if dumped) */ 97 unsigned setnumErrSetComplement; /* MR23 */ 98 } TCnode; 99 100 typedef struct _ft { 101 char *token; /* id of token type to remap */ 102 int tnum; /* move token type to which token position */ 103 } ForcedToken; 104 105 typedef struct _ContextGuardPredicates { /* MR13 */ 106 Predicate *pred; /* MR13 */ 107 } ContextGuardPredicates; /* MR13 */ 108 109 #define newListNode (ListNode *) calloc(1, sizeof(ListNode)); 110 #define newCycle (Cycle *) calloc(1, sizeof(Cycle)); 111 #define newECnode (ECnode *) calloc(1, sizeof(ECnode)); 112 #define newTCnode (TCnode *) calloc(1, sizeof(TCnode)); 113 114 115 /* H a s h T a b l e E n t r i e s */ 116 117 typedef struct _t { /* Token name or expression */ 118 char *str; 119 struct _t *next; 120 int token; /* token number */ 121 unsigned char classname; /* is it a err/tok class name or token */ 122 TCnode *tclass; /* ptr to token class */ 123 char *action; 124 char *akaString; 125 } TermEntry; 126 127 typedef struct _r { /* Rule name and ptr to start of rule */ 128 char *str; 129 struct _t *next; 130 int rulenum; /* RulePtr[rulenum]== ptr to RuleBlk junction */ 131 unsigned char noAST;/* gen AST construction code? (def==gen code) */ 132 char *egroup; /* which error group (err reporting stuff) */ 133 #if 0 134 /* MR27 This appears to never be used. Delete this code later. */ 135 136 ListNode *el_labels;/* list of element labels ref in all of rule */ 137 #endif 138 ListNode *ast_labels_in_actions; /* MR27 */ 139 unsigned char has_rule_exception; 140 char dontComputeErrorSet; /* MR14 - don't compute error set 141 special for rule in alpha part of 142 (alpha)? beta block */ 143 } RuleEntry; 144 145 typedef struct _f { /* cache Fi/Fo set */ 146 char *str; /* key == (rulename, computation, k) */ 147 struct _f *next; 148 set fset; /* First/Follow of rule */ 149 set rk; /* set of k's remaining to be done after ruleref */ 150 int incomplete; /* only w/FOLLOW sets. Use only if complete */ 151 } CacheEntry; 152 153 typedef struct _LabelEntry { /* element labels */ 154 char *str; 155 struct _f *next; 156 Node *elem; /* which element does it point to? */ 157 ExceptionGroup *ex_group; 158 /* Is there an exception attached to label? */ 159 ExceptionGroup *outerEG; /* MR7 */ 160 /* next EG if ex_group doesn't catch it MR7 */ 161 struct _LabelEntry *pendingLink; /* MR7 */ 162 /* too lazy to use ListNode ? MR7 */ 163 int curAltNum; /* MR7 */ 164 } LabelEntry; 165 166 typedef struct _SignalEntry { 167 char *str; 168 struct _f *next; 169 int signum; /* unique signal number */ 170 } SignalEntry; 171 172 typedef struct _PredEntry { /* MR11 predicate name and ptr to string */ 173 char *str; 174 struct _PredEntry *next; 175 int file; 176 int line; 177 Predicate *pred; 178 char *predLiteral; 179 } PredEntry; 180 181 typedef struct _PointerStack { /* MR10 */ 182 int count; 183 int size; 184 void **data; 185 } PointerStack; 186 187 #define newTermEntry(s) (TermEntry *) newEntry(s, sizeof(TermEntry)) 188 #define newRuleEntry(s) (RuleEntry *) newEntry(s, sizeof(RuleEntry)) 189 #define newCacheEntry(s) (CacheEntry *) newEntry(s, sizeof(CacheEntry)) 190 #define newLabelEntry(s) (LabelEntry *) newEntry(s, sizeof(LabelEntry)) 191 #define newSignalEntry(s) (SignalEntry *) newEntry(s, sizeof(SignalEntry)) 192 #define newPredEntry(s) (PredEntry *) newEntry(s,sizeof(PredEntry)) 193 194 typedef struct _UserAction { 195 char *action; 196 int file, line; 197 } UserAction; 198 199 200 /* L e x i c a l C l a s s */ 201 202 /* to switch lex classes, switch ExprStr and Texpr (hash table) */ 203 typedef struct _lc { 204 char *classnum, **exprs; 205 Entry **htable; 206 } LClass; 207 208 typedef struct _exprOrder { 209 char *expr; 210 int lclass; 211 } Expr; 212 213 214 typedef Graph Attrib; 215 216 /* M a x i m u m s */ 217 218 /* MR20 Note G. Hobbelt These values are superceded by values in hash.h */ 219 220 #ifndef HashTableSize 221 #define HashTableSize 253 222 #endif 223 #ifndef StrTableSize 224 #define StrTableSize 15000 /* all tokens, nonterminals, rexprs stored here */ 225 #endif 226 #define MaxLexClasses 50 /* how many automatons */ 227 /* TokenStart and EofToken are ignored if #tokdefs meta-op is used */ 228 #define TokenStart 2 /* MUST be in 1 + EofToken */ 229 #define EofToken 1 /* Always predefined to be 1 */ 230 231 #ifndef MaxNumFiles 232 #define MaxNumFiles 99 233 #endif 234 235 /**** MR9 JVincent (at) novell.com Move to pcctscfg.h */ 236 /**** #define MaxFileName 300 ****/ /* MR9 Move to pcctscfg.h */ /* largest file name size */ 237 238 #define MaxRuleName 100 /* largest rule name size */ 239 #define TSChunk 100 /* how much to expand TokenStr/ExprStr each time */ 240 #define TIChunk TSChunk /* expand TokenInd by same as TokenStr to mirror them */ 241 #define FoStackSize 100 /* deepest FOLLOW recursion possible */ 242 243 #define MaxClassDeclStuff 256 /* MR10 */ 244 245 #define NumPredefinedSignals 3 246 247 /* S t a n d a r d S i g n a l s */ 248 249 #define sigNoSignal 0 250 #define sigMismatchedToken 1 251 #define sigNoViableAlt 2 252 #define sigNoSemViableAlt 3 253 254 255 256 /* AST token types */ 257 #define ASTexclude 0 258 #define ASTchild 1 259 #define ASTroot 2 260 #define ASTinclude 3 /* include subtree made by rule ref */ 261 262 263 #define PredictionVariable "zzpr_expr" 264 #define PredictionLexClassSuffix "_zzpred" 265 266 #define WildCardString "WildCard" 267 268 #if 0 269 /* Removed in version 1.33MR19 270 Don't understand why this never caused problems before 271 */ 272 273 /********************************************************* 274 #ifndef ANTLRm 275 #define ANTLRm(st, f, _m) zzbufsize = ZZLEXBUFSIZE;\ 276 zzmode(_m); \ 277 zzenterANTLR(f); \ 278 st; ++zzasp; \ 279 zzleaveANTLR(f); 280 #endif 281 *********************************************************/ 282 #endif 283 284 #include "proto.h" 285 #include "pcctscfg.h" /* MR14 */ 286 #include <string.h> 287