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, 6 months ago) by root
Branch: MAIN
CVS Tags: HEAD
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.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     }