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