• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  
2  //----------------------------------------------------
3  // The following code was generated by Java(tm) CUP v0.9d
4  // Thu Aug 10 03:51:39 MSD 2006
5  //----------------------------------------------------
6  
7  package java_cup;
8  
9  import java.util.Hashtable;
10  
11  public class parser extends java_cup.runtime.lr_parser {
12  
13    /** constructor */
parser()14    public parser() {super();}
15  
16    /** production table */
17    protected static final short _production_table[][] = {
18          {0, 2},     {32, 0},     {1, 10},     {1, 4},     {33, 0},
19          {2, 4},     {2, 1},     {3, 2},     {3, 1},     {34, 0},
20          {11, 4},     {4, 2},     {5, 4},     {5, 1},     {6, 4},
21          {6, 1},     {13, 4},     {13, 1},     {14, 4},     {14, 1},
22          {16, 4},     {16, 1},     {7, 2},     {7, 1},     {35, 0},
23          {15, 5},     {36, 0},     {15, 6},     {37, 0},     {15, 4},
24          {38, 0},     {15, 5},     {18, 3},     {18, 1},     {19, 3},
25          {19, 1},     {39, 0},     {8, 5},     {8, 1},     {9, 2},
26          {9, 1},     {40, 0},     {20, 5},     {41, 0},     {20, 3},
27          {25, 3},     {25, 1},     {26, 1},     {21, 2},     {21, 1},
28          {22, 2},     {22, 1},     {31, 2},     {31, 1},     {10, 3},
29          {10, 1},     {12, 3},     {12, 1},     {17, 1},     {23, 1},
30          {24, 1},     {28, 1},     {29, 1},     {30, 1},     {27, 0}
31        };
32  
33    /** access to production table */
production_table()34    public short[][] production_table() {return _production_table;}
35  
36    /** parse action table */
37    protected static final short[][] _action_table = {
38      /*0*/{1,3,2,-2,3,-2,5,-2,6,-2,7,-2,8,-2,9,-2,10,-2,20,-2,-1,0},
39      /*1*/{0,120,-1,0},
40      /*2*/{7,34,8,36,-1,0},
41      /*3*/{2,7,3,-65,5,-65,6,-65,7,-65,8,-65,9,-65,10,-65,20,-65,-1,0},
42      /*4*/{3,-65,5,-65,6,-65,7,-65,8,-65,9,-65,10,-65,20,-65,-1,0},
43      /*5*/{3,-7,5,-7,6,-7,7,-7,8,-7,9,-7,10,-7,20,-7,-1,0},
44      /*6*/{21,8,-1,0},
45      /*7*/{13,-56,16,-56,21,-56,-1,0},
46      /*8*/{13,-5,16,11,-1,0},
47      /*9*/{13,13,-1,0},
48      /*10*/{21,12,-1,0},
49      /*11*/{13,-55,16,-55,21,-55,-1,0},
50      /*12*/{3,-6,5,-6,6,-6,7,-6,8,-6,9,-6,10,-6,20,-6,-1,0},
51      /*13*/{3,17,5,18,6,-65,7,-65,8,-65,9,-65,10,-65,20,-65,-1,0},
52      /*14*/{3,-9,5,-9,6,-9,7,-9,8,-9,9,-9,10,-9,20,-9,-1,0},
53      /*15*/{3,-8,5,-8,6,-8,7,-8,8,-8,9,-8,10,-8,20,-8,-1,0},
54      /*16*/{21,8,-1,0},
55      /*17*/{4,108,-1,0},
56      /*18*/{6,103,7,-65,8,-65,9,-65,10,-65,20,-65,-1,0},
57      /*19*/{6,-14,7,-14,8,-14,9,-14,10,-14,20,-14,-1,0},
58      /*20*/{7,-65,8,-65,9,-65,10,-65,20,22,-1,0},
59      /*21*/{11,99,-1,0},
60      /*22*/{7,-22,8,-22,9,-22,10,-22,-1,0},
61      /*23*/{7,-65,8,-65,9,25,10,-65,-1,0},
62      /*24*/{11,96,-1,0},
63      /*25*/{7,-65,8,-65,10,29,-1,0},
64      /*26*/{7,-18,8,-18,10,-18,-1,0},
65      /*27*/{7,34,8,36,-1,0},
66      /*28*/{11,31,-1,0},
67      /*29*/{7,-20,8,-20,-1,0},
68      /*30*/{22,32,-1,0},
69      /*31*/{13,33,-1,0},
70      /*32*/{7,-19,8,-19,-1,0},
71      /*33*/{1,85,21,8,-1,0},
72      /*34*/{1,-24,7,-24,8,-24,12,-24,21,-24,-1,0},
73      /*35*/{7,72,-1,0},
74      /*36*/{1,-65,7,34,8,36,12,41,21,-65,-1,0},
75      /*37*/{1,47,21,43,-1,0},
76      /*38*/{1,-39,21,-39,-1,0},
77      /*39*/{1,-23,7,-23,8,-23,12,-23,21,-23,-1,0},
78      /*40*/{11,42,-1,0},
79      /*41*/{21,43,-1,0},
80      /*42*/{13,-62,18,-62,-1,0},
81      /*43*/{13,-37,-1,0},
82      /*44*/{13,46,-1,0},
83      /*45*/{1,-38,21,-38,-1,0},
84      /*46*/{13,-44,-1,0},
85      /*47*/{18,-42,-1,0},
86      /*48*/{0,-3,1,47,21,43,-1,0},
87      /*49*/{0,-41,1,-41,21,-41,-1,0},
88      /*50*/{0,-40,1,-40,21,-40,-1,0},
89      /*51*/{18,53,-1,0},
90      /*52*/{13,-65,19,-65,21,-65,22,-65,-1,0},
91      /*53*/{13,68,19,67,-1,0},
92      /*54*/{13,-50,19,-50,21,-50,22,-50,-1,0},
93      /*55*/{13,-48,19,-48,21,59,22,58,-1,0},
94      /*56*/{13,-47,19,-47,-1,0},
95      /*57*/{13,-52,19,-52,21,-52,22,-52,-1,0},
96      /*58*/{13,-63,17,-63,19,-63,21,-63,22,-63,-1,0},
97      /*59*/{13,-65,17,62,19,-65,21,-65,22,-65,-1,0},
98      /*60*/{13,-49,19,-49,21,-49,22,-49,-1,0},
99      /*61*/{21,65,-1,0},
100      /*62*/{13,-54,19,-54,21,-54,22,-54,-1,0},
101      /*63*/{13,-51,19,-51,21,-51,22,-51,-1,0},
102      /*64*/{13,-64,21,-64,22,-64,-1,0},
103      /*65*/{13,-53,21,-53,22,-53,-1,0},
104      /*66*/{13,-65,19,-65,21,-65,22,-65,-1,0},
105      /*67*/{0,-43,1,-43,21,-43,-1,0},
106      /*68*/{13,-46,19,-46,-1,0},
107      /*69*/{13,71,-1,0},
108      /*70*/{0,-45,1,-45,21,-45,-1,0},
109      /*71*/{1,73,21,8,-1,0},
110      /*72*/{13,-31,-1,0},
111      /*73*/{16,11,21,-59,-1,0},
112      /*74*/{21,76,-1,0},
113      /*75*/{13,-61,14,-61,-1,0},
114      /*76*/{13,-27,14,79,-1,0},
115      /*77*/{13,-36,14,-36,-1,0},
116      /*78*/{21,76,-1,0},
117      /*79*/{13,81,-1,0},
118      /*80*/{1,-28,7,-28,8,-28,12,-28,21,-28,-1,0},
119      /*81*/{13,-35,14,-35,-1,0},
120      /*82*/{13,84,-1,0},
121      /*83*/{1,-32,7,-32,8,-32,12,-32,21,-32,-1,0},
122      /*84*/{13,-29,-1,0},
123      /*85*/{21,87,-1,0},
124      /*86*/{13,-60,14,-60,-1,0},
125      /*87*/{13,-34,14,-34,-1,0},
126      /*88*/{13,-25,14,91,-1,0},
127      /*89*/{13,93,-1,0},
128      /*90*/{21,87,-1,0},
129      /*91*/{13,-33,14,-33,-1,0},
130      /*92*/{1,-26,7,-26,8,-26,12,-26,21,-26,-1,0},
131      /*93*/{13,95,-1,0},
132      /*94*/{1,-30,7,-30,8,-30,12,-30,21,-30,-1,0},
133      /*95*/{22,97,-1,0},
134      /*96*/{13,98,-1,0},
135      /*97*/{7,-17,8,-17,10,-17,-1,0},
136      /*98*/{21,8,-1,0},
137      /*99*/{13,101,16,11,-1,0},
138      /*100*/{7,-21,8,-21,9,-21,10,-21,-1,0},
139      /*101*/{7,-16,8,-16,9,-16,10,-16,20,-16,-1,0},
140      /*102*/{4,105,-1,0},
141      /*103*/{7,-12,8,-12,9,-12,10,-12,20,-12,-1,0},
142      /*104*/{22,106,-1,0},
143      /*105*/{13,107,-1,0},
144      /*106*/{7,-15,8,-15,9,-15,10,-15,20,-15,-1,0},
145      /*107*/{22,109,-1,0},
146      /*108*/{13,110,-1,0},
147      /*109*/{6,-13,7,-13,8,-13,9,-13,10,-13,20,-13,-1,0},
148      /*110*/{13,-58,16,115,-1,0},
149      /*111*/{13,-10,-1,0},
150      /*112*/{13,114,-1,0},
151      /*113*/{3,-11,5,-11,6,-11,7,-11,8,-11,9,-11,10,-11,20,-11,-1,0},
152      /*114*/{15,116,21,12,-1,0},
153      /*115*/{13,-57,-1,0},
154      /*116*/{1,-65,7,34,8,36,12,41,21,-65,-1,0},
155      /*117*/{1,47,21,43,-1,0},
156      /*118*/{0,-4,1,47,21,43,-1,0},
157      /*119*/{0,-1,-1,0},
158    };
159  
160    /** access to parse action table */
action_table()161    public short[][] action_table() {return _action_table;}
162  
163    /** reduce_goto table */
164    protected static final short[][] _reduce_table = {
165      /*0*/{1,1,32,3,-1,-1},
166      /*1*/{-1,-1},
167      /*2*/{7,116,15,34,-1,-1},
168      /*3*/{2,4,27,5,-1,-1},
169      /*4*/{3,13,27,14,-1,-1},
170      /*5*/{-1,-1},
171      /*6*/{10,8,-1,-1},
172      /*7*/{-1,-1},
173      /*8*/{33,9,-1,-1},
174      /*9*/{-1,-1},
175      /*10*/{-1,-1},
176      /*11*/{-1,-1},
177      /*12*/{-1,-1},
178      /*13*/{4,20,5,18,11,15,27,19,-1,-1},
179      /*14*/{-1,-1},
180      /*15*/{-1,-1},
181      /*16*/{10,110,12,111,-1,-1},
182      /*17*/{-1,-1},
183      /*18*/{6,103,27,101,-1,-1},
184      /*19*/{-1,-1},
185      /*20*/{16,23,27,22,-1,-1},
186      /*21*/{-1,-1},
187      /*22*/{-1,-1},
188      /*23*/{13,25,27,26,-1,-1},
189      /*24*/{-1,-1},
190      /*25*/{14,27,27,29,-1,-1},
191      /*26*/{-1,-1},
192      /*27*/{7,36,15,34,-1,-1},
193      /*28*/{-1,-1},
194      /*29*/{-1,-1},
195      /*30*/{-1,-1},
196      /*31*/{-1,-1},
197      /*32*/{-1,-1},
198      /*33*/{10,73,17,85,-1,-1},
199      /*34*/{-1,-1},
200      /*35*/{-1,-1},
201      /*36*/{8,37,15,39,27,38,-1,-1},
202      /*37*/{9,48,20,49,28,47,-1,-1},
203      /*38*/{-1,-1},
204      /*39*/{-1,-1},
205      /*40*/{-1,-1},
206      /*41*/{28,43,-1,-1},
207      /*42*/{-1,-1},
208      /*43*/{39,44,-1,-1},
209      /*44*/{-1,-1},
210      /*45*/{-1,-1},
211      /*46*/{41,69,-1,-1},
212      /*47*/{40,51,-1,-1},
213      /*48*/{20,50,28,47,-1,-1},
214      /*49*/{-1,-1},
215      /*50*/{-1,-1},
216      /*51*/{-1,-1},
217      /*52*/{21,55,25,53,26,56,27,54,-1,-1},
218      /*53*/{-1,-1},
219      /*54*/{-1,-1},
220      /*55*/{22,60,29,59,-1,-1},
221      /*56*/{-1,-1},
222      /*57*/{-1,-1},
223      /*58*/{-1,-1},
224      /*59*/{27,62,31,63,-1,-1},
225      /*60*/{-1,-1},
226      /*61*/{30,65,-1,-1},
227      /*62*/{-1,-1},
228      /*63*/{-1,-1},
229      /*64*/{-1,-1},
230      /*65*/{-1,-1},
231      /*66*/{21,55,26,68,27,54,-1,-1},
232      /*67*/{-1,-1},
233      /*68*/{-1,-1},
234      /*69*/{-1,-1},
235      /*70*/{-1,-1},
236      /*71*/{10,73,17,74,-1,-1},
237      /*72*/{38,82,-1,-1},
238      /*73*/{-1,-1},
239      /*74*/{19,76,24,77,-1,-1},
240      /*75*/{-1,-1},
241      /*76*/{36,79,-1,-1},
242      /*77*/{-1,-1},
243      /*78*/{24,81,-1,-1},
244      /*79*/{-1,-1},
245      /*80*/{-1,-1},
246      /*81*/{-1,-1},
247      /*82*/{-1,-1},
248      /*83*/{-1,-1},
249      /*84*/{37,93,-1,-1},
250      /*85*/{18,88,23,87,-1,-1},
251      /*86*/{-1,-1},
252      /*87*/{-1,-1},
253      /*88*/{35,89,-1,-1},
254      /*89*/{-1,-1},
255      /*90*/{23,91,-1,-1},
256      /*91*/{-1,-1},
257      /*92*/{-1,-1},
258      /*93*/{-1,-1},
259      /*94*/{-1,-1},
260      /*95*/{-1,-1},
261      /*96*/{-1,-1},
262      /*97*/{-1,-1},
263      /*98*/{10,99,-1,-1},
264      /*99*/{-1,-1},
265      /*100*/{-1,-1},
266      /*101*/{-1,-1},
267      /*102*/{-1,-1},
268      /*103*/{-1,-1},
269      /*104*/{-1,-1},
270      /*105*/{-1,-1},
271      /*106*/{-1,-1},
272      /*107*/{-1,-1},
273      /*108*/{-1,-1},
274      /*109*/{-1,-1},
275      /*110*/{-1,-1},
276      /*111*/{34,112,-1,-1},
277      /*112*/{-1,-1},
278      /*113*/{-1,-1},
279      /*114*/{-1,-1},
280      /*115*/{-1,-1},
281      /*116*/{8,117,15,39,27,38,-1,-1},
282      /*117*/{9,118,20,49,28,47,-1,-1},
283      /*118*/{20,50,28,47,-1,-1},
284      /*119*/{-1,-1},
285    };
286  
287    /** access to reduce_goto table */
reduce_table()288    public short[][] reduce_table() {return _reduce_table;}
289  
290    /** instance of action encapsulation class */
291    protected CUP$actions action_obj;
292  
293    /** action encapsulation object initializer */
init_actions()294    protected void init_actions()
295      {
296        action_obj = new CUP$actions();
297      }
298  
299    /** invoke a user supplied parse action */
do_action( int act_num, java_cup.runtime.lr_parser parser, java.util.Stack stack, int top)300    public java_cup.runtime.symbol do_action(
301      int                        act_num,
302      java_cup.runtime.lr_parser parser,
303      java.util.Stack            stack,
304      int                        top)
305      throws java.lang.Exception
306    {
307      /* call code in generated class */
308      return action_obj.CUP$do_action(act_num, parser, stack, top);
309    }
310  
311    /** start state */
start_state()312    public int start_state() {return 0;}
313    /** start production */
start_production()314    public int start_production() {return 0;}
315  
316    /** EOF symbol index */
EOF_sym()317    public int EOF_sym() {return 0;}
318  
319    /** error symbol index */
error_sym()320    public int error_sym() {return 1;}
321  
322  
323    /** user initialization */
user_init()324    public void user_init() throws java.lang.Exception
325      {
326   lexer.init();
327      }
328  
329    /** scan to get the next token */
scan()330    public java_cup.runtime.token scan()
331      throws java.lang.Exception
332      {
333   return lexer.next_token();
334      }
335  
336  
337  
338    /* override error routines */
339  
report_fatal_error( String message, Object info)340    public void report_fatal_error(
341      String   message,
342      Object   info)
343      {
344        done_parsing();
345        lexer.emit_error(message);
346        System.err.println("Can't recover from previous error(s), giving up.");
347        System.exit(1);
348      }
349  
report_error(String message, Object info)350      public void report_error(String message, Object info)
351      {
352        lexer.emit_error(message);
353      }
354  
355  };
356  
357  /** JavaCup generated class to encapsulate user supplied action code.*/
358  class CUP$actions {
359  
360  
361    /** helper routine to clone a new production part adding a given label */
add_lab(production_part part, String lab)362    protected production_part add_lab(production_part part, String lab)
363      throws internal_error
364      {
365        /* if there is no label, or this is an action, just return the original */
366        if (lab == null || part.is_action()) return part;
367  
368        /* otherwise build a new one with the given label attached */
369        return new symbol_part(((symbol_part)part).the_symbol(),lab);
370      }
371  
372    /** max size of right hand side we will support */
373    protected final int MAX_RHS = 200;
374  
375    /** array for accumulating right hand side parts */
376    protected production_part[] rhs_parts = new production_part[MAX_RHS];
377  
378    /** where we are currently in building a right hand side */
379    protected int rhs_pos = 0;
380  
381    /** start a new right hand side */
new_rhs()382    protected void new_rhs() {rhs_pos = 0; }
383  
384    /** add a new right hand side part */
add_rhs_part(production_part part)385    protected void add_rhs_part(production_part part) throws java.lang.Exception
386      {
387        if (rhs_pos >= MAX_RHS)
388      throw new Exception("Internal Error: Productions limited to " +
389                   MAX_RHS + " symbols and actions");
390  
391        rhs_parts[rhs_pos] = part;
392        rhs_pos++;
393      }
394  
395    /** string to build up multiple part names */
396    protected String multipart_name = new String();
397  
398    /** append a new name segment to the accumulated multipart name */
append_multipart(String name)399    protected void append_multipart(String name)
400      {
401        String dot = "";
402  
403        /* if we aren't just starting out, put on a dot */
404        if (multipart_name.length() != 0)  dot = ".";
405  
406        multipart_name = multipart_name.concat(dot + name);
407      }
408  
409    /** table of declared symbols -- contains production parts indexed by name */
410    protected Hashtable symbols = new Hashtable();
411  
412    /** table of just non terminals -- contains non_terminals indexed by name */
413    protected Hashtable non_terms = new Hashtable();
414  
415    /** declared start non_terminal */
416    protected non_terminal start_nt = null;
417  
418    /** left hand side non terminal of the current production */
419    protected non_terminal lhs_nt;
420  
421  
422  
423    /** Constructor */
CUP$actions()424    CUP$actions() { }
425  
426    /** Method with the actual generated action code. */
CUP$do_action( int CUP$act_num, java_cup.runtime.lr_parser CUP$parser, java.util.Stack CUP$stack, int CUP$top)427    public final java_cup.runtime.symbol CUP$do_action(
428      int                        CUP$act_num,
429      java_cup.runtime.lr_parser CUP$parser,
430      java.util.Stack            CUP$stack,
431      int                        CUP$top)
432      throws java.lang.Exception
433      {
434        /* object for return from actions */
435        java_cup.runtime.symbol CUP$result;
436  
437        /* select the action based on the action number */
438        switch (CUP$act_num)
439          {
440            /*. . . . . . . . . . . . . . . . . . . .*/
441            case 64: // empty ::=
442              {
443                CUP$result = new java_cup.runtime.symbol(/*empty*/27);
444  
445              }
446            return CUP$result;
447  
448            /*. . . . . . . . . . . . . . . . . . . .*/
449            case 63: // label_id ::= ID
450              {
451                CUP$result = new java_cup.runtime.str_token(/*label_id*/30);
452                 ((java_cup.runtime.str_token)CUP$result).str_val = (/*the_id*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-0)).str_val;
453              }
454            return CUP$result;
455  
456            /*. . . . . . . . . . . . . . . . . . . .*/
457            case 62: // symbol_id ::= ID
458              {
459                CUP$result = new java_cup.runtime.str_token(/*symbol_id*/29);
460                 ((java_cup.runtime.str_token)CUP$result).str_val = (/*the_id*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-0)).str_val;
461              }
462            return CUP$result;
463  
464            /*. . . . . . . . . . . . . . . . . . . .*/
465            case 61: // nt_id ::= ID
466              {
467                CUP$result = new java_cup.runtime.str_token(/*nt_id*/28);
468                 ((java_cup.runtime.str_token)CUP$result).str_val = (/*the_id*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-0)).str_val;
469              }
470            return CUP$result;
471  
472            /*. . . . . . . . . . . . . . . . . . . .*/
473            case 60: // new_non_term_id ::= ID
474              {
475                CUP$result = new java_cup.runtime.symbol(/*new_non_term_id*/24);
476  
477        /* see if this non terminal has been declared before */
478        if (symbols.get((/*non_term_id*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-0)).str_val) != null)
479          {
480            /* issue a message */
481            lexer.emit_error( "Symbol \"" + (/*non_term_id*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-0)).str_val +
482                                    "\" has already been declared");
483          }
484        else
485          {
486            /* build the non terminal object */
487                non_terminal this_nt =
488          new non_terminal((/*non_term_id*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-0)).str_val, multipart_name);
489  
490            /* put it in the non_terms table */
491            non_terms.put((/*non_term_id*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-0)).str_val, this_nt);
492  
493            /* build a production_part and put it in the symbols table */
494            symbols.put((/*non_term_id*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-0)).str_val, new symbol_part(this_nt));
495          }
496  
497              }
498            return CUP$result;
499  
500            /*. . . . . . . . . . . . . . . . . . . .*/
501            case 59: // new_term_id ::= ID
502              {
503                CUP$result = new java_cup.runtime.symbol(/*new_term_id*/23);
504  
505        /* see if this terminal has been declared before */
506        if (symbols.get((/*term_id*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-0)).str_val) != null)
507          {
508            /* issue a message */
509            lexer.emit_error("Symbol \"" + (/*term_id*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-0)).str_val +
510                 "\" has already been declared");
511          }
512        else
513          {
514            /* build a production_part and put it in the table */
515            symbols.put((/*term_id*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-0)).str_val,
516              new symbol_part(new terminal((/*term_id*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-0)).str_val, multipart_name)));
517          }
518  
519              }
520            return CUP$result;
521  
522            /*. . . . . . . . . . . . . . . . . . . .*/
523            case 58: // type_id ::= multipart_id
524              {
525                CUP$result = new java_cup.runtime.symbol(/*type_id*/17);
526  
527              }
528            return CUP$result;
529  
530            /*. . . . . . . . . . . . . . . . . . . .*/
531            case 57: // import_id ::= multipart_id
532              {
533                CUP$result = new java_cup.runtime.symbol(/*import_id*/12);
534  
535              }
536            return CUP$result;
537  
538            /*. . . . . . . . . . . . . . . . . . . .*/
539            case 56: // import_id ::= multipart_id DOT STAR
540              {
541                CUP$result = new java_cup.runtime.symbol(/*import_id*/12);
542                 append_multipart("*");
543              }
544            return CUP$result;
545  
546            /*. . . . . . . . . . . . . . . . . . . .*/
547            case 55: // multipart_id ::= ID
548              {
549                CUP$result = new java_cup.runtime.symbol(/*multipart_id*/10);
550                 append_multipart((/*an_id*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-0)).str_val);
551              }
552            return CUP$result;
553  
554            /*. . . . . . . . . . . . . . . . . . . .*/
555            case 54: // multipart_id ::= multipart_id DOT ID
556              {
557                CUP$result = new java_cup.runtime.symbol(/*multipart_id*/10);
558                 append_multipart((/*another_id*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-0)).str_val);
559              }
560            return CUP$result;
561  
562            /*. . . . . . . . . . . . . . . . . . . .*/
563            case 53: // opt_label ::= empty
564              {
565                CUP$result = new java_cup.runtime.str_token(/*opt_label*/31);
566                 ((java_cup.runtime.str_token)CUP$result).str_val = null;
567              }
568            return CUP$result;
569  
570            /*. . . . . . . . . . . . . . . . . . . .*/
571            case 52: // opt_label ::= COLON label_id
572              {
573                CUP$result = new java_cup.runtime.str_token(/*opt_label*/31);
574                 ((java_cup.runtime.str_token)CUP$result).str_val = (/*labid*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-0)).str_val;
575              }
576            return CUP$result;
577  
578            /*. . . . . . . . . . . . . . . . . . . .*/
579            case 51: // prod_part ::= CODE_STRING
580              {
581                CUP$result = new java_cup.runtime.symbol(/*prod_part*/22);
582  
583        /* add a new production part */
584        add_rhs_part(new action_part((/*code_str*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-0)).str_val));
585  
586              }
587            return CUP$result;
588  
589            /*. . . . . . . . . . . . . . . . . . . .*/
590            case 50: // prod_part ::= symbol_id opt_label
591              {
592                CUP$result = new java_cup.runtime.symbol(/*prod_part*/22);
593  
594        /* try to look up the id */
595        production_part symb = (production_part)symbols.get((/*symid*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-1)).str_val);
596  
597        /* if that fails, symbol is undeclared */
598        if (symb == null)
599          {
600            if (lexer.error_count == 0)
601              lexer.emit_error("Symbol \"" + (/*symid*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-1)).str_val +
602                     "\" has not been declared");
603          }
604        else
605          {
606            /* add a labeled production part */
607            add_rhs_part(add_lab(symb, (/*labid*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-0)).str_val));
608          }
609  
610              }
611            return CUP$result;
612  
613            /*. . . . . . . . . . . . . . . . . . . .*/
614            case 49: // prod_part_list ::= empty
615              {
616                CUP$result = new java_cup.runtime.symbol(/*prod_part_list*/21);
617  
618              }
619            return CUP$result;
620  
621            /*. . . . . . . . . . . . . . . . . . . .*/
622            case 48: // prod_part_list ::= prod_part_list prod_part
623              {
624                CUP$result = new java_cup.runtime.symbol(/*prod_part_list*/21);
625  
626              }
627            return CUP$result;
628  
629            /*. . . . . . . . . . . . . . . . . . . .*/
630            case 47: // rhs ::= prod_part_list
631              {
632                CUP$result = new java_cup.runtime.symbol(/*rhs*/26);
633  
634        if (lhs_nt != null)
635          {
636            /* build the production */
637            production p = new production(lhs_nt, rhs_parts, rhs_pos);
638  
639            /* if we have no start non-terminal declared and this is
640           the first production, make its lhs nt the start_nt
641           and build a special start production for it. */
642                if (start_nt == null)
643          {
644            start_nt = lhs_nt;
645  
646                /* build a special start production */
647                new_rhs();
648                add_rhs_part(new symbol_part(start_nt));
649                add_rhs_part(new symbol_part(terminal.EOF));
650                emit.start_production =
651               new production(non_terminal.START_nt, rhs_parts, rhs_pos);
652                new_rhs();
653          }
654          }
655  
656        /* reset the rhs accumulation in any case */
657        new_rhs();
658  
659              }
660            return CUP$result;
661  
662            /*. . . . . . . . . . . . . . . . . . . .*/
663            case 46: // rhs_list ::= rhs
664              {
665                CUP$result = new java_cup.runtime.symbol(/*rhs_list*/25);
666  
667              }
668            return CUP$result;
669  
670            /*. . . . . . . . . . . . . . . . . . . .*/
671            case 45: // rhs_list ::= rhs_list BAR rhs
672              {
673                CUP$result = new java_cup.runtime.symbol(/*rhs_list*/25);
674  
675              }
676            return CUP$result;
677  
678            /*. . . . . . . . . . . . . . . . . . . .*/
679            case 44: // production ::= error NT$9 SEMI
680              {
681                CUP$result = new java_cup.runtime.symbol(/*production*/20);
682  
683              }
684            return CUP$result;
685  
686            /*. . . . . . . . . . . . . . . . . . . .*/
687            case 43: // NT$9 ::=
688              {
689                CUP$result = new java_cup.runtime.token(/*NT$9*/41);
690                 lexer.emit_error("Syntax Error");
691              }
692            return CUP$result;
693  
694            /*. . . . . . . . . . . . . . . . . . . .*/
695            case 42: // production ::= nt_id NT$8 COLON_COLON_EQUALS rhs_list SEMI
696              {
697                CUP$result = new java_cup.runtime.symbol(/*production*/20);
698  
699              }
700            return CUP$result;
701  
702            /*. . . . . . . . . . . . . . . . . . . .*/
703            case 41: // NT$8 ::=
704              {
705                CUP$result = new java_cup.runtime.token(/*NT$8*/40);
706  
707        /* lookup the lhs nt */
708        lhs_nt = (non_terminal)non_terms.get((/*lhs_id*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-0)).str_val);
709  
710            /* if it wasn't declared, emit a message */
711        if (lhs_nt == null)
712          {
713            if (lexer.error_count == 0)
714              lexer.emit_error("LHS non terminal \"" + (/*lhs_id*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-0)).str_val +
715                     "\" has not been declared");
716          }
717  
718        /* reset the rhs accumulation */
719        new_rhs();
720  
721              }
722            return CUP$result;
723  
724            /*. . . . . . . . . . . . . . . . . . . .*/
725            case 40: // production_list ::= production
726              {
727                CUP$result = new java_cup.runtime.symbol(/*production_list*/9);
728  
729              }
730            return CUP$result;
731  
732            /*. . . . . . . . . . . . . . . . . . . .*/
733            case 39: // production_list ::= production_list production
734              {
735                CUP$result = new java_cup.runtime.symbol(/*production_list*/9);
736  
737              }
738            return CUP$result;
739  
740            /*. . . . . . . . . . . . . . . . . . . .*/
741            case 38: // start_spec ::= empty
742              {
743                CUP$result = new java_cup.runtime.symbol(/*start_spec*/8);
744  
745              }
746            return CUP$result;
747  
748            /*. . . . . . . . . . . . . . . . . . . .*/
749            case 37: // start_spec ::= START WITH nt_id NT$7 SEMI
750              {
751                CUP$result = new java_cup.runtime.symbol(/*start_spec*/8);
752  
753              }
754            return CUP$result;
755  
756            /*. . . . . . . . . . . . . . . . . . . .*/
757            case 36: // NT$7 ::=
758              {
759                CUP$result = new java_cup.runtime.token(/*NT$7*/39);
760  
761        /* verify that the name has been declared as a non terminal */
762        non_terminal nt = (non_terminal)non_terms.get((/*start_name*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-0)).str_val);
763        if (nt == null)
764          {
765            lexer.emit_error( "Start non terminal \"" + (/*start_name*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-0)).str_val +
766                         "\" has not been declared");
767          }
768            else
769          {
770            /* remember the non-terminal for later */
771            start_nt = nt;
772  
773            /* build a special start production */
774            new_rhs();
775            add_rhs_part(new symbol_part(start_nt));
776            add_rhs_part(new symbol_part(terminal.EOF));
777            emit.start_production =
778               new production(non_terminal.START_nt, rhs_parts, rhs_pos);
779            new_rhs();
780          }
781  
782              }
783            return CUP$result;
784  
785            /*. . . . . . . . . . . . . . . . . . . .*/
786            case 35: // non_term_name_list ::= new_non_term_id
787              {
788                CUP$result = new java_cup.runtime.symbol(/*non_term_name_list*/19);
789  
790              }
791            return CUP$result;
792  
793            /*. . . . . . . . . . . . . . . . . . . .*/
794            case 34: // non_term_name_list ::= non_term_name_list COMMA new_non_term_id
795              {
796                CUP$result = new java_cup.runtime.symbol(/*non_term_name_list*/19);
797  
798              }
799            return CUP$result;
800  
801            /*. . . . . . . . . . . . . . . . . . . .*/
802            case 33: // term_name_list ::= new_term_id
803              {
804                CUP$result = new java_cup.runtime.symbol(/*term_name_list*/18);
805  
806              }
807            return CUP$result;
808  
809            /*. . . . . . . . . . . . . . . . . . . .*/
810            case 32: // term_name_list ::= term_name_list COMMA new_term_id
811              {
812                CUP$result = new java_cup.runtime.symbol(/*term_name_list*/18);
813  
814              }
815            return CUP$result;
816  
817            /*. . . . . . . . . . . . . . . . . . . .*/
818            case 31: // symbol ::= NON TERMINAL error NT$6 SEMI
819              {
820                CUP$result = new java_cup.runtime.symbol(/*symbol*/15);
821  
822              }
823            return CUP$result;
824  
825            /*. . . . . . . . . . . . . . . . . . . .*/
826            case 30: // NT$6 ::=
827              {
828                CUP$result = new java_cup.runtime.token(/*NT$6*/38);
829  
830        /* reset the accumulated multipart name */
831        multipart_name = new String();
832  
833              }
834            return CUP$result;
835  
836            /*. . . . . . . . . . . . . . . . . . . .*/
837            case 29: // symbol ::= TERMINAL error NT$5 SEMI
838              {
839                CUP$result = new java_cup.runtime.symbol(/*symbol*/15);
840  
841              }
842            return CUP$result;
843  
844            /*. . . . . . . . . . . . . . . . . . . .*/
845            case 28: // NT$5 ::=
846              {
847                CUP$result = new java_cup.runtime.token(/*NT$5*/37);
848  
849        /* reset the accumulated multipart name */
850        multipart_name = new String();
851  
852              }
853            return CUP$result;
854  
855            /*. . . . . . . . . . . . . . . . . . . .*/
856            case 27: // symbol ::= NON TERMINAL type_id non_term_name_list NT$4 SEMI
857              {
858                CUP$result = new java_cup.runtime.symbol(/*symbol*/15);
859  
860              }
861            return CUP$result;
862  
863            /*. . . . . . . . . . . . . . . . . . . .*/
864            case 26: // NT$4 ::=
865              {
866                CUP$result = new java_cup.runtime.token(/*NT$4*/36);
867  
868        /* reset the accumulated multipart name */
869        multipart_name = new String();
870  
871              }
872            return CUP$result;
873  
874            /*. . . . . . . . . . . . . . . . . . . .*/
875            case 25: // symbol ::= TERMINAL type_id term_name_list NT$3 SEMI
876              {
877                CUP$result = new java_cup.runtime.symbol(/*symbol*/15);
878  
879              }
880            return CUP$result;
881  
882            /*. . . . . . . . . . . . . . . . . . . .*/
883            case 24: // NT$3 ::=
884              {
885                CUP$result = new java_cup.runtime.token(/*NT$3*/35);
886  
887        /* reset the accumulated multipart name */
888        multipart_name = new String();
889  
890              }
891            return CUP$result;
892  
893            /*. . . . . . . . . . . . . . . . . . . .*/
894            case 23: // symbol_list ::= symbol
895              {
896                CUP$result = new java_cup.runtime.symbol(/*symbol_list*/7);
897  
898              }
899            return CUP$result;
900  
901            /*. . . . . . . . . . . . . . . . . . . .*/
902            case 22: // symbol_list ::= symbol_list symbol
903              {
904                CUP$result = new java_cup.runtime.symbol(/*symbol_list*/7);
905  
906              }
907            return CUP$result;
908  
909            /*. . . . . . . . . . . . . . . . . . . .*/
910            case 21: // debug_grammar ::= empty
911              {
912                CUP$result = new java_cup.runtime.symbol(/*debug_grammar*/16);
913  
914              }
915            return CUP$result;
916  
917            /*. . . . . . . . . . . . . . . . . . . .*/
918            case 20: // debug_grammar ::= DEBUG WITH multipart_id SEMI
919              {
920                CUP$result = new java_cup.runtime.symbol(/*debug_grammar*/16);
921  
922        /* save the procedure name */
923            emit.debug_grammar = multipart_name;
924            /* reset the accumulated multipart name */
925            multipart_name = new String();
926  
927              }
928            return CUP$result;
929  
930            /*. . . . . . . . . . . . . . . . . . . .*/
931            case 19: // scan_code ::= empty
932              {
933                CUP$result = new java_cup.runtime.symbol(/*scan_code*/14);
934  
935              }
936            return CUP$result;
937  
938            /*. . . . . . . . . . . . . . . . . . . .*/
939            case 18: // scan_code ::= SCAN WITH CODE_STRING SEMI
940              {
941                CUP$result = new java_cup.runtime.symbol(/*scan_code*/14);
942  
943        /* save the user code */
944        emit.scan_code = (/*user_code*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-1)).str_val;
945  
946              }
947            return CUP$result;
948  
949            /*. . . . . . . . . . . . . . . . . . . .*/
950            case 17: // init_code ::= empty
951              {
952                CUP$result = new java_cup.runtime.symbol(/*init_code*/13);
953  
954              }
955            return CUP$result;
956  
957            /*. . . . . . . . . . . . . . . . . . . .*/
958            case 16: // init_code ::= INIT WITH CODE_STRING SEMI
959              {
960                CUP$result = new java_cup.runtime.symbol(/*init_code*/13);
961  
962        /* save the user code */
963        emit.init_code = (/*user_code*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-1)).str_val;
964  
965              }
966            return CUP$result;
967  
968            /*. . . . . . . . . . . . . . . . . . . .*/
969            case 15: // parser_code_part ::= empty
970              {
971                CUP$result = new java_cup.runtime.symbol(/*parser_code_part*/6);
972  
973              }
974            return CUP$result;
975  
976            /*. . . . . . . . . . . . . . . . . . . .*/
977            case 14: // parser_code_part ::= PARSER CODE CODE_STRING SEMI
978              {
979                CUP$result = new java_cup.runtime.symbol(/*parser_code_part*/6);
980  
981        /* save the user included code string */
982        emit.parser_code = (/*user_code*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-1)).str_val;
983  
984              }
985            return CUP$result;
986  
987            /*. . . . . . . . . . . . . . . . . . . .*/
988            case 13: // action_code_part ::= empty
989              {
990                CUP$result = new java_cup.runtime.symbol(/*action_code_part*/5);
991  
992              }
993            return CUP$result;
994  
995            /*. . . . . . . . . . . . . . . . . . . .*/
996            case 12: // action_code_part ::= ACTION CODE CODE_STRING SEMI
997              {
998                CUP$result = new java_cup.runtime.symbol(/*action_code_part*/5);
999  
1000        /* save the user included code string */
1001        emit.action_code = (/*user_code*/(java_cup.runtime.str_token)CUP$stack.elementAt(CUP$top-1)).str_val;
1002  
1003              }
1004            return CUP$result;
1005  
1006            /*. . . . . . . . . . . . . . . . . . . .*/
1007            case 11: // code_part ::= action_code_part parser_code_part
1008              {
1009                CUP$result = new java_cup.runtime.symbol(/*code_part*/4);
1010  
1011              }
1012            return CUP$result;
1013  
1014            /*. . . . . . . . . . . . . . . . . . . .*/
1015            case 10: // import_spec ::= IMPORT import_id NT$2 SEMI
1016              {
1017                CUP$result = new java_cup.runtime.symbol(/*import_spec*/11);
1018  
1019              }
1020            return CUP$result;
1021  
1022            /*. . . . . . . . . . . . . . . . . . . .*/
1023            case 9: // NT$2 ::=
1024              {
1025                CUP$result = new java_cup.runtime.token(/*NT$2*/34);
1026  
1027        /* save this import on the imports list */
1028        emit.import_list.push(multipart_name);
1029  
1030        /* reset the accumulated multipart name */
1031        multipart_name = new String();
1032  
1033              }
1034            return CUP$result;
1035  
1036            /*. . . . . . . . . . . . . . . . . . . .*/
1037            case 8: // import_list ::= empty
1038              {
1039                CUP$result = new java_cup.runtime.symbol(/*import_list*/3);
1040  
1041              }
1042            return CUP$result;
1043  
1044            /*. . . . . . . . . . . . . . . . . . . .*/
1045            case 7: // import_list ::= import_list import_spec
1046              {
1047                CUP$result = new java_cup.runtime.symbol(/*import_list*/3);
1048  
1049              }
1050            return CUP$result;
1051  
1052            /*. . . . . . . . . . . . . . . . . . . .*/
1053            case 6: // package_spec ::= empty
1054              {
1055                CUP$result = new java_cup.runtime.symbol(/*package_spec*/2);
1056  
1057              }
1058            return CUP$result;
1059  
1060            /*. . . . . . . . . . . . . . . . . . . .*/
1061            case 5: // package_spec ::= PACKAGE multipart_id NT$1 SEMI
1062              {
1063                CUP$result = new java_cup.runtime.symbol(/*package_spec*/2);
1064  
1065              }
1066            return CUP$result;
1067  
1068            /*. . . . . . . . . . . . . . . . . . . .*/
1069            case 4: // NT$1 ::=
1070              {
1071                CUP$result = new java_cup.runtime.token(/*NT$1*/33);
1072  
1073        /* save the package name */
1074        emit.package_name = multipart_name;
1075  
1076        /* reset the accumulated multipart name */
1077        multipart_name = new String();
1078  
1079              }
1080            return CUP$result;
1081  
1082            /*. . . . . . . . . . . . . . . . . . . .*/
1083            case 3: // spec ::= error symbol_list start_spec production_list
1084              {
1085                CUP$result = new java_cup.runtime.symbol(/*spec*/1);
1086  
1087              }
1088            return CUP$result;
1089  
1090            /*. . . . . . . . . . . . . . . . . . . .*/
1091            case 2: // spec ::= NT$0 package_spec import_list code_part debug_grammar init_code scan_code symbol_list start_spec production_list
1092              {
1093                CUP$result = new java_cup.runtime.symbol(/*spec*/1);
1094  
1095              }
1096            return CUP$result;
1097  
1098            /*. . . . . . . . . . . . . . . . . . . .*/
1099            case 1: // NT$0 ::=
1100              {
1101                CUP$result = new java_cup.runtime.token(/*NT$0*/32);
1102  
1103            /* declare "error" as a terminal */
1104            symbols.put("error", new symbol_part(terminal.error));
1105  
1106            /* declare start non terminal */
1107            non_terms.put("$START", non_terminal.START_nt);
1108  
1109              }
1110            return CUP$result;
1111  
1112            /*. . . . . . . . . . . . . . . . . . . .*/
1113            case 0: // $START ::= spec EOF
1114              {
1115                CUP$result = new java_cup.runtime.token(/*$START*/0);
1116  
1117              }
1118            /* ACCEPT */
1119            CUP$parser.done_parsing();
1120            return CUP$result;
1121  
1122            /* . . . . . .*/
1123            default:
1124              throw new Exception(
1125                 "Invalid action number found in internal parse table");
1126  
1127          }
1128      }
1129  };
1130  
1131