ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/lsys/parser.cpp
Revision: 1.1
Committed: Thu Nov 6 14:31:24 2008 UTC (15 years, 5 months ago) by root
Branch: MAIN
CVS Tags: HEAD
Log Message:
*** empty log message ***

File Contents

# Content
1 /*
2 * A n t l r T r a n s l a t i o n H e a d e r
3 *
4 * Terence Parr, Will Cohen, and Hank Dietz: 1989-2001
5 * Purdue University Electrical Engineering
6 * With AHPCRC, University of Minnesota
7 * ANTLR Version 1.33MR33
8 *
9 * antlr -o antlr-out -e3 -nopurify -CC -gl parser.g
10 *
11 */
12
13 #define ANTLR_VERSION 13333
14 #include "pcctscfg.h"
15 #include "pccts_stdio.h"
16 #line 1 "parser.g"
17 #include "tokens.h"
18
19 #include "config.h"
20
21 #include <cmath>
22 #include <list>
23
24 #include "lsys.h"
25 #include "util.h"
26
27 #define PURIFY(a,b)
28
29 void parse_file (FILE *file, const string &path, lsys &l) t_err;
30 void parse_file (const string &path, lsys &l) t_err;
31
32 extern list<string> include_dirs;
33 #include "AParser.h"
34 #include "Parser.h"
35 #include "DLexerBase.h"
36 #include "ATokPtr.h"
37 #line 18 "parser.g"
38
39 #include <sstream>
40 #include <cstdio>
41
42 #include "DLGLexer.h"
43
44 list<string> include_dirs;
45
46 void parse_file (FILE *file, const string &path, lsys &l) t_err
47 {
48 DLGFileInput in (file);
49 DLGLexer scanner (&in);
50 ANTLRTokenBuffer pipe (&scanner);
51 ANTLRCommonToken token;
52 scanner.setToken (&token);
53 Parser parser (&pipe);
54 parser.init ();
55
56 parser.current_file = path;
57 parser.parse_file (l);
58 }
59
60 void parse_file (const string &path, lsys &l) t_err
61 {
62 string ipath(path);
63 list<string>::const_iterator i = include_dirs.begin ();
64 FILE *f;
65
66 while (!(f = fopen (ipath.c_str (), "r")))
67 {
68 ipath += ".l";
69 if ((f = fopen (ipath.c_str (), "r")))
70 break;
71
72 if (i == include_dirs.end ())
73 throw error ("unable to find or open file '" + path + "'");
74
75 ipath = *i + "/" + path;
76 i++;
77 }
78
79 struct filebuf
80 {
81 FILE *f;
82 filebuf (FILE * file) : f (file) {};
83 ~filebuf () { fclose (f); };
84 } auto_close(f);
85
86 parse_file (f, ipath, l);
87 }
88
89 void
90 Parser::parse_file(lsys & l)
91 {
92 #line 113 "parser.g"
93 zzRULE;
94 #line 114 "parser.g"
95 parse_lsys( l );
96 #line 114 "parser.g"
97 zzmatch(1); consume();
98 return;
99 fail:
100 syn(zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk);
101 resynch(setwd1, 0x1);
102 }
103
104 void
105 Parser::parse_lsys(lsys & l)
106 {
107 #line 117 "parser.g"
108 zzRULE;
109 if ( (setwd1[LA(1)]&0x2)&&((
110 istok(LT(1), "include") )||(
111 istok(LT(1), "ruleset") )||(
112 istok(LT(1), "define") )||(
113 istok(LT(1), "ignore") )||(
114 !istok(LT(1), ")") )) ) {
115 #line 118 "parser.g"
116 {
117 int zzcnt=1;
118 if (((
119 istok(LT(1), "include") )||(
120 istok(LT(1), "ruleset") )||(
121 istok(LT(1), "define") )||(
122 istok(LT(1), "ignore") )||(
123 !istok(LT(1), ")") ))) {
124 do {
125 #line 118 "parser.g"
126 statement( l );
127 } while ( (setwd1[LA(1)]&0x4)&&((
128 istok(LT(1), "include") )||(
129 istok(LT(1), "ruleset") )||(
130 istok(LT(1), "define") )||(
131 istok(LT(1), "ignore") )||(
132 !istok(LT(1), ")") )) );
133 }
134 }
135 }
136 else {
137 if ( (setwd1[LA(1)]&0x8) ) {
138 }
139 else {FAIL(1,err1,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
140 }
141 return;
142 fail:
143 syn(zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk);
144 resynch(setwd1, 0x10);
145 }
146
147 void
148 Parser::statement(lsys & l)
149 {
150 #line 121 "parser.g"
151 zzRULE;
152 ANTLRTokenPtr qw_str=NULL, br_str=NULL;
153 #line 122 "parser.g"
154 string s; lsys *m = 0; /* calm down gcc */
155 if ( (setwd1[LA(1)]&0x20)&&(
156 istok(LT(1), "include") ) ) {
157 if (!(
158 #line 123 "parser.g"
159 istok(LT(1), "include") ) ) {zzfailed_pred(" istok(LT(1), \"include\") ",0 /* report */, { 0; /* no user action */ } );}
160 #line 123 "parser.g"
161 zzsetmatch(WildCard_set, WildCard_errset); consume();
162 #line 125 "parser.g"
163 {
164 if ( (LA(1)==Name) ) {
165 #line 125 "parser.g"
166 zzmatch(Name);
167 qw_str = (ANTLRTokenPtr)LT(1);
168
169 #line 126 "parser.g"
170
171 ::parse_file ( qw_str->getText(), l);
172 consume();
173 }
174 else {
175 if ( (LA(1)==17) ) {
176 #line 130 "parser.g"
177 zzmatch(17); consume();
178 #line 130 "parser.g"
179 zzmatch(Name);
180 br_str = (ANTLRTokenPtr)LT(1);
181 consume();
182 #line 130 "parser.g"
183 zzmatch(18);
184 #line 131 "parser.g"
185
186 m = new lsys;
187 ::parse_file ( br_str->getText (), *m);
188 l.add_lsys (m);
189 consume();
190 }
191 else {FAIL(1,err4,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
192 }
193 }
194 }
195 else {
196 if ( (setwd1[LA(1)]&0x40)&&(
197 istok(LT(1), "ruleset") ) ) {
198 if (!(
199 #line 137 "parser.g"
200 istok(LT(1), "ruleset") ) ) {zzfailed_pred(" istok(LT(1), \"ruleset\") ",0 /* report */, { 0; /* no user action */ } );}
201 #line 137 "parser.g"
202 zzsetmatch(WildCard_set, WildCard_errset); consume();
203 #line 138 "parser.g"
204 {
205 if ( (LA(1)==Name) ) {
206 #line 138 "parser.g"
207 s = module_name();
208
209 }
210 else {
211 if ( (LA(1)==17) ) {
212 }
213 else {FAIL(1,err5,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
214 }
215 }
216 #line 139 "parser.g"
217 zzmatch(17);
218 #line 140 "parser.g"
219 m = new lsys;
220 consume();
221 #line 141 "parser.g"
222 parse_lsys( *m );
223 #line 142 "parser.g"
224 l.add_lsys (m);
225 #line 143 "parser.g"
226 zzmatch(18); consume();
227 }
228 else {
229 if ( (setwd1[LA(1)]&0x80)&&(
230 istok(LT(1), "define") ) ) {
231 if (!(
232 #line 144 "parser.g"
233 istok(LT(1), "define") ) ) {zzfailed_pred(" istok(LT(1), \"define\") ",0 /* report */, { 0; /* no user action */ } );}
234 #line 144 "parser.g"
235 zzsetmatch(WildCard_set, WildCard_errset); consume();
236 #line 145 "parser.g"
237 s = module_name();
238
239 #line 145 "parser.g"
240 expr_any( l.defines[s] );
241 #line 145 "parser.g"
242 zzmatch(19); consume();
243 }
244 else {
245 if ( (setwd2[LA(1)]&0x1)&&(
246 istok(LT(1), "ignore") ) ) {
247 if (!(
248 #line 146 "parser.g"
249 istok(LT(1), "ignore") ) ) {zzfailed_pred(" istok(LT(1), \"ignore\") ",0 /* report */, { 0; /* no user action */ } );}
250 #line 146 "parser.g"
251 zzsetmatch(WildCard_set, WildCard_errset); consume();
252 #line 147 "parser.g"
253 {
254 int zzcnt=1;
255 do {
256 #line 147 "parser.g"
257 s = module_ref();
258
259 #line 147 "parser.g"
260 l.ignore_module.insert (s);
261 } while ( (setwd2[LA(1)]&0x2) );
262 }
263 #line 147 "parser.g"
264 zzmatch(19); consume();
265 }
266 else {
267 if ( (setwd2[LA(1)]&0x4)&&(
268 !istok(LT(1), ")") ) ) {
269 if (!(
270 #line 148 "parser.g"
271 !istok(LT(1), ")") ) ) {zzfailed_pred(" !istok(LT(1), \")\") ",0 /* report */, { 0; /* no user action */ } );}
272 #line 149 "parser.g"
273 parse_rule( l );
274 }
275 else {FAIL(1,err6,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
276 }
277 }
278 }
279 }
280 return;
281 fail:
282 syn(zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk);
283 resynch(setwd2, 0x8);
284 }
285
286 void
287 Parser::parse_rule(lsys & l)
288 {
289 #line 152 "parser.g"
290 zzRULE;
291 #line 153 "parser.g"
292 rule r;
293 r.constraint = module (1); r.iterations.is_expr = 1;
294 r.iterations = module (0); r.iterations.is_expr = 1;
295 #line 157 "parser.g"
296 parse_modvec( r.pre );
297 #line 158 "parser.g"
298 {
299 if ( (LA(1)==20) ) {
300 #line 158 "parser.g"
301 zzmatch(20); consume();
302 #line 158 "parser.g"
303 parse_module( *(module *)&r );
304 }
305 else {
306 if ( (setwd2[LA(1)]&0x10) ) {
307 #line 159 "parser.g"
308
309 if (r.pre.size () == 0)
310 throw error ("symbol to be replaced must be a single module, not an empty sequence", LT(1)->getLine ());
311 else if (r.pre.size () != 1)
312 throw error ("symbol to be replaced must be a single module, not more", r.pre.first ());
313 else
314 {
315 *(module *)&r = r.pre.first ();
316 r.pre.erase ();
317 }
318 }
319 else {FAIL(1,err7,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
320 }
321 }
322 #line 171 "parser.g"
323 {
324 if ( (LA(1)==21) ) {
325 #line 171 "parser.g"
326 zzmatch(21); consume();
327 #line 171 "parser.g"
328 parse_modvec( r.post );
329 }
330 else {
331 if ( (setwd2[LA(1)]&0x20) ) {
332 }
333 else {FAIL(1,err8,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
334 }
335 }
336 #line 172 "parser.g"
337 {
338 if ( (LA(1)==22) ) {
339 #line 172 "parser.g"
340 zzmatch(22); consume();
341 #line 172 "parser.g"
342 expr_numeric( r.constraint );
343 }
344 else {
345 if ( (LA(1)==23) ) {
346 }
347 else {FAIL(1,err9,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
348 }
349 }
350 #line 173 "parser.g"
351 zzmatch(23); consume();
352 #line 173 "parser.g"
353 {
354 if ( (setwd2[LA(1)]&0x40) ) {
355 #line 173 "parser.g"
356 parse_modvec( r.repl );
357 }
358 else {
359 if ( (setwd2[LA(1)]&0x80) ) {
360 }
361 else {FAIL(1,err10,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
362 }
363 }
364 #line 174 "parser.g"
365 {
366 if ( (LA(1)==24) ) {
367 #line 174 "parser.g"
368 zzmatch(24); consume();
369 #line 174 "parser.g"
370 expr_numeric( r.iterations );
371 }
372 else {
373 if ( (LA(1)==19) ) {
374 }
375 else {FAIL(1,err11,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
376 }
377 }
378 #line 175 "parser.g"
379 zzmatch(19);
380 #line 176 "parser.g"
381 l.add_rule(r);
382 consume();
383 return;
384 fail:
385 syn(zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk);
386 resynch(setwd3, 0x1);
387 }
388
389 void
390 Parser::parse_modvec(module_vec & v)
391 {
392 #line 179 "parser.g"
393 zzRULE;
394 #line 180 "parser.g"
395 module m;
396 #line 181 "parser.g"
397 {
398 int zzcnt=1;
399 do {
400 #line 181 "parser.g"
401 parse_module( m );
402 #line 181 "parser.g"
403 v.push_back (m);
404 } while ( (setwd3[LA(1)]&0x2) );
405 }
406 return;
407 fail:
408 syn(zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk);
409 resynch(setwd3, 0x4);
410 }
411
412 void
413 Parser::parse_module(module & m)
414 {
415 #line 184 "parser.g"
416 zzRULE;
417 #line 185 "parser.g"
418 module v;
419 m.erase ();
420 #line 188 "parser.g"
421 module_head( m );
422 #line 189 "parser.g"
423 {
424 if ( (LA(1)==17) ) {
425 #line 189 "parser.g"
426 zzmatch(17); consume();
427 #line 190 "parser.g"
428 expr_any( v );
429 #line 190 "parser.g"
430 m.push_back (v); v.erase ();
431 #line 191 "parser.g"
432 {
433 while ( (LA(1)==24) ) {
434 #line 191 "parser.g"
435 zzmatch(24); consume();
436 #line 191 "parser.g"
437 expr_any( v );
438 #line 191 "parser.g"
439 m.push_back (v); v.erase ();
440 }
441 }
442 #line 192 "parser.g"
443 zzmatch(18); consume();
444 }
445 else {
446 if ( (setwd3[LA(1)]&0x8) ) {
447 }
448 else {FAIL(1,err12,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
449 }
450 }
451 return;
452 fail:
453 syn(zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk);
454 resynch(setwd3, 0x10);
455 }
456
457 void
458 Parser::module_head(module & m)
459 {
460 #line 196 "parser.g"
461 zzRULE;
462 ANTLRTokenPtr n=NULL;
463 if ( (LA(1)==Number) ) {
464 #line 197 "parser.g"
465 zzmatch(Number);
466 n = (ANTLRTokenPtr)LT(1);
467
468 #line 197 "parser.g"
469 m = module (atof ( n->getText ())); m.where = here ();
470 consume();
471 }
472 else {
473 if ( (setwd3[LA(1)]&0x20) ) {
474 #line 198 "parser.g"
475 m.str = module_ref();
476
477 #line 198 "parser.g"
478 m.is_num = 0; m.where = here ();
479 }
480 else {FAIL(1,err13,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
481 }
482 return;
483 fail:
484 syn(zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk);
485 resynch(setwd3, 0x40);
486 }
487
488 string
489 Parser::module_name(void)
490 {
491 string _retv;
492 #line 201 "parser.g"
493 zzRULE;
494 ANTLRTokenPtr a=NULL;
495 #line 202 "parser.g"
496 zzmatch(Name);
497 a = (ANTLRTokenPtr)LT(1);
498
499 #line 202 "parser.g"
500 _retv = a->getText();
501 consume();
502 return _retv;
503 fail:
504 syn(zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk);
505 resynch(setwd3, 0x80);
506 return _retv;
507 }
508
509 string
510 Parser::module_ref(void)
511 {
512 string _retv;
513 #line 205 "parser.g"
514 zzRULE;
515 if ( (LA(1)==Name) ) {
516 #line 206 "parser.g"
517 _retv = module_name();
518
519 }
520 else {
521 if ( (LA(1)==25) ) {
522 #line 207 "parser.g"
523 zzmatch(25);
524 #line 207 "parser.g"
525 _retv = "\\";
526 consume();
527 }
528 else {
529 if ( (LA(1)==26) ) {
530 #line 208 "parser.g"
531 zzmatch(26);
532 #line 208 "parser.g"
533 _retv = "+";
534 consume();
535 }
536 else {
537 if ( (LA(1)==27) ) {
538 #line 209 "parser.g"
539 zzmatch(27);
540 #line 209 "parser.g"
541 _retv = "-";
542 consume();
543 }
544 else {
545 if ( (LA(1)==28) ) {
546 #line 210 "parser.g"
547 zzmatch(28);
548 #line 210 "parser.g"
549 _retv = "*";
550 consume();
551 }
552 else {
553 if ( (LA(1)==29) ) {
554 #line 211 "parser.g"
555 zzmatch(29);
556 #line 211 "parser.g"
557 _retv = "/";
558 consume();
559 }
560 else {
561 if ( (LA(1)==30) ) {
562 #line 212 "parser.g"
563 zzmatch(30);
564 #line 212 "parser.g"
565 _retv = "^";
566 consume();
567 }
568 else {
569 if ( (LA(1)==31) ) {
570 #line 213 "parser.g"
571 zzmatch(31);
572 #line 213 "parser.g"
573 _retv = "{";
574 consume();
575 }
576 else {
577 if ( (LA(1)==32) ) {
578 #line 214 "parser.g"
579 zzmatch(32);
580 #line 214 "parser.g"
581 _retv = "}";
582 consume();
583 }
584 else {
585 if ( (LA(1)==33) ) {
586 #line 215 "parser.g"
587 zzmatch(33);
588 #line 215 "parser.g"
589 _retv = ".";
590 consume();
591 }
592 else {
593 if ( (LA(1)==34) ) {
594 #line 216 "parser.g"
595 zzmatch(34);
596 #line 216 "parser.g"
597 _retv = "|";
598 consume();
599 }
600 else {
601 if ( (LA(1)==35) ) {
602 #line 217 "parser.g"
603 zzmatch(35);
604 #line 217 "parser.g"
605 _retv = "~";
606 consume();
607 }
608 else {
609 if ( (LA(1)==36) ) {
610 #line 218 "parser.g"
611 zzmatch(36);
612 #line 218 "parser.g"
613 _retv = "[";
614 consume();
615 }
616 else {
617 if ( (LA(1)==37) ) {
618 #line 219 "parser.g"
619 zzmatch(37);
620 #line 219 "parser.g"
621 _retv = "]";
622 consume();
623 }
624 else {
625 if ( (LA(1)==38) ) {
626 #line 220 "parser.g"
627 zzmatch(38);
628 #line 220 "parser.g"
629 _retv = "!";
630 consume();
631 }
632 else {
633 if ( (LA(1)==39) ) {
634 #line 221 "parser.g"
635 zzmatch(39);
636 #line 221 "parser.g"
637 _retv = "&";
638 consume();
639 }
640 else {
641 if ( (LA(1)==40) ) {
642 #line 222 "parser.g"
643 zzmatch(40);
644 #line 222 "parser.g"
645 _retv = "%";
646 consume();
647 }
648 else {FAIL(1,err14,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
649 }
650 }
651 }
652 }
653 }
654 }
655 }
656 }
657 }
658 }
659 }
660 }
661 }
662 }
663 }
664 }
665 return _retv;
666 fail:
667 syn(zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk);
668 resynch(setwd4, 0x1);
669 return _retv;
670 }
671
672 void
673 Parser::expr_any(module & v)
674 {
675 #line 225 "parser.g"
676 zzRULE;
677 if ( (setwd4[LA(1)]&0x2) ) {
678 #line 226 "parser.g"
679 expr_numeric( v );
680 }
681 else {
682 if ( (setwd4[LA(1)]&0x4) ) {
683 #line 227 "parser.g"
684 expr_modvec( v );
685 }
686 else {FAIL(1,err15,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
687 }
688 return;
689 fail:
690 syn(zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk);
691 resynch(setwd4, 0x8);
692 }
693
694 void
695 Parser::expr_modvec(module & v)
696 {
697 #line 230 "parser.g"
698 zzRULE;
699 if ( (LA(1)==9) ) {
700 #line 231 "parser.g"
701 zzmatch(9); consume();
702 #line 231 "parser.g"
703 parse_modvec( v );
704 #line 231 "parser.g"
705 v.str.erase (); v.is_expr = 0;
706 #line 231 "parser.g"
707 zzmatch(9); consume();
708 }
709 else {
710 if ( (LA(1)==41) ) {
711 #line 232 "parser.g"
712 zzmatch(41); consume();
713 #line 232 "parser.g"
714 parse_modvec( v );
715 #line 232 "parser.g"
716 v.str.erase (); v.is_expr = 0;
717 }
718 else {FAIL(1,err16,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
719 }
720 return;
721 fail:
722 syn(zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk);
723 resynch(setwd4, 0x10);
724 }
725
726 void
727 Parser::expr_numeric(module & v)
728 {
729 #line 235 "parser.g"
730 zzRULE;
731 #line 236 "parser.g"
732 expr_0( v );
733 #line 236 "parser.g"
734 v.is_expr = 1;
735 return;
736 fail:
737 syn(zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk);
738 resynch(setwd4, 0x20);
739 }
740
741 void
742 Parser::expr_0(module & v)
743 {
744 #line 239 "parser.g"
745 zzRULE;
746 #line 240 "parser.g"
747 module r;
748 if ( (setwd4[LA(1)]&0x40) ) {
749 #line 241 "parser.g"
750 expr_1( v );
751 #line 243 "parser.g"
752 {
753 for (;;) {
754 if ( !((setwd4[LA(1)]&0x80))) break;
755 if ( (LA(1)==42) ) {
756 #line 241 "parser.g"
757 zzmatch(42); consume();
758 #line 241 "parser.g"
759 expr_2( r );
760 #line 241 "parser.g"
761 v = module ("&&", v, r);
762 }
763 else {
764 if ( (LA(1)==43) ) {
765 #line 242 "parser.g"
766 zzmatch(43); consume();
767 #line 242 "parser.g"
768 expr_2( r );
769 #line 242 "parser.g"
770 v = module ("||", v, r);
771 }
772 else break; /* MR6 code for exiting loop "for sure" */
773 }
774 }
775 }
776 }
777 else {
778 if ( (LA(1)==38) ) {
779 #line 244 "parser.g"
780 zzmatch(38); consume();
781 #line 244 "parser.g"
782 expr_1( r );
783 #line 244 "parser.g"
784 v = module ("!", r);
785 }
786 else {FAIL(1,err17,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
787 }
788 return;
789 fail:
790 syn(zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk);
791 resynch(setwd5, 0x1);
792 }
793
794 void
795 Parser::expr_1(module & v)
796 {
797 #line 247 "parser.g"
798 zzRULE;
799 #line 248 "parser.g"
800 module r;
801 #line 249 "parser.g"
802 expr_2( v );
803 #line 249 "parser.g"
804 {
805 if ( (LA(1)==21) ) {
806 #line 249 "parser.g"
807 zzmatch(21); consume();
808 #line 249 "parser.g"
809 expr_2( r );
810 #line 249 "parser.g"
811 v = module (">" , v, r);
812 }
813 else {
814 if ( (LA(1)==44) ) {
815 #line 250 "parser.g"
816 zzmatch(44); consume();
817 #line 250 "parser.g"
818 expr_2( r );
819 #line 250 "parser.g"
820 v = module (">=", v, r);
821 }
822 else {
823 if ( (LA(1)==45) ) {
824 #line 251 "parser.g"
825 zzmatch(45); consume();
826 #line 251 "parser.g"
827 expr_2( r );
828 #line 251 "parser.g"
829 v = module ("==", v, r);
830 }
831 else {
832 if ( (LA(1)==46) ) {
833 #line 252 "parser.g"
834 zzmatch(46); consume();
835 #line 252 "parser.g"
836 expr_2( r );
837 #line 252 "parser.g"
838 v = module ("==", v, r);
839 }
840 else {
841 if ( (LA(1)==47) ) {
842 #line 253 "parser.g"
843 zzmatch(47); consume();
844 #line 253 "parser.g"
845 expr_2( r );
846 #line 253 "parser.g"
847 v = module ("!=", v, r);
848 }
849 else {
850 if ( (LA(1)==20) ) {
851 #line 254 "parser.g"
852 zzmatch(20); consume();
853 #line 254 "parser.g"
854 expr_2( r );
855 #line 254 "parser.g"
856 v = module ("<" , v, r);
857 }
858 else {
859 if ( (LA(1)==48) ) {
860 #line 255 "parser.g"
861 zzmatch(48); consume();
862 #line 255 "parser.g"
863 expr_2( r );
864 #line 255 "parser.g"
865 v = module ("<=", v, r);
866 }
867 else {
868 if ( (setwd5[LA(1)]&0x2) ) {
869 }
870 else {FAIL(1,err18,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
871 }
872 }
873 }
874 }
875 }
876 }
877 }
878 }
879 return;
880 fail:
881 syn(zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk);
882 resynch(setwd5, 0x4);
883 }
884
885 void
886 Parser::expr_2(module & v)
887 {
888 #line 259 "parser.g"
889 zzRULE;
890 #line 260 "parser.g"
891 module r;
892 #line 261 "parser.g"
893 v = module (0);
894 #line 262 "parser.g"
895 {
896 if ( (setwd5[LA(1)]&0x8) ) {
897 #line 262 "parser.g"
898 expr_3( v );
899 }
900 else {
901 if ( (setwd5[LA(1)]&0x10) ) {
902 }
903 else {FAIL(1,err19,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
904 }
905 }
906 #line 264 "parser.g"
907 {
908 for (;;) {
909 if ( !((setwd5[LA(1)]&0x20))) break;
910 if ( (LA(1)==26) ) {
911 #line 262 "parser.g"
912 zzmatch(26); consume();
913 #line 262 "parser.g"
914 expr_3( r );
915 #line 262 "parser.g"
916 v = module ("+", v, r);
917 }
918 else {
919 if ( (LA(1)==27) ) {
920 #line 263 "parser.g"
921 zzmatch(27); consume();
922 #line 263 "parser.g"
923 expr_3( r );
924 #line 263 "parser.g"
925 v = module ("-", v, r);
926 }
927 else break; /* MR6 code for exiting loop "for sure" */
928 }
929 }
930 }
931 return;
932 fail:
933 syn(zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk);
934 resynch(setwd5, 0x40);
935 }
936
937 void
938 Parser::expr_3(module & v)
939 {
940 #line 267 "parser.g"
941 zzRULE;
942 #line 268 "parser.g"
943 module r;
944 #line 269 "parser.g"
945 expr_4( v );
946 #line 272 "parser.g"
947 {
948 for (;;) {
949 if ( !((setwd5[LA(1)]&0x80))) break;
950 if ( (LA(1)==28) ) {
951 #line 269 "parser.g"
952 zzmatch(28); consume();
953 #line 269 "parser.g"
954 expr_4( r );
955 #line 269 "parser.g"
956 v = module ("*", v, r);
957 }
958 else {
959 if ( (LA(1)==29) ) {
960 #line 270 "parser.g"
961 zzmatch(29); consume();
962 #line 270 "parser.g"
963 expr_4( r );
964 #line 270 "parser.g"
965 v = module ("/", v, r);
966 }
967 else {
968 if ( (LA(1)==40) ) {
969 #line 271 "parser.g"
970 zzmatch(40); consume();
971 #line 271 "parser.g"
972 expr_4( r );
973 #line 271 "parser.g"
974 v = module ("%", v ,r);
975 }
976 else break; /* MR6 code for exiting loop "for sure" */
977 }
978 }
979 }
980 }
981 return;
982 fail:
983 syn(zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk);
984 resynch(setwd6, 0x1);
985 }
986
987 void
988 Parser::expr_4(module & v)
989 {
990 #line 275 "parser.g"
991 zzRULE;
992 #line 276 "parser.g"
993 module r;
994 #line 277 "parser.g"
995 expr_5( v );
996 #line 278 "parser.g"
997 {
998 while ( (LA(1)==30) ) {
999 #line 277 "parser.g"
1000 zzmatch(30); consume();
1001 #line 277 "parser.g"
1002 expr_5( r );
1003 #line 277 "parser.g"
1004 v = module ("^", v, r);
1005 }
1006 }
1007 return;
1008 fail:
1009 syn(zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk);
1010 resynch(setwd6, 0x2);
1011 }
1012
1013 void
1014 Parser::expr_5(module & v)
1015 {
1016 #line 281 "parser.g"
1017 zzRULE;
1018 if ( (LA(1)==17) ) {
1019 #line 282 "parser.g"
1020 zzmatch(17); consume();
1021 #line 282 "parser.g"
1022 expr_0( v );
1023 #line 282 "parser.g"
1024 v.where = here ();
1025 #line 282 "parser.g"
1026 zzmatch(18); consume();
1027 }
1028 else {
1029 if ( (setwd6[LA(1)]&0x4) ) {
1030 #line 283 "parser.g"
1031 expr_atom( v );
1032 }
1033 else {FAIL(1,err20,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
1034 }
1035 return;
1036 fail:
1037 syn(zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk);
1038 resynch(setwd6, 0x8);
1039 }
1040
1041 void
1042 Parser::expr_atom(module & v)
1043 {
1044 #line 286 "parser.g"
1045 zzRULE;
1046 ANTLRTokenPtr num=NULL;
1047 if ( (LA(1)==Number) ) {
1048 #line 287 "parser.g"
1049 zzmatch(Number);
1050 num = (ANTLRTokenPtr)LT(1);
1051
1052 #line 287 "parser.g"
1053 v = module (atof ( num->getText ())); v.where = here ();
1054 consume();
1055 }
1056 else {
1057 if ( (LA(1)==Name) ) {
1058 #line 288 "parser.g"
1059 expr_module( v );
1060 }
1061 else {FAIL(1,err21,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
1062 }
1063 return;
1064 fail:
1065 syn(zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk);
1066 resynch(setwd6, 0x10);
1067 }
1068
1069 void
1070 Parser::expr_module(module & m)
1071 {
1072 #line 291 "parser.g"
1073 zzRULE;
1074 #line 292 "parser.g"
1075 module v;
1076 m.erase ();
1077 m.where = here ();
1078 #line 296 "parser.g"
1079 m.str = module_name();
1080
1081 #line 297 "parser.g"
1082 {
1083 if ( (LA(1)==17) ) {
1084 #line 297 "parser.g"
1085 zzmatch(17); consume();
1086 #line 298 "parser.g"
1087 expr_any( v );
1088 #line 298 "parser.g"
1089 m.push_back (v); v.erase ();
1090 #line 299 "parser.g"
1091 {
1092 while ( (LA(1)==24) ) {
1093 #line 299 "parser.g"
1094 zzmatch(24); consume();
1095 #line 299 "parser.g"
1096 expr_any( v );
1097 #line 299 "parser.g"
1098 m.push_back (v); v.erase ();
1099 }
1100 }
1101 #line 300 "parser.g"
1102 zzmatch(18); consume();
1103 }
1104 else {
1105 if ( (setwd6[LA(1)]&0x20) ) {
1106 }
1107 else {FAIL(1,err22,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText,&zzErrk); goto fail;}
1108 }
1109 }
1110 return;
1111 fail:
1112 syn(zzBadTok, (ANTLRChar *)"", zzMissSet, zzMissTok, zzErrk);
1113 resynch(setwd6, 0x40);
1114 }
1115 #line 306 "parser.g"
1116
1117 void Parser::syn (_ANTLRTokenPtr tok, ANTLRChar * egroup, SetWordType * eset,
1118 ANTLRTokenType etok, int k)
1119 {
1120 ostringstream msg;
1121
1122 syntaxErrCount++;
1123
1124 msg << current_file << ":" << LT (1)->getLine () << ": syntax error at \"" << LT (1)->getText ();
1125
1126 if (etok || eset)
1127 {
1128 if (k == 1)
1129 msg << " missing";
1130 else
1131 {
1132 msg << "; \"" << LT (1)->getText () << "\" not";
1133 if (set_deg (eset) > 1)
1134 msg << " in";
1135 }
1136
1137 if (set_deg (eset) > 0)
1138 {
1139 SetWordType *p = eset;
1140 SetWordType *endp = &(p[bsetsize]);
1141 unsigned e = 0;
1142
1143 if (set_deg (eset) > 1)
1144 msg << " {";
1145 do
1146 {
1147 register SetWordType t = *p;
1148 register SetWordType *b = &(bitmask[0]);
1149 do
1150 {
1151 if (t & *b)
1152 msg << " " << token_tbl[e];
1153 e++;
1154 }
1155 while (++b < &(bitmask[sizeof (SetWordType) * 8]));
1156 }
1157 while (++p < endp);
1158 if (set_deg (eset) > 1)
1159 msg << " }";
1160 }
1161 else
1162 msg << " " << token_tbl[etok];
1163
1164 if (strlen (egroup) > 0)
1165 msg << " in " << egroup;
1166
1167 msg << endl;
1168 throw error (msg.str ());
1169 }
1170 }