generic.h
上传用户:itx_2006
上传日期:2007-01-06
资源大小:493k
文件大小:8k
源码类别:

编译器/解释器

开发平台:

Others

  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-1998
  29.  */
  30. #define StrSame 0
  31. #define DefaultParserName "zzparser"
  32. /* MR9  JVincent@novell.com     Allow user to override default ZZLEXBUFSIZE  */
  33. /* MR11 thm                     Raise antlr's own default ZZLEXBUFSIZE to 8k */
  34. #ifndef ZZLEXBUFSIZE
  35. #define ZZLEXBUFSIZE 8000
  36. #endif
  37. /* Tree/FIRST/FOLLOW defines -- valid only after all grammar has been read */
  38. #define ALT TokenNum+1
  39. #define SET TokenNum+2
  40. #define TREE_REF TokenNum+3
  41. /* E r r o r  M a c r o s */
  42. #define fatal(err) fatalFL(err, __FILE__, __LINE__)
  43. #define fatal_internal(err) fatal_intern(err, __FILE__, __LINE__)
  44. #define eMsg1(s,a) eMsg3(s,a,NULL,NULL)
  45. #define eMsg2(s,a,b) eMsg3(s,a,b,NULL)
  46. /* S a n i t y  C h e c k i n g */
  47. #ifndef require
  48. #define require(expr, err) {if ( !(expr) ) fatal_internal(err);}
  49. #endif
  50. /* L i s t  N o d e s */
  51. typedef struct _ListNode {
  52. void *elem; /* pointer to any kind of element */
  53. struct _ListNode *next;
  54. } ListNode;
  55. /* Define a Cycle node which is used to track lists of cycles for later
  56.  * reconciliation by ResolveFoCycles().
  57.  */
  58. typedef struct _c {
  59. int croot; /* cycle root */
  60. set cyclicDep; /* cyclic dependents */
  61. unsigned deg; /* degree of FOLLOW set of croot */
  62. } Cycle;
  63. typedef struct _e {
  64. int tok; /* error class name == TokenStr[tok] */
  65. ListNode *elist; /* linked list of elements in error set */
  66. set eset;
  67. int setdeg; /* how big is the set */
  68. int lexclass; /* which lex class is it in? */
  69. } ECnode;
  70. typedef struct _TCnode {
  71. int tok; /* token class name */
  72. ListNode *tlist; /* linked list of elements in token set */
  73. set tset;
  74. int lexclass; /* which lex class is it in? */
  75. unsigned char dumped; /* this def has been been dumped */
  76. unsigned setnum; /* which set number is this guy? (if dumped) */
  77. } TCnode;
  78. typedef struct _ft {
  79. char *token; /* id of token type to remap */
  80. int tnum; /* move token type to which token position */
  81. } ForcedToken;
  82. typedef struct _ContextGuardPredicates {    /* MR13 */
  83.             Predicate *pred;                /* MR13 */
  84.         } ContextGuardPredicates;           /* MR13 */
  85. #define newListNode (ListNode *) calloc(1, sizeof(ListNode));
  86. #define newCycle (Cycle *) calloc(1, sizeof(Cycle));
  87. #define newECnode (ECnode *) calloc(1, sizeof(ECnode));
  88. #define newTCnode (TCnode *) calloc(1, sizeof(TCnode));
  89. /* H a s h  T a b l e  E n t r i e s */
  90. typedef struct _t { /* Token name or expression */
  91. char *str;
  92. struct _t *next;
  93. int token; /* token number */
  94. unsigned char classname; /* is it a err/tok class name or token */
  95. TCnode *tclass; /* ptr to token class */
  96. char *action;
  97.             char *akaString;
  98. } TermEntry;
  99. typedef struct _r { /* Rule name and ptr to start of rule */
  100. char *str;
  101. struct _t *next;
  102. int rulenum; /* RulePtr[rulenum]== ptr to RuleBlk junction */
  103. unsigned char noAST;/* gen AST construction code? (def==gen code) */
  104. char *egroup; /* which error group (err reporting stuff) */
  105. ListNode *el_labels;/* list of element labels ref in all of rule */
  106.             unsigned char has_rule_exception;
  107.             char dontComputeErrorSet;    /* MR14 - don't compute error set
  108.                                           special for rule in alpha part of
  109.                                           (alpha)? beta block */
  110. } RuleEntry;
  111. typedef struct _f { /* cache Fi/Fo set */
  112. char *str; /* key == (rulename, computation, k) */
  113. struct _f *next;
  114. set fset; /* First/Follow of rule */
  115. set rk; /* set of k's remaining to be done after ruleref */
  116. int incomplete; /* only w/FOLLOW sets.  Use only if complete */
  117. } CacheEntry;
  118. typedef struct _LabelEntry { /* element labels */
  119. char *str;
  120. struct _f *next;
  121. Node *elem; /* which element does it point to? */
  122. ExceptionGroup *ex_group;
  123. /* Is there an exception attached to label? */
  124.             ExceptionGroup *outerEG;                                 /* MR7 */
  125.                                 /* next EG if ex_group doesn't catch it MR7 */
  126.             struct _LabelEntry  *pendingLink;                        /* MR7 */
  127.                                 /* too lazy to use ListNode ?           MR7 */
  128.             int     curAltNum;                                       /* MR7 */
  129. } LabelEntry;
  130. typedef struct _SignalEntry {
  131. char *str;
  132. struct _f *next;
  133. int signum; /* unique signal number */
  134. } SignalEntry;
  135. typedef struct _PredEntry { /* MR11 predicate name and ptr to string */
  136. char              *str;
  137.             struct _PredEntry *next;
  138.             int               file;
  139.             int               line;
  140.             Predicate         *pred;
  141.             char              *predLiteral;
  142. } PredEntry;
  143. typedef struct _PointerStack {      /* MR10 */
  144.         int     count;
  145.         int     size;
  146.         void    **data;
  147.         } PointerStack;
  148. #define newTermEntry(s) (TermEntry *) newEntry(s, sizeof(TermEntry))
  149. #define newRuleEntry(s) (RuleEntry *) newEntry(s, sizeof(RuleEntry))
  150. #define newCacheEntry(s) (CacheEntry *) newEntry(s, sizeof(CacheEntry))
  151. #define newLabelEntry(s) (LabelEntry *) newEntry(s, sizeof(LabelEntry))
  152. #define newSignalEntry(s) (SignalEntry *) newEntry(s, sizeof(SignalEntry))
  153. #define newPredEntry(s)     (PredEntry *) newEntry(s,sizeof(PredEntry))
  154. typedef struct _UserAction {
  155. char *action;
  156. int file, line;
  157. } UserAction;
  158. /* L e x i c a l  C l a s s */
  159. /* to switch lex classes, switch ExprStr and Texpr (hash table) */
  160. typedef struct _lc {
  161. char *classnum, **exprs;
  162. Entry **htable;
  163. } LClass;
  164. typedef struct _exprOrder {
  165. char *expr;
  166. int lclass;
  167. } Expr;
  168. typedef Graph Attrib;
  169. /* M a x i m u m s */
  170. #ifndef HashTableSize
  171. #define HashTableSize 253
  172. #endif
  173. #ifndef StrTableSize
  174. #define StrTableSize 15000 /* all tokens, nonterminals, rexprs stored here */
  175. #endif
  176. #define MaxLexClasses 50 /* how many automatons */
  177. /* TokenStart and EofToken are ignored if #tokdefs meta-op is used */
  178. #define TokenStart 2 /* MUST be in 1 + EofToken */
  179. #define EofToken 1 /* Always predefined to be 1 */
  180. #ifndef MaxNumFiles
  181. #define MaxNumFiles 99
  182. #endif
  183. /**** MR9 JVincent@novell.com  Move to pcctscfg.h */
  184. /**** #define MaxFileName 300 ****/ /* MR9  Move to pcctscfg.h */ /* largest file name size */
  185. #define MaxRuleName 100 /* largest rule name size */
  186. #define TSChunk 100 /* how much to expand TokenStr/ExprStr each time */
  187. #define TIChunk TSChunk /* expand TokenInd by same as TokenStr to mirror them */
  188. #define FoStackSize 100 /* deepest FOLLOW recursion possible */
  189. #define MaxClassDeclStuff   256    /* MR10 */
  190. #define NumPredefinedSignals 3
  191.            /* S t a n d a r d  S i g n a l s */
  192. #define sigNoSignal 0
  193. #define sigMismatchedToken 1
  194. #define sigNoViableAlt 2
  195. #define sigNoSemViableAlt 3
  196. /* AST token types */
  197. #define ASTexclude 0
  198. #define ASTchild 1
  199. #define ASTroot 2
  200. #define ASTinclude 3 /* include subtree made by rule ref */
  201. #define PredictionVariable "zzpr_expr"
  202. #define PredictionLexClassSuffix "_zzpred"
  203. #define WildCardString "WildCard"
  204. #ifndef ANTLRm
  205. #define ANTLRm(st, f, _m) zzbufsize = ZZLEXBUFSIZE;
  206. zzmode(_m);
  207. zzenterANTLR(f);
  208. st; ++zzasp;
  209. zzleaveANTLR(f);
  210. #endif
  211. #include "proto.h"
  212. #include "pcctscfg.h"   /* MR14 */
  213. #include <string.h>