]>
Commit | Line | Data |
---|---|---|
30fdf114 LG |
1 | /*\r |
2 | * A n t l r T r a n s l a t i o n H e a d e r\r | |
3 | *\r | |
4 | * Terence Parr, Will Cohen, and Hank Dietz: 1989-2001\r | |
5 | * Purdue University Electrical Engineering\r | |
6 | * With AHPCRC, University of Minnesota\r | |
7 | * ANTLR Version 1.33MR33\r | |
8 | *\r | |
9 | * ..\bin\antlr dlg_p.g -gh\r | |
10 | *\r | |
11 | */\r | |
12 | \r | |
13 | #define ANTLR_VERSION 13333\r | |
14 | #include "pcctscfg.h"\r | |
15 | #include "pccts_stdio.h"\r | |
16 | \r | |
17 | #include <ctype.h>\r | |
18 | #include "dlg.h"\r | |
19 | #define zzSET_SIZE 8\r | |
20 | #include "antlr.h"\r | |
21 | #include "tokens.h"\r | |
22 | #include "dlgdef.h"\r | |
23 | #include "mode.h"\r | |
24 | \r | |
25 | /* MR23 In order to remove calls to PURIFY use the antlr -nopurify option */\r | |
26 | \r | |
27 | #ifndef PCCTS_PURIFY\r | |
28 | #define PCCTS_PURIFY(r,s) memset((char *) &(r),'\0',(s));\r | |
29 | #endif\r | |
30 | \r | |
31 | ANTLR_INFO\r | |
32 | \r | |
33 | \r | |
34 | /* MR20 G. Hobbelt \r | |
35 | Fix for Borland C++ 4.x & 5.x compiling with ALL warnings enabled\r | |
36 | */\r | |
37 | \r | |
38 | #ifdef __TURBOC__\r | |
39 | #pragma warn -aus /* unused assignment of 'xxx' */\r | |
40 | #endif\r | |
41 | \r | |
4e97974c | 42 | #pragma clang diagnostic ignored "-Wparentheses-equality"\r |
43 | \r | |
99e55970 | 44 | int action_no = 0; /* keep track of actions outputted */\r |
30fdf114 LG |
45 | int nfa_allocated = 0; /* keeps track of number of nfa nodes */\r |
46 | nfa_node **nfa_array = NULL;/* root of binary tree that stores nfa array */\r | |
47 | nfa_node nfa_model_node; /* model to initialize new nodes */\r | |
48 | set used_chars; /* used to label trans. arcs */\r | |
49 | set used_classes; /* classes or chars used to label trans. arcs */\r | |
50 | set normal_chars; /* mask to get rid elements that aren't used\r | |
51 | in set */\r | |
52 | int flag_paren = FALSE;\r | |
53 | int flag_brace = FALSE;\r | |
54 | int mode_counter = 0; /* keep track of number of %%names */\r | |
55 | \r | |
56 | \r | |
57 | \r | |
58 | void\r | |
59 | #ifdef __USE_PROTOS\r | |
60 | grammar(void)\r | |
61 | #else\r | |
62 | grammar()\r | |
63 | #endif\r | |
64 | {\r | |
65 | zzRULE;\r | |
66 | zzBLOCK(zztasp1);\r | |
67 | zzMake0;\r | |
68 | {\r | |
69 | p_head(); p_class_hdr(); func_action = FALSE;\r | |
70 | {\r | |
71 | zzBLOCK(zztasp2);\r | |
72 | zzMake0;\r | |
73 | {\r | |
74 | while ( (setwd1[LA(1)]&0x1) ) {\r | |
75 | {\r | |
76 | zzBLOCK(zztasp3);\r | |
77 | zzMake0;\r | |
78 | {\r | |
79 | if ( (LA(1)==LEXACTION) ) {\r | |
80 | zzmatch(LEXACTION); zzCONSUME;\r | |
81 | }\r | |
82 | else {\r | |
83 | if ( (LA(1)==LEXMEMBER) ) {\r | |
84 | zzmatch(LEXMEMBER); zzCONSUME;\r | |
85 | }\r | |
86 | else {\r | |
87 | if ( (LA(1)==LEXPREFIX) ) {\r | |
88 | zzmatch(LEXPREFIX); zzCONSUME;\r | |
89 | }\r | |
90 | else {\r | |
91 | if ( (LA(1)==PARSERCLASS) ) {\r | |
92 | zzmatch(PARSERCLASS); zzCONSUME;\r | |
93 | }\r | |
94 | else {\r | |
95 | if ( (LA(1)==ACTION) ) {\r | |
96 | }\r | |
97 | else {zzFAIL(1,zzerr1,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}\r | |
98 | }\r | |
99 | }\r | |
100 | }\r | |
101 | }\r | |
102 | zzEXIT(zztasp3);\r | |
103 | }\r | |
104 | }\r | |
105 | zzmatch(ACTION); zzCONSUME;\r | |
106 | zzLOOP(zztasp2);\r | |
107 | }\r | |
108 | zzEXIT(zztasp2);\r | |
109 | }\r | |
110 | }\r | |
111 | if ( gen_cpp ) p_includes();\r | |
112 | start_states();\r | |
113 | func_action = FALSE; p_tables(); p_tail();\r | |
114 | {\r | |
115 | zzBLOCK(zztasp2);\r | |
116 | zzMake0;\r | |
117 | {\r | |
118 | while ( (LA(1)==ACTION) ) {\r | |
119 | zzmatch(ACTION); zzCONSUME;\r | |
120 | zzLOOP(zztasp2);\r | |
121 | }\r | |
122 | zzEXIT(zztasp2);\r | |
123 | }\r | |
124 | }\r | |
125 | zzmatch(1);\r | |
126 | if (firstLexMember != 0) p_class_def1();\r | |
127 | zzCONSUME;\r | |
128 | \r | |
129 | zzEXIT(zztasp1);\r | |
130 | return;\r | |
131 | fail:\r | |
132 | zzEXIT(zztasp1);\r | |
133 | zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);\r | |
134 | zzresynch(setwd1, 0x2);\r | |
135 | }\r | |
136 | }\r | |
137 | \r | |
138 | void\r | |
139 | #ifdef __USE_PROTOS\r | |
140 | start_states(void)\r | |
141 | #else\r | |
142 | start_states()\r | |
143 | #endif\r | |
144 | {\r | |
145 | zzRULE;\r | |
146 | zzBLOCK(zztasp1);\r | |
147 | zzMake0;\r | |
148 | {\r | |
149 | {\r | |
150 | zzBLOCK(zztasp2);\r | |
151 | zzMake0;\r | |
152 | {\r | |
153 | if ( (LA(1)==PER_PER) ) {\r | |
154 | zzmatch(PER_PER); zzCONSUME;\r | |
155 | do_conversion();\r | |
156 | }\r | |
157 | else {\r | |
158 | if ( (LA(1)==NAME_PER_PER) ) {\r | |
159 | zzmatch(NAME_PER_PER); zzCONSUME;\r | |
160 | do_conversion();\r | |
161 | {\r | |
162 | zzBLOCK(zztasp3);\r | |
163 | zzMake0;\r | |
164 | {\r | |
165 | while ( (LA(1)==NAME_PER_PER) ) {\r | |
166 | zzmatch(NAME_PER_PER); zzCONSUME;\r | |
167 | do_conversion();\r | |
168 | zzLOOP(zztasp3);\r | |
169 | }\r | |
170 | zzEXIT(zztasp3);\r | |
171 | }\r | |
172 | }\r | |
173 | }\r | |
174 | else {zzFAIL(1,zzerr2,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}\r | |
175 | }\r | |
176 | zzEXIT(zztasp2);\r | |
177 | }\r | |
178 | }\r | |
179 | zzmatch(PER_PER); zzCONSUME;\r | |
180 | zzEXIT(zztasp1);\r | |
181 | return;\r | |
182 | fail:\r | |
183 | zzEXIT(zztasp1);\r | |
184 | zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);\r | |
185 | zzresynch(setwd1, 0x4);\r | |
186 | }\r | |
187 | }\r | |
188 | \r | |
189 | void\r | |
190 | #ifdef __USE_PROTOS\r | |
191 | do_conversion(void)\r | |
192 | #else\r | |
193 | do_conversion()\r | |
194 | #endif\r | |
195 | {\r | |
196 | zzRULE;\r | |
197 | zzBLOCK(zztasp1);\r | |
198 | zzMake0;\r | |
199 | {\r | |
200 | new_automaton_mode(); func_action = TRUE;\r | |
201 | rule_list();\r | |
202 | \r | |
203 | dfa_class_nop[mode_counter] =\r | |
204 | relabel(zzaArg(zztasp1,1 ).l,comp_level);\r | |
205 | if (comp_level)\r | |
206 | p_shift_table(mode_counter);\r | |
207 | dfa_basep[mode_counter] = dfa_allocated+1;\r | |
208 | make_dfa_model_node(dfa_class_nop[mode_counter]);\r | |
209 | nfa_to_dfa(zzaArg(zztasp1,1 ).l);\r | |
210 | ++mode_counter;\r | |
211 | func_action = FALSE;\r | |
212 | #ifdef HASH_STAT\r | |
213 | fprint_hash_stats(stderr);\r | |
214 | #endif\r | |
215 | zzEXIT(zztasp1);\r | |
216 | return;\r | |
217 | fail:\r | |
218 | zzEXIT(zztasp1);\r | |
219 | zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);\r | |
220 | zzresynch(setwd1, 0x8);\r | |
221 | }\r | |
222 | }\r | |
223 | \r | |
224 | void\r | |
225 | #ifdef __USE_PROTOS\r | |
226 | rule_list(void)\r | |
227 | #else\r | |
228 | rule_list()\r | |
229 | #endif\r | |
230 | {\r | |
231 | zzRULE;\r | |
232 | zzBLOCK(zztasp1);\r | |
233 | zzMake0;\r | |
234 | {\r | |
235 | if ( (setwd1[LA(1)]&0x10) ) {\r | |
236 | rule();\r | |
237 | zzaRet.l=zzaArg(zztasp1,1 ).l; zzaRet.r=zzaArg(zztasp1,1 ).r;\r | |
238 | {\r | |
239 | zzBLOCK(zztasp2);\r | |
240 | zzMake0;\r | |
241 | {\r | |
242 | while ( (setwd1[LA(1)]&0x20) ) {\r | |
243 | rule();\r | |
244 | {nfa_node *t1;\r | |
245 | t1 = new_nfa_node();\r | |
246 | (t1)->trans[0]=zzaRet.l;\r | |
247 | (t1)->trans[1]=zzaArg(zztasp2,1 ).l;\r | |
248 | /* all accept nodes "dead ends" */\r | |
249 | zzaRet.l=t1; zzaRet.r=NULL;\r | |
250 | }\r | |
251 | zzLOOP(zztasp2);\r | |
252 | }\r | |
253 | zzEXIT(zztasp2);\r | |
254 | }\r | |
255 | }\r | |
256 | }\r | |
257 | else {\r | |
258 | if ( (setwd1[LA(1)]&0x40) ) {\r | |
259 | zzaRet.l = new_nfa_node(); zzaRet.r = NULL;\r | |
260 | warning("no regular expressions", zzline);\r | |
261 | }\r | |
262 | else {zzFAIL(1,zzerr3,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}\r | |
263 | }\r | |
264 | zzEXIT(zztasp1);\r | |
265 | return;\r | |
266 | fail:\r | |
267 | zzEXIT(zztasp1);\r | |
268 | zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);\r | |
269 | zzresynch(setwd1, 0x80);\r | |
270 | }\r | |
271 | }\r | |
272 | \r | |
273 | void\r | |
274 | #ifdef __USE_PROTOS\r | |
275 | rule(void)\r | |
276 | #else\r | |
277 | rule()\r | |
278 | #endif\r | |
279 | {\r | |
280 | zzRULE;\r | |
281 | zzBLOCK(zztasp1);\r | |
282 | zzMake0;\r | |
283 | {\r | |
284 | if ( (setwd2[LA(1)]&0x1) ) {\r | |
285 | reg_expr();\r | |
286 | zzmatch(ACTION);\r | |
287 | if (zzaArg(zztasp1,1 ).r != NULL) {\r | |
288 | zzaRet.l=zzaArg(zztasp1,1 ).l; zzaRet.r=zzaArg(zztasp1,1 ).r; (zzaArg(zztasp1,1 ).r)->accept=action_no;\r | |
289 | }\r | |
290 | zzCONSUME;\r | |
291 | \r | |
292 | }\r | |
293 | else {\r | |
294 | if ( (LA(1)==ACTION) ) {\r | |
295 | zzmatch(ACTION);\r | |
296 | zzaRet.l = NULL; zzaRet.r = NULL;\r | |
297 | error("no expression for action ", zzline);\r | |
298 | zzCONSUME;\r | |
299 | \r | |
300 | }\r | |
301 | else {zzFAIL(1,zzerr4,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}\r | |
302 | }\r | |
303 | zzEXIT(zztasp1);\r | |
304 | return;\r | |
305 | fail:\r | |
306 | zzEXIT(zztasp1);\r | |
307 | zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);\r | |
308 | zzresynch(setwd2, 0x2);\r | |
309 | }\r | |
310 | }\r | |
311 | \r | |
312 | void\r | |
313 | #ifdef __USE_PROTOS\r | |
314 | reg_expr(void)\r | |
315 | #else\r | |
316 | reg_expr()\r | |
317 | #endif\r | |
318 | {\r | |
319 | zzRULE;\r | |
320 | zzBLOCK(zztasp1);\r | |
321 | zzMake0;\r | |
322 | {\r | |
323 | and_expr();\r | |
324 | zzaRet.l=zzaArg(zztasp1,1 ).l; zzaRet.r=zzaArg(zztasp1,1 ).r;\r | |
325 | {\r | |
326 | zzBLOCK(zztasp2);\r | |
327 | zzMake0;\r | |
328 | {\r | |
329 | while ( (LA(1)==OR) ) {\r | |
330 | zzmatch(OR); zzCONSUME;\r | |
331 | and_expr();\r | |
332 | {nfa_node *t1, *t2;\r | |
333 | t1 = new_nfa_node(); t2 = new_nfa_node();\r | |
334 | (t1)->trans[0]=zzaRet.l;\r | |
335 | (t1)->trans[1]=zzaArg(zztasp2,2 ).l;\r | |
336 | /* MR23 */ if (zzaRet.r != NULL) (zzaRet.r)->trans[1]=t2;\r | |
337 | if (zzaArg(zztasp2,2 ).r) {\r | |
338 | (zzaArg(zztasp2,2 ).r)->trans[1]=t2; /* MR20 */\r | |
339 | }\r | |
340 | zzaRet.l=t1; zzaRet.r=t2;\r | |
341 | }\r | |
342 | zzLOOP(zztasp2);\r | |
343 | }\r | |
344 | zzEXIT(zztasp2);\r | |
345 | }\r | |
346 | }\r | |
347 | zzEXIT(zztasp1);\r | |
348 | return;\r | |
349 | fail:\r | |
350 | zzEXIT(zztasp1);\r | |
351 | zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);\r | |
352 | zzresynch(setwd2, 0x4);\r | |
353 | }\r | |
354 | }\r | |
355 | \r | |
356 | void\r | |
357 | #ifdef __USE_PROTOS\r | |
358 | and_expr(void)\r | |
359 | #else\r | |
360 | and_expr()\r | |
361 | #endif\r | |
362 | {\r | |
363 | zzRULE;\r | |
364 | zzBLOCK(zztasp1);\r | |
365 | zzMake0;\r | |
366 | {\r | |
367 | repeat_expr();\r | |
368 | \r | |
369 | zzaRet.l=zzaArg(zztasp1,1 ).l; zzaRet.r=zzaArg(zztasp1,1 ).r;\r | |
370 | {\r | |
371 | zzBLOCK(zztasp2);\r | |
372 | zzMake0;\r | |
373 | {\r | |
374 | while ( (setwd2[LA(1)]&0x8) ) {\r | |
375 | repeat_expr();\r | |
376 | if (zzaRet.r != NULL) {\r | |
377 | (zzaRet.r)->trans[1]=zzaArg(zztasp2,1 ).l;\r | |
378 | zzaRet.r=zzaArg(zztasp2,1 ).r;\r | |
379 | }\r | |
380 | zzLOOP(zztasp2);\r | |
381 | }\r | |
382 | zzEXIT(zztasp2);\r | |
383 | }\r | |
384 | }\r | |
385 | zzEXIT(zztasp1);\r | |
386 | return;\r | |
387 | fail:\r | |
388 | zzEXIT(zztasp1);\r | |
389 | zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);\r | |
390 | zzresynch(setwd2, 0x10);\r | |
391 | }\r | |
392 | }\r | |
393 | \r | |
394 | void\r | |
395 | #ifdef __USE_PROTOS\r | |
396 | repeat_expr(void)\r | |
397 | #else\r | |
398 | repeat_expr()\r | |
399 | #endif\r | |
400 | {\r | |
401 | zzRULE;\r | |
402 | zzBLOCK(zztasp1);\r | |
403 | zzMake0;\r | |
404 | {\r | |
405 | if ( (setwd2[LA(1)]&0x20) ) {\r | |
406 | expr();\r | |
407 | zzaRet.l=zzaArg(zztasp1,1 ).l; zzaRet.r=zzaArg(zztasp1,1 ).r;\r | |
408 | {\r | |
409 | zzBLOCK(zztasp2);\r | |
410 | zzMake0;\r | |
411 | {\r | |
412 | if ( (LA(1)==ZERO_MORE) ) {\r | |
413 | zzmatch(ZERO_MORE);\r | |
414 | { nfa_node *t1,*t2;\r | |
415 | /* MR23 */ if (zzaRet.r != NULL) (zzaRet.r)->trans[0] = zzaRet.l;\r | |
416 | t1 = new_nfa_node(); t2 = new_nfa_node();\r | |
417 | t1->trans[0]=zzaRet.l;\r | |
418 | t1->trans[1]=t2;\r | |
419 | /* MR23 */ if (zzaRet.r != NULL) (zzaRet.r)->trans[1]=t2;\r | |
420 | zzaRet.l=t1;zzaRet.r=t2;\r | |
421 | }\r | |
422 | zzCONSUME;\r | |
423 | \r | |
424 | }\r | |
425 | else {\r | |
426 | if ( (LA(1)==ONE_MORE) ) {\r | |
427 | zzmatch(ONE_MORE);\r | |
428 | if (zzaRet.r != NULL) (zzaRet.r)->trans[0] = zzaRet.l;\r | |
429 | zzCONSUME;\r | |
430 | \r | |
431 | }\r | |
432 | else {\r | |
433 | if ( (setwd2[LA(1)]&0x40) ) {\r | |
434 | }\r | |
435 | else {zzFAIL(1,zzerr5,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}\r | |
436 | }\r | |
437 | }\r | |
438 | zzEXIT(zztasp2);\r | |
439 | }\r | |
440 | }\r | |
441 | }\r | |
442 | else {\r | |
443 | if ( (LA(1)==ZERO_MORE) ) {\r | |
444 | zzmatch(ZERO_MORE);\r | |
445 | error("no expression for *", zzline);\r | |
446 | zzCONSUME;\r | |
447 | \r | |
448 | }\r | |
449 | else {\r | |
450 | if ( (LA(1)==ONE_MORE) ) {\r | |
451 | zzmatch(ONE_MORE);\r | |
452 | error("no expression for +", zzline);\r | |
453 | zzCONSUME;\r | |
454 | \r | |
455 | }\r | |
456 | else {zzFAIL(1,zzerr6,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}\r | |
457 | }\r | |
458 | }\r | |
459 | zzEXIT(zztasp1);\r | |
460 | return;\r | |
461 | fail:\r | |
462 | zzEXIT(zztasp1);\r | |
463 | zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);\r | |
464 | zzresynch(setwd2, 0x80);\r | |
465 | }\r | |
466 | }\r | |
467 | \r | |
468 | void\r | |
469 | #ifdef __USE_PROTOS\r | |
470 | expr(void)\r | |
471 | #else\r | |
472 | expr()\r | |
473 | #endif\r | |
474 | {\r | |
475 | zzRULE;\r | |
476 | zzBLOCK(zztasp1);\r | |
477 | zzMake0;\r | |
478 | {\r | |
479 | zzaRet.l = new_nfa_node();\r | |
480 | zzaRet.r = new_nfa_node();\r | |
481 | if ( (LA(1)==L_BRACK) ) {\r | |
482 | zzmatch(L_BRACK); zzCONSUME;\r | |
483 | atom_list();\r | |
484 | zzmatch(R_BRACK);\r | |
485 | \r | |
486 | /* MR23 */ if (zzaRet.l != NULL) {\r | |
487 | (zzaRet.l)->trans[0] = zzaRet.r;\r | |
488 | (zzaRet.l)->label = set_dup(zzaArg(zztasp1,2 ).label);\r | |
489 | set_orin(&used_chars,(zzaRet.l)->label);\r | |
490 | }\r | |
491 | zzCONSUME;\r | |
492 | \r | |
493 | }\r | |
494 | else {\r | |
495 | if ( (LA(1)==NOT) ) {\r | |
496 | zzmatch(NOT); zzCONSUME;\r | |
497 | zzmatch(L_BRACK); zzCONSUME;\r | |
498 | atom_list();\r | |
499 | zzmatch(R_BRACK);\r | |
500 | \r | |
501 | /* MR23 */ if (zzaRet.l != NULL) {\r | |
502 | (zzaRet.l)->trans[0] = zzaRet.r;\r | |
503 | (zzaRet.l)->label = set_dif(normal_chars,zzaArg(zztasp1,3 ).label);\r | |
504 | set_orin(&used_chars,(zzaRet.l)->label);\r | |
505 | }\r | |
506 | zzCONSUME;\r | |
507 | \r | |
508 | }\r | |
509 | else {\r | |
510 | if ( (LA(1)==L_PAR) ) {\r | |
511 | zzmatch(L_PAR); zzCONSUME;\r | |
512 | reg_expr();\r | |
513 | zzmatch(R_PAR);\r | |
514 | \r | |
515 | /* MR23 */ if (zzaRet.l != NULL) { \r | |
516 | (zzaRet.l)->trans[0] = zzaArg(zztasp1,2 ).l;\r | |
517 | if (zzaArg(zztasp1,2 ).r) {\r | |
518 | (zzaArg(zztasp1,2 ).r)->trans[1] = zzaRet.r; /* MR20 */\r | |
519 | }\r | |
520 | }\r | |
521 | zzCONSUME;\r | |
522 | \r | |
523 | }\r | |
524 | else {\r | |
525 | if ( (LA(1)==L_BRACE) ) {\r | |
526 | zzmatch(L_BRACE); zzCONSUME;\r | |
527 | reg_expr();\r | |
528 | zzmatch(R_BRACE);\r | |
529 | \r | |
530 | /* MR23 */ if (zzaRet.l != NULL) {\r | |
531 | (zzaRet.l)->trans[0] = zzaArg(zztasp1,2 ).l;\r | |
532 | (zzaRet.l)->trans[1] = zzaRet.r;\r | |
533 | if (zzaArg(zztasp1,2 ).r) {\r | |
534 | (zzaArg(zztasp1,2 ).r)->trans[1] = zzaRet.r; /* MR20 */\r | |
535 | }\r | |
536 | }\r | |
537 | zzCONSUME;\r | |
538 | \r | |
539 | }\r | |
540 | else {\r | |
541 | if ( (setwd3[LA(1)]&0x1) ) {\r | |
542 | atom();\r | |
543 | \r | |
544 | /* MR23 */ if (zzaRet.l != NULL) {\r | |
545 | (zzaRet.l)->trans[0] = zzaRet.r;\r | |
546 | (zzaRet.l)->label = set_dup(zzaArg(zztasp1,1 ).label);\r | |
547 | set_orin(&used_chars,(zzaRet.l)->label);\r | |
548 | }\r | |
549 | }\r | |
550 | else {zzFAIL(1,zzerr7,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}\r | |
551 | }\r | |
552 | }\r | |
553 | }\r | |
554 | }\r | |
555 | zzEXIT(zztasp1);\r | |
556 | return;\r | |
557 | fail:\r | |
558 | zzEXIT(zztasp1);\r | |
559 | zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);\r | |
560 | zzresynch(setwd3, 0x2);\r | |
561 | }\r | |
562 | }\r | |
563 | \r | |
564 | void\r | |
565 | #ifdef __USE_PROTOS\r | |
566 | atom_list(void)\r | |
567 | #else\r | |
568 | atom_list()\r | |
569 | #endif\r | |
570 | {\r | |
571 | zzRULE;\r | |
572 | zzBLOCK(zztasp1);\r | |
573 | zzMake0;\r | |
574 | {\r | |
575 | set_free(zzaRet.label);\r | |
576 | {\r | |
577 | zzBLOCK(zztasp2);\r | |
578 | zzMake0;\r | |
579 | {\r | |
580 | while ( (setwd3[LA(1)]&0x4) ) {\r | |
581 | near_atom();\r | |
582 | set_orin(&(zzaRet.label),zzaArg(zztasp2,1 ).label);\r | |
583 | zzLOOP(zztasp2);\r | |
584 | }\r | |
585 | zzEXIT(zztasp2);\r | |
586 | }\r | |
587 | }\r | |
588 | zzEXIT(zztasp1);\r | |
589 | return;\r | |
590 | fail:\r | |
591 | zzEXIT(zztasp1);\r | |
592 | zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);\r | |
593 | zzresynch(setwd3, 0x8);\r | |
594 | }\r | |
595 | }\r | |
596 | \r | |
597 | void\r | |
598 | #ifdef __USE_PROTOS\r | |
599 | near_atom(void)\r | |
600 | #else\r | |
601 | near_atom()\r | |
602 | #endif\r | |
603 | {\r | |
604 | zzRULE;\r | |
605 | zzBLOCK(zztasp1);\r | |
606 | zzMake0;\r | |
607 | {\r | |
608 | register int i;\r | |
609 | register int i_prime;\r | |
610 | anychar();\r | |
611 | zzaRet.letter=zzaArg(zztasp1,1 ).letter; zzaRet.label=set_of(zzaArg(zztasp1,1 ).letter);\r | |
612 | i_prime = zzaArg(zztasp1,1 ).letter + MIN_CHAR;\r | |
613 | if (case_insensitive && islower(i_prime))\r | |
614 | set_orel(toupper(i_prime)-MIN_CHAR,\r | |
615 | &(zzaRet.label));\r | |
616 | if (case_insensitive && isupper(i_prime))\r | |
617 | set_orel(tolower(i_prime)-MIN_CHAR,\r | |
618 | &(zzaRet.label));\r | |
619 | {\r | |
620 | zzBLOCK(zztasp2);\r | |
621 | zzMake0;\r | |
622 | {\r | |
623 | if ( (LA(1)==RANGE) ) {\r | |
624 | zzmatch(RANGE); zzCONSUME;\r | |
625 | anychar();\r | |
626 | if (case_insensitive){\r | |
627 | i_prime = zzaRet.letter+MIN_CHAR;\r | |
628 | zzaRet.letter = (islower(i_prime) ?\r | |
629 | toupper(i_prime) : i_prime)-MIN_CHAR;\r | |
630 | i_prime = zzaArg(zztasp2,2 ).letter+MIN_CHAR;\r | |
631 | zzaArg(zztasp2,2 ).letter = (islower(i_prime) ?\r | |
632 | toupper(i_prime) : i_prime)-MIN_CHAR;\r | |
633 | }\r | |
634 | /* check to see if range okay */\r | |
635 | {\r | |
636 | int debugLetter1 = zzaRet.letter;\r | |
637 | int debugLetter2 = zzaArg(zztasp2,2 ).letter;\r | |
638 | }\r | |
639 | if (zzaRet.letter > zzaArg(zztasp2,2 ).letter \r | |
640 | && zzaArg(zztasp2,2 ).letter != 0xff){ /* MR16 */\r | |
641 | error("invalid range ", zzline);\r | |
642 | }\r | |
643 | for (i=zzaRet.letter; i<= (int)zzaArg(zztasp2,2 ).letter; ++i){\r | |
644 | set_orel(i,&(zzaRet.label));\r | |
645 | i_prime = i+MIN_CHAR;\r | |
646 | if (case_insensitive && islower(i_prime))\r | |
647 | set_orel(toupper(i_prime)-MIN_CHAR,\r | |
648 | &(zzaRet.label));\r | |
649 | if (case_insensitive && isupper(i_prime))\r | |
650 | set_orel(tolower(i_prime)-MIN_CHAR,\r | |
651 | &(zzaRet.label));\r | |
652 | }\r | |
653 | }\r | |
654 | else {\r | |
655 | if ( (setwd3[LA(1)]&0x10) ) {\r | |
656 | }\r | |
657 | else {zzFAIL(1,zzerr8,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}\r | |
658 | }\r | |
659 | zzEXIT(zztasp2);\r | |
660 | }\r | |
661 | }\r | |
662 | zzEXIT(zztasp1);\r | |
663 | return;\r | |
664 | fail:\r | |
665 | zzEXIT(zztasp1);\r | |
666 | zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);\r | |
667 | zzresynch(setwd3, 0x20);\r | |
668 | }\r | |
669 | }\r | |
670 | \r | |
671 | void\r | |
672 | #ifdef __USE_PROTOS\r | |
673 | atom(void)\r | |
674 | #else\r | |
675 | atom()\r | |
676 | #endif\r | |
677 | {\r | |
678 | zzRULE;\r | |
679 | zzBLOCK(zztasp1);\r | |
680 | zzMake0;\r | |
681 | {\r | |
682 | register int i_prime;\r | |
683 | anychar();\r | |
684 | zzaRet.label = set_of(zzaArg(zztasp1,1 ).letter);\r | |
685 | i_prime = zzaArg(zztasp1,1 ).letter + MIN_CHAR;\r | |
686 | if (case_insensitive && islower(i_prime))\r | |
687 | set_orel(toupper(i_prime)-MIN_CHAR,\r | |
688 | &(zzaRet.label));\r | |
689 | if (case_insensitive && isupper(i_prime))\r | |
690 | set_orel(tolower(i_prime)-MIN_CHAR,\r | |
691 | &(zzaRet.label));\r | |
692 | zzEXIT(zztasp1);\r | |
693 | return;\r | |
694 | fail:\r | |
695 | zzEXIT(zztasp1);\r | |
696 | zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);\r | |
697 | zzresynch(setwd3, 0x40);\r | |
698 | }\r | |
699 | }\r | |
700 | \r | |
701 | void\r | |
702 | #ifdef __USE_PROTOS\r | |
703 | anychar(void)\r | |
704 | #else\r | |
705 | anychar()\r | |
706 | #endif\r | |
707 | {\r | |
708 | zzRULE;\r | |
709 | zzBLOCK(zztasp1);\r | |
710 | zzMake0;\r | |
711 | {\r | |
712 | if ( (LA(1)==REGCHAR) ) {\r | |
713 | zzmatch(REGCHAR);\r | |
714 | zzaRet.letter = zzaArg(zztasp1,1 ).letter - MIN_CHAR;\r | |
715 | zzCONSUME;\r | |
716 | \r | |
717 | }\r | |
718 | else {\r | |
719 | if ( (LA(1)==OCTAL_VALUE) ) {\r | |
720 | zzmatch(OCTAL_VALUE);\r | |
721 | zzaRet.letter = zzaArg(zztasp1,1 ).letter - MIN_CHAR;\r | |
722 | zzCONSUME;\r | |
723 | \r | |
724 | }\r | |
725 | else {\r | |
726 | if ( (LA(1)==HEX_VALUE) ) {\r | |
727 | zzmatch(HEX_VALUE);\r | |
728 | zzaRet.letter = zzaArg(zztasp1,1 ).letter - MIN_CHAR;\r | |
729 | zzCONSUME;\r | |
730 | \r | |
731 | }\r | |
732 | else {\r | |
733 | if ( (LA(1)==DEC_VALUE) ) {\r | |
734 | zzmatch(DEC_VALUE);\r | |
735 | zzaRet.letter = zzaArg(zztasp1,1 ).letter - MIN_CHAR;\r | |
736 | zzCONSUME;\r | |
737 | \r | |
738 | }\r | |
739 | else {\r | |
740 | if ( (LA(1)==TAB) ) {\r | |
741 | zzmatch(TAB);\r | |
742 | zzaRet.letter = zzaArg(zztasp1,1 ).letter - MIN_CHAR;\r | |
743 | zzCONSUME;\r | |
744 | \r | |
745 | }\r | |
746 | else {\r | |
747 | if ( (LA(1)==NL) ) {\r | |
748 | zzmatch(NL);\r | |
749 | zzaRet.letter = zzaArg(zztasp1,1 ).letter - MIN_CHAR;\r | |
750 | zzCONSUME;\r | |
751 | \r | |
752 | }\r | |
753 | else {\r | |
754 | if ( (LA(1)==CR) ) {\r | |
755 | zzmatch(CR);\r | |
756 | zzaRet.letter = zzaArg(zztasp1,1 ).letter - MIN_CHAR;\r | |
757 | zzCONSUME;\r | |
758 | \r | |
759 | }\r | |
760 | else {\r | |
761 | if ( (LA(1)==BS) ) {\r | |
762 | zzmatch(BS);\r | |
763 | zzaRet.letter = zzaArg(zztasp1,1 ).letter - MIN_CHAR;\r | |
764 | zzCONSUME;\r | |
765 | \r | |
766 | }\r | |
767 | else {\r | |
768 | if ( (LA(1)==LIT) ) {\r | |
769 | zzmatch(LIT);\r | |
770 | zzaRet.letter = zzaArg(zztasp1,1 ).letter - MIN_CHAR;\r | |
771 | zzCONSUME;\r | |
772 | \r | |
773 | }\r | |
774 | else {\r | |
775 | if ( (LA(1)==L_EOF) ) {\r | |
776 | zzmatch(L_EOF);\r | |
777 | zzaRet.letter = 0;\r | |
778 | zzCONSUME;\r | |
779 | \r | |
780 | }\r | |
781 | else {zzFAIL(1,zzerr9,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}\r | |
782 | }\r | |
783 | }\r | |
784 | }\r | |
785 | }\r | |
786 | }\r | |
787 | }\r | |
788 | }\r | |
789 | }\r | |
790 | }\r | |
791 | zzEXIT(zztasp1);\r | |
792 | return;\r | |
793 | fail:\r | |
794 | zzEXIT(zztasp1);\r | |
795 | /* empty action */ \r | |
796 | zzsyn(zzMissText, zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk, zzBadText);\r | |
797 | zzresynch(setwd3, 0x80);\r | |
798 | }\r | |
799 | }\r | |
800 | \r | |
801 | /* adds a new nfa to the binary tree and returns a pointer to it */\r | |
802 | nfa_node *\r | |
803 | #ifdef __USE_PROTOS\r | |
804 | new_nfa_node(void)\r | |
805 | #else\r | |
806 | new_nfa_node()\r | |
807 | #endif\r | |
808 | {\r | |
809 | register nfa_node *t;\r | |
810 | static int nfa_size=0; /* elements nfa_array[] can hold */\r | |
811 | \r | |
812 | ++nfa_allocated;\r | |
813 | if (nfa_size<=nfa_allocated){\r | |
814 | /* need to redo array */\r | |
815 | if (!nfa_array){\r | |
fb0b35e0 | 816 | /* need some to do initial allocation */\r |
30fdf114 LG |
817 | nfa_size=nfa_allocated+NFA_MIN;\r |
818 | nfa_array=(nfa_node **) malloc(sizeof(nfa_node*)*\r | |
819 | nfa_size);\r | |
820 | }else{\r | |
821 | /* need more space */\r | |
822 | nfa_size=2*(nfa_allocated+1);\r | |
823 | nfa_array=(nfa_node **) realloc(nfa_array,\r | |
824 | sizeof(nfa_node*)*nfa_size);\r | |
825 | }\r | |
826 | }\r | |
827 | /* fill out entry in array */\r | |
828 | t = (nfa_node*) malloc(sizeof(nfa_node));\r | |
829 | nfa_array[nfa_allocated] = t;\r | |
830 | *t = nfa_model_node;\r | |
831 | t->node_no = nfa_allocated;\r | |
832 | return t;\r | |
833 | }\r | |
834 | \r | |
835 | \r | |
836 | /* initialize the model node used to fill in newly made nfa_nodes */\r | |
837 | void\r | |
838 | #ifdef __USE_PROTOS\r | |
839 | make_nfa_model_node(void)\r | |
840 | #else\r | |
841 | make_nfa_model_node()\r | |
842 | #endif\r | |
843 | {\r | |
844 | nfa_model_node.node_no = -1; /* impossible value for real nfa node */\r | |
845 | nfa_model_node.nfa_set = 0;\r | |
846 | nfa_model_node.accept = 0; /* error state default*/\r | |
847 | nfa_model_node.trans[0] = NULL;\r | |
848 | nfa_model_node.trans[1] = NULL;\r | |
849 | nfa_model_node.label = empty;\r | |
850 | }\r | |
851 | \r | |
852 | #if defined(DEBUG) || defined(_DEBUG)\r | |
853 | \r | |
854 | /* print out the pointer value and the node_number */\r | |
855 | void\r | |
856 | #ifdef __USE_PROTOS\r | |
857 | fprint_dfa_pair(FILE *f, nfa_node *p)\r | |
858 | #else\r | |
859 | fprint_dfa_pair(f, p)\r | |
860 | FILE *f;\r | |
861 | nfa_node *p;\r | |
862 | #endif\r | |
863 | {\r | |
864 | if (p){\r | |
865 | fprintf(f, "%x (%d)", p, p->node_no);\r | |
866 | }else{\r | |
867 | fprintf(f, "(nil)");\r | |
868 | }\r | |
869 | }\r | |
870 | \r | |
871 | /* print out interest information on a set */\r | |
872 | void\r | |
873 | #ifdef __USE_PROTOS\r | |
874 | fprint_set(FILE *f, set s)\r | |
875 | #else\r | |
876 | fprint_set(f,s)\r | |
877 | FILE *f;\r | |
878 | set s;\r | |
879 | #endif\r | |
880 | {\r | |
881 | unsigned int *x;\r | |
882 | \r | |
883 | fprintf(f, "n = %d,", s.n);\r | |
884 | if (s.setword){\r | |
885 | fprintf(f, "setword = %x, ", s.setword);\r | |
886 | /* print out all the elements in the set */\r | |
887 | x = set_pdq(s);\r | |
888 | while (*x!=nil){\r | |
889 | fprintf(f, "%d ", *x);\r | |
890 | ++x;\r | |
891 | }\r | |
892 | }else{\r | |
893 | fprintf(f, "setword = (nil)");\r | |
894 | }\r | |
895 | }\r | |
896 | \r | |
897 | /* code to be able to dump out the nfas\r | |
898 | return 0 if okay dump\r | |
899 | return 1 if screwed up\r | |
900 | */\r | |
901 | int\r | |
902 | #ifdef __USE_PROTOS\r | |
903 | dump_nfas(int first_node, int last_node)\r | |
904 | #else\r | |
905 | dump_nfas(first_node, last_node)\r | |
906 | int first_node;\r | |
907 | int last_node;\r | |
908 | #endif\r | |
909 | {\r | |
910 | register int i;\r | |
911 | nfa_node *t;\r | |
912 | \r | |
913 | for (i=first_node; i<=last_node; ++i){\r | |
914 | t = NFA(i);\r | |
915 | if (!t) break;\r | |
916 | fprintf(stderr, "nfa_node %d {\n", t->node_no);\r | |
917 | fprintf(stderr, "\n\tnfa_set = %d\n", t->nfa_set);\r | |
918 | fprintf(stderr, "\taccept\t=\t%d\n", t->accept);\r | |
919 | fprintf(stderr, "\ttrans\t=\t(");\r | |
920 | fprint_dfa_pair(stderr, t->trans[0]);\r | |
921 | fprintf(stderr, ",");\r | |
922 | fprint_dfa_pair(stderr, t->trans[1]);\r | |
923 | fprintf(stderr, ")\n");\r | |
924 | fprintf(stderr, "\tlabel\t=\t{ ");\r | |
925 | fprint_set(stderr, t->label);\r | |
926 | fprintf(stderr, "\t}\n");\r | |
927 | fprintf(stderr, "}\n\n");\r | |
928 | }\r | |
929 | return 0;\r | |
930 | }\r | |
931 | #endif\r | |
932 | \r | |
933 | /* DLG-specific syntax error message generator\r | |
934 | * (define USER_ZZSYN when compiling so don't get 2 definitions)\r | |
935 | */\r | |
936 | void\r | |
937 | #ifdef __USE_PROTOS\r | |
938 | zzsyn(char *text, int tok, char *egroup, SetWordType *eset, int etok, int k, char *bad_text)\r | |
939 | #else\r | |
940 | zzsyn(text, tok, egroup, eset, etok, k, bad_text)\r | |
941 | char *text, *egroup, *bad_text;\r | |
942 | int tok;\r | |
943 | int etok;\r | |
944 | int k;\r | |
945 | SetWordType *eset;\r | |
946 | #endif\r | |
947 | {\r | |
948 | fprintf(stderr, ErrHdr, file_str[0]!=NULL?file_str[0]:"stdin", zzline);\r | |
949 | fprintf(stderr, " syntax error at \"%s\"", (tok==zzEOF_TOKEN)?"EOF":text);\r | |
950 | if ( !etok && !eset ) {fprintf(stderr, "\n"); return;}\r | |
951 | if ( k==1 ) fprintf(stderr, " missing");\r | |
952 | else\r | |
953 | {\r | |
954 | fprintf(stderr, "; \"%s\" not", bad_text);\r | |
955 | if ( zzset_deg(eset)>1 ) fprintf(stderr, " in");\r | |
956 | }\r | |
957 | if ( zzset_deg(eset)>0 ) zzedecode(eset);\r | |
958 | else fprintf(stderr, " %s", zztokens[etok]);\r | |
959 | if ( strlen(egroup) > (size_t)0 ) fprintf(stderr, " in %s", egroup);\r | |
960 | fprintf(stderr, "\n");\r | |
961 | }\r |