5 typedef int ItemSetNum;
6 typedef int OperatorNum;
7 typedef int NonTerminalNum;
12 extern NonTerminalNum last_user_nonterminal;
13 extern NonTerminalNum max_nonterminal;
14 extern RuleNum max_rule;
15 extern ERuleNum max_erule_num;
26 typedef short DeltaCost[DELTAWIDTH];
27 typedef short *DeltaPtr;
28 extern void ASSIGNCOST ARGS((DeltaPtr, DeltaPtr));
29 extern void ADDCOST ARGS((DeltaPtr, DeltaPtr));
30 extern void MINUSCOST ARGS((DeltaPtr, DeltaPtr));
31 extern void ZEROCOST ARGS((DeltaPtr));
32 extern int LESSCOST ARGS((DeltaPtr, DeltaPtr));
33 extern int EQUALCOST ARGS((DeltaPtr, DeltaPtr));
34 #define PRINCIPLECOST(x) (x[0])
37 typedef int DeltaCost;
39 #define ASSIGNCOST(l, r) ((l) = (r))
40 #define ADDCOST(l, r) ((l) += (r))
41 #define MINUSCOST(l, r) ((l) -= (r))
42 #define ZEROCOST(x) ((x) = 0)
43 #define LESSCOST(l, r) ((l) < (r))
44 #define EQUALCOST(l, r) ((l) == (r))
45 #define PRINCIPLECOST(x) (x)
47 #define NODIVERGE(c,state,nt,base) if (prevent_divergence > 0) CHECKDIVERGE(c,state,nt,base);
53 typedef struct list *List;
59 typedef struct intlist *IntList;
66 ItemSetNum stateCount;
70 typedef struct operator *Operator;
77 struct plankMap *pmap;
79 struct rule *sampleRule; /* diagnostic---gives "a" rule that with this lhs */
81 typedef struct nonterminal *NonTerminal;
84 NonTerminal normalizer;
85 Operator op; /* NULL if NonTerm -> NonTerm */
86 NonTerminal children[MAX_ARITY];
88 typedef struct pattern *Pattern;
99 typedef struct rule *Rule;
105 typedef struct item Item;
107 typedef short *Relevant; /* relevant non-terminals */
109 typedef Item *ItemArray;
111 struct item_set { /* indexed by NonTerminal */
115 struct item_set *kids[2];
116 struct item_set *representative;
121 typedef struct item_set *Item_Set;
123 #define DIM_MAP_SIZE (1 << 8)
124 #define GLOBAL_MAP_SIZE (1 << 15)
126 struct mapping { /* should be a hash table for TS -> int */
131 Item_Set *set; /* map: int <-> Item_Set */
133 typedef struct mapping *Mapping;
139 typedef struct index_map Index_Map;
146 struct plankMap *pmap;
148 typedef struct dimension *Dimension;
155 Dimension dimen[MAX_ARITY]; /* 1 for each dimension */
156 Item_Set *transition; /* maps local indices to global
159 typedef struct table *Table;
164 NonTerminalNum nextchain;
169 typedef struct relation *Relation;
175 typedef struct queue *Queue;
182 typedef struct plank *Plank;
188 typedef struct except *Exception;
193 struct stateMap *values;
195 typedef struct plankMap *PlankMap;
203 typedef struct stateMap *StateMap;
205 struct stateMapTable {
209 extern void CHECKDIVERGE ARGS((DeltaPtr, Item_Set, int, int));
210 extern void zero ARGS((Item_Set));
211 extern ItemArray newItemArray ARGS((void));
212 extern ItemArray itemArrayCopy ARGS((ItemArray));
213 extern Item_Set newItem_Set ARGS((Relevant));
214 extern void freeItem_Set ARGS((Item_Set));
215 extern Mapping newMapping ARGS((int));
216 extern NonTerminal newNonTerminal ARGS((char *));
217 extern int nonTerminalName ARGS((char *, int));
218 extern Operator newOperator ARGS((char *, OperatorNum, ArityNum));
219 extern Pattern newPattern ARGS((Operator));
220 extern Rule newRule ARGS((DeltaPtr, ERuleNum, NonTerminal, Pattern));
221 extern List newList ARGS((void *, List));
222 extern IntList newIntList ARGS((int, IntList));
223 extern int length ARGS((List));
224 extern List appendList ARGS((void *, List));
225 extern Table newTable ARGS((Operator));
226 extern Queue newQ ARGS((void));
227 extern void addQ ARGS((Queue, Item_Set));
228 extern Item_Set popQ ARGS((Queue));
229 extern int equivSet ARGS((Item_Set, Item_Set));
230 extern Item_Set decode ARGS((Mapping, ItemSetNum));
231 extern Item_Set encode ARGS((Mapping, Item_Set, int *));
232 extern void build ARGS((void));
233 extern Item_Set *transLval ARGS((Table, int, int));
235 typedef void * (*ListFn) ARGS((void *));
236 extern void foreachList ARGS((ListFn, List));
237 extern void reveachList ARGS((ListFn, List));
239 extern void addToTable ARGS((Table, Item_Set));
241 extern void closure ARGS((Item_Set));
242 extern void trim ARGS((Item_Set));
243 extern void findChainRules ARGS((void));
244 extern void findAllPairs ARGS((void));
245 extern void addRelevant ARGS((Relevant, NonTerminalNum));
247 extern void *zalloc ARGS((unsigned int));
248 extern void zfree ARGS((void *));
250 extern NonTerminal start;
252 extern List chainrules;
253 extern List operators;
255 extern List nonterminals;
256 extern List grammarNts;
257 extern Queue globalQ;
258 extern Mapping globalMap;
259 extern int exceptionTolerance;
260 extern int prevent_divergence;
261 extern int principleCost;
263 extern struct rule stub_rule;
264 extern Relation *allpairs;
265 extern Item_Set *sortedStates;
266 extern Item_Set errorState;
268 extern void dumpRelevant ARGS((Relevant));
269 extern void dumpOperator ARGS((Operator, int));
270 extern void dumpOperator_s ARGS((Operator));
271 extern void dumpOperator_l ARGS((Operator));
272 extern void dumpNonTerminal ARGS((NonTerminal));
273 extern void dumpRule ARGS((Rule));
274 extern void dumpRuleList ARGS((List));
275 extern void dumpItem ARGS((Item *));
276 extern void dumpItem_Set ARGS((Item_Set));
277 extern void dumpMapping ARGS((Mapping));
278 extern void dumpQ ARGS((Queue));
279 extern void dumpIndex_Map ARGS((Index_Map *));
280 extern void dumpDimension ARGS((Dimension));
281 extern void dumpPattern ARGS((Pattern));
282 extern void dumpTable ARGS((Table, int));
283 extern void dumpTransition ARGS((Table));
284 extern void dumpCost ARGS((DeltaCost));
285 extern void dumpAllPairs ARGS((void));
286 extern void dumpRelation ARGS((Relation));
287 extern void dumpSortedStates ARGS((void));
288 extern void dumpSortedRules ARGS((void));
289 extern int debugTrim;
292 #define debug(a,b) if (a) b
296 extern int debugTables;
299 #define STATES_INCR 64
302 #define assert(c) ((void) 0)
304 #define assert(c) ((void) ((c) || fatal(__FILE__,__LINE__)))
307 extern void doStart ARGS((char *));
308 extern void exit ARGS((int));
309 extern int fatal ARGS((const char *, int));
310 extern void yyerror ARGS((const char *));
311 extern void yyerror1 ARGS((const char *));