]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/C/VfrCompile/Pccts/dlg/dlg_p.c
BaseTools: Various typo
[mirror_edk2.git] / BaseTools / Source / C / VfrCompile / Pccts / dlg / dlg_p.c
CommitLineData
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
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
4e97974c 42#pragma clang diagnostic ignored "-Wparentheses-equality"\r
43\r
99e55970 44int action_no = 0; /* keep track of actions outputted */\r
30fdf114
LG
45int nfa_allocated = 0; /* keeps track of number of nfa nodes */\r
46nfa_node **nfa_array = NULL;/* root of binary tree that stores nfa array */\r
47nfa_node nfa_model_node; /* model to initialize new nodes */\r
48set used_chars; /* used to label trans. arcs */\r
49set used_classes; /* classes or chars used to label trans. arcs */\r
50set normal_chars; /* mask to get rid elements that aren't used\r
51in set */\r
52int flag_paren = FALSE;\r
53int flag_brace = FALSE;\r
54int mode_counter = 0; /* keep track of number of %%names */\r
55\r
56 \r
57\r
58void\r
59#ifdef __USE_PROTOS\r
60grammar(void)\r
61#else\r
62grammar()\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
131fail:\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
138void\r
139#ifdef __USE_PROTOS\r
140start_states(void)\r
141#else\r
142start_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
182fail:\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
189void\r
190#ifdef __USE_PROTOS\r
191do_conversion(void)\r
192#else\r
193do_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
217fail:\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
224void\r
225#ifdef __USE_PROTOS\r
226rule_list(void)\r
227#else\r
228rule_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
266fail:\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
273void\r
274#ifdef __USE_PROTOS\r
275rule(void)\r
276#else\r
277rule()\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
305fail:\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
312void\r
313#ifdef __USE_PROTOS\r
314reg_expr(void)\r
315#else\r
316reg_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
349fail:\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
356void\r
357#ifdef __USE_PROTOS\r
358and_expr(void)\r
359#else\r
360and_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
387fail:\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
394void\r
395#ifdef __USE_PROTOS\r
396repeat_expr(void)\r
397#else\r
398repeat_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
461fail:\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
468void\r
469#ifdef __USE_PROTOS\r
470expr(void)\r
471#else\r
472expr()\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
557fail:\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
564void\r
565#ifdef __USE_PROTOS\r
566atom_list(void)\r
567#else\r
568atom_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
590fail:\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
597void\r
598#ifdef __USE_PROTOS\r
599near_atom(void)\r
600#else\r
601near_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
664fail:\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
671void\r
672#ifdef __USE_PROTOS\r
673atom(void)\r
674#else\r
675atom()\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
694fail:\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
701void\r
702#ifdef __USE_PROTOS\r
703anychar(void)\r
704#else\r
705anychar()\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
793fail:\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
802nfa_node *\r
803#ifdef __USE_PROTOS\r
804new_nfa_node(void)\r
805#else\r
806new_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
837void\r
838#ifdef __USE_PROTOS\r
839make_nfa_model_node(void)\r
840#else\r
841make_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
855void\r
856#ifdef __USE_PROTOS\r
857fprint_dfa_pair(FILE *f, nfa_node *p)\r
858#else\r
859fprint_dfa_pair(f, p)\r
860FILE *f;\r
861nfa_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
872void\r
873#ifdef __USE_PROTOS\r
874fprint_set(FILE *f, set s)\r
875#else\r
876fprint_set(f,s)\r
877FILE *f;\r
878set 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
898return 0 if okay dump\r
899return 1 if screwed up\r
900*/\r
901int\r
902#ifdef __USE_PROTOS\r
903dump_nfas(int first_node, int last_node)\r
904#else\r
905dump_nfas(first_node, last_node)\r
906int first_node;\r
907int 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
936void\r
937#ifdef __USE_PROTOS\r
938zzsyn(char *text, int tok, char *egroup, SetWordType *eset, int etok, int k, char *bad_text)\r
939#else\r
940zzsyn(text, tok, egroup, eset, etok, k, bad_text)\r
941char *text, *egroup, *bad_text;\r
942int tok;\r
943int etok;\r
944int k;\r
945SetWordType *eset;\r
946#endif\r
947{\r
948fprintf(stderr, ErrHdr, file_str[0]!=NULL?file_str[0]:"stdin", zzline);\r
949fprintf(stderr, " syntax error at \"%s\"", (tok==zzEOF_TOKEN)?"EOF":text);\r
950if ( !etok && !eset ) {fprintf(stderr, "\n"); return;}\r
951if ( k==1 ) fprintf(stderr, " missing");\r
952else\r
953{\r
954fprintf(stderr, "; \"%s\" not", bad_text);\r
955if ( zzset_deg(eset)>1 ) fprintf(stderr, " in");\r
956}\r
957if ( zzset_deg(eset)>0 ) zzedecode(eset);\r
958else fprintf(stderr, " %s", zztokens[etok]);\r
959if ( strlen(egroup) > (size_t)0 ) fprintf(stderr, " in %s", egroup);\r
960fprintf(stderr, "\n");\r
961}\r