
//----------------------------------------------------
// The following code was generated by CUP v0.10e
// Sun Dec 07 10:13:42 EST 1997
//----------------------------------------------------

package java_cup;

import java_cup.runtime.*;
import java.util.Hashtable;

public class parser extends java_cup.runtime.lr_parser {

  /** constructor */
  public parser() {super();}

  /** production table */
  protected static final short _production_table[][] = {
        {0, 2},     {39, 0},     {1, 10},     {1, 5},     {40, 0}, 
        {2, 4},     {2, 1},     {3, 2},     {3, 1},     {41, 0}, 
        {11, 4},     {4, 2},     {5, 4},     {5, 1},     {6, 4}, 
        {6, 1},     {13, 4},     {13, 1},     {14, 4},     {14, 1}, 
        {7, 2},     {7, 1},     {15, 3},     {15, 2},     {15, 4}, 
        {15, 3},     {42, 0},     {15, 4},     {43, 0},     {15, 5}, 
        {44, 0},     {31, 3},     {45, 0},     {32, 3},     {17, 3}, 
        {17, 1},     {18, 3},     {18, 1},     {27, 1},     {27, 1}, 
        {30, 2},     {30, 1},     {46, 0},     {28, 5},     {47, 0}, 
        {28, 5},     {48, 0},     {28, 5},     {29, 3},     {29, 1}, 
        {37, 1},     {38, 1},     {49, 0},     {8, 5},     {8, 1}, 
        {9, 2},     {9, 1},     {50, 0},     {51, 0},     {19, 6}, 
        {52, 0},     {19, 3},     {24, 3},     {24, 1},     {25, 3}, 
        {25, 1},     {20, 2},     {20, 1},     {21, 2},     {21, 1}, 
        {36, 2},     {36, 1},     {10, 3},     {10, 1},     {12, 3}, 
        {12, 1},     {16, 1},     {22, 1},     {23, 1},     {33, 1}, 
        {34, 1},     {35, 1},     {26, 0}  };

  /** access to production table */
  public short[][] production_table() {return _production_table;}

  /** parse action table */
  protected static final short[][] _action_table = {
    /*0*/{1,4,2,-2,3,-2,5,-2,6,-2,7,-2,8,-2,9,-2,10,-2,-1,0},
    /*1*/{0,147,-1,0},
    /*2*/{2,103,3,-83,5,-83,6,-83,7,-83,8,-83,9,-83,10,-83,-1,0},
    /*3*/{7,5,8,8,-1,0},
    /*4*/{1,90,25,89,-1,0},
    /*5*/{1,-22,7,-22,8,-22,12,-22,20,-22,25,-22,-1,0},
    /*6*/{1,-83,7,5,8,8,12,-83,20,27,25,-83,-1,0},
    /*7*/{7,9,-1,0},
    /*8*/{1,14,25,12,-1,0},
    /*9*/{13,-33,14,23,-1,0},
    /*10*/{13,-38,14,-38,-1,0},
    /*11*/{13,-79,14,-79,16,-74,25,-74,-1,0},
    /*12*/{1,-26,7,-26,8,-26,12,-26,20,-26,25,-26,-1,0},
    /*13*/{13,-29,-1,0},
    /*14*/{25,19,-1,0},
    /*15*/{16,17,25,-77,-1,0},
    /*16*/{25,18,-1,0},
    /*17*/{13,-73,16,-73,25,-73,-1,0},
    /*18*/{13,-79,14,-79,-1,0},
    /*19*/{1,-25,7,-25,8,-25,12,-25,20,-25,25,-25,-1,0},
    /*20*/{13,22,-1,0},
    /*21*/{1,-30,7,-30,8,-30,12,-30,20,-30,25,-30,-1,0},
    /*22*/{25,19,-1,0},
    /*23*/{13,25,-1,0},
    /*24*/{1,-34,7,-34,8,-34,12,-34,20,-34,25,-34,-1,0},
    /*25*/{13,-37,14,-37,-1,0},
    /*26*/{21,72,22,73,23,71,-1,0},
    /*27*/{1,-21,7,-21,8,-21,12,-21,20,-21,25,-21,-1,0},
    /*28*/{1,-40,12,-40,25,-40,-1,0},
    /*29*/{1,-39,12,-39,20,27,25,-39,-1,0},
    /*30*/{1,-83,12,35,25,-83,-1,0},
    /*31*/{1,-42,12,-42,20,-42,25,-42,-1,0},
    /*32*/{1,-55,25,-55,-1,0},
    /*33*/{1,41,25,37,-1,0},
    /*34*/{11,36,-1,0},
    /*35*/{25,37,-1,0},
    /*36*/{13,-80,18,-80,-1,0},
    /*37*/{13,-53,-1,0},
    /*38*/{13,40,-1,0},
    /*39*/{1,-54,25,-54,-1,0},
    /*40*/{13,-61,-1,0},
    /*41*/{18,-58,-1,0},
    /*42*/{0,-4,1,41,25,37,-1,0},
    /*43*/{0,-57,1,-57,25,-57,-1,0},
    /*44*/{0,-56,1,-56,25,-56,-1,0},
    /*45*/{18,47,-1,0},
    /*46*/{13,-59,19,-59,24,-59,25,-59,26,-59,-1,0},
    /*47*/{13,-83,19,-83,24,-83,25,-83,26,-83,-1,0},
    /*48*/{13,-68,19,-68,24,-68,25,-68,26,-68,-1,0},
    /*49*/{13,-66,19,-66,24,57,25,58,26,56,-1,0},
    /*50*/{13,-64,19,-64,-1,0},
    /*51*/{13,53,19,54,-1,0},
    /*52*/{0,-60,1,-60,25,-60,-1,0},
    /*53*/{13,-83,19,-83,24,-83,25,-83,26,-83,-1,0},
    /*54*/{13,-63,19,-63,-1,0},
    /*55*/{13,-70,19,-70,24,-70,25,-70,26,-70,-1,0},
    /*56*/{25,58,-1,0},
    /*57*/{13,-81,14,-81,17,-81,19,-81,24,-81,25,-81,26,-81,-1,0},
    /*58*/{13,-83,17,63,19,-83,24,-83,25,-83,26,-83,-1,0},
    /*59*/{13,-67,19,-67,24,-67,25,-67,26,-67,-1,0},
    /*60*/{13,-72,19,-72,24,-72,25,-72,26,-72,-1,0},
    /*61*/{13,-69,19,-69,24,-69,25,-69,26,-69,-1,0},
    /*62*/{25,64,-1,0},
    /*63*/{13,-82,19,-82,24,-82,25,-82,26,-82,-1,0},
    /*64*/{13,-71,19,-71,24,-71,25,-71,26,-71,-1,0},
    /*65*/{13,-52,14,-52,19,-52,-1,0},
    /*66*/{13,-65,19,-65,-1,0},
    /*67*/{13,69,-1,0},
    /*68*/{0,-62,1,-62,25,-62,-1,0},
    /*69*/{1,-41,12,-41,20,-41,25,-41,-1,0},
    /*70*/{25,-47,-1,0},
    /*71*/{25,-43,-1,0},
    /*72*/{25,-45,-1,0},
    /*73*/{25,58,-1,0},
    /*74*/{13,-51,14,-51,-1,0},
    /*75*/{13,78,14,79,-1,0},
    /*76*/{13,-50,14,-50,-1,0},
    /*77*/{1,-46,12,-46,20,-46,25,-46,-1,0},
    /*78*/{25,58,-1,0},
    /*79*/{13,-49,14,-49,-1,0},
    /*80*/{25,58,-1,0},
    /*81*/{13,83,14,79,-1,0},
    /*82*/{1,-44,12,-44,20,-44,25,-44,-1,0},
    /*83*/{25,58,-1,0},
    /*84*/{13,86,14,79,-1,0},
    /*85*/{1,-48,12,-48,20,-48,25,-48,-1,0},
    /*86*/{13,-31,14,98,-1,0},
    /*87*/{13,-36,14,-36,-1,0},
    /*88*/{13,-78,14,-78,16,-74,25,-74,-1,0},
    /*89*/{13,-27,-1,0},
    /*90*/{1,-24,7,-24,8,-24,12,-24,20,-24,25,-24,-1,0},
    /*91*/{25,93,-1,0},
    /*92*/{13,-78,14,-78,-1,0},
    /*93*/{1,-23,7,-23,8,-23,12,-23,20,-23,25,-23,-1,0},
    /*94*/{13,96,-1,0},
    /*95*/{1,-28,7,-28,8,-28,12,-28,20,-28,25,-28,-1,0},
    /*96*/{13,100,-1,0},
    /*97*/{25,93,-1,0},
    /*98*/{13,-35,14,-35,-1,0},
    /*99*/{1,-32,7,-32,8,-32,12,-32,20,-32,25,-32,-1,0},
    /*100*/{3,-7,5,-7,6,-7,7,-7,8,-7,9,-7,10,-7,-1,0},
    /*101*/{3,-83,5,-83,6,-83,7,-83,8,-83,9,-83,10,-83,-1,0},
    /*102*/{25,104,-1,0},
    /*103*/{13,-74,16,-74,-1,0},
    /*104*/{13,-5,16,17,-1,0},
    /*105*/{13,107,-1,0},
    /*106*/{3,-6,5,-6,6,-6,7,-6,8,-6,9,-6,10,-6,-1,0},
    /*107*/{3,114,5,111,6,-83,7,-83,8,-83,9,-83,10,-83,-1,0},
    /*108*/{3,-9,5,-9,6,-9,7,-9,8,-9,9,-9,10,-9,-1,0},
    /*109*/{6,-14,7,-14,8,-14,9,-14,10,-14,-1,0},
    /*110*/{4,144,-1,0},
    /*111*/{6,140,7,-83,8,-83,9,-83,10,-83,-1,0},
    /*112*/{3,-8,5,-8,6,-8,7,-8,8,-8,9,-8,10,-8,-1,0},
    /*113*/{25,104,-1,0},
    /*114*/{7,-83,8,-83,9,118,10,-83,-1,0},
    /*115*/{7,-18,8,-18,10,-18,-1,0},
    /*116*/{7,-83,8,-83,10,124,-1,0},
    /*117*/{11,119,-1,0},
    /*118*/{26,120,-1,0},
    /*119*/{13,121,-1,0},
    /*120*/{7,-17,8,-17,10,-17,-1,0},
    /*121*/{7,-20,8,-20,-1,0},
    /*122*/{7,5,8,8,-1,0},
    /*123*/{11,125,-1,0},
    /*124*/{26,126,-1,0},
    /*125*/{13,127,-1,0},
    /*126*/{7,-19,8,-19,-1,0},
    /*127*/{1,-83,7,5,8,8,12,-83,20,27,25,-83,-1,0},
    /*128*/{1,-83,12,35,25,-83,-1,0},
    /*129*/{1,41,25,37,-1,0},
    /*130*/{0,-3,1,41,25,37,-1,0},
    /*131*/{13,-10,-1,0},
    /*132*/{13,-76,16,134,-1,0},
    /*133*/{15,135,25,18,-1,0},
    /*134*/{13,-75,-1,0},
    /*135*/{13,137,-1,0},
    /*136*/{3,-11,5,-11,6,-11,7,-11,8,-11,9,-11,10,-11,-1,0},
    /*137*/{7,-16,8,-16,9,-16,10,-16,-1,0},
    /*138*/{7,-12,8,-12,9,-12,10,-12,-1,0},
    /*139*/{4,141,-1,0},
    /*140*/{26,142,-1,0},
    /*141*/{13,143,-1,0},
    /*142*/{7,-15,8,-15,9,-15,10,-15,-1,0},
    /*143*/{26,145,-1,0},
    /*144*/{13,146,-1,0},
    /*145*/{6,-13,7,-13,8,-13,9,-13,10,-13,-1,0},
    /*146*/{0,-1,-1,0},
  };

  /** access to parse action table */
  public short[][] action_table() {return _action_table;}

  /** reduce_goto table */
  protected static final short[][] _reduce_table = {
    /*0*/{1,1,39,2,-1,-1},
    /*1*/{-1,-1},
    /*2*/{2,101,26,100,-1,-1},
    /*3*/{7,6,15,5,-1,-1},
    /*4*/{10,15,16,91,17,86,22,87,31,90,-1,-1},
    /*5*/{-1,-1},
    /*6*/{15,27,26,28,27,30,28,31,30,29,-1,-1},
    /*7*/{-1,-1},
    /*8*/{10,15,16,14,18,9,23,10,32,12,-1,-1},
    /*9*/{45,23,-1,-1},
    /*10*/{-1,-1},
    /*11*/{-1,-1},
    /*12*/{-1,-1},
    /*13*/{43,20,-1,-1},
    /*14*/{18,9,23,10,32,19,-1,-1},
    /*15*/{-1,-1},
    /*16*/{-1,-1},
    /*17*/{-1,-1},
    /*18*/{-1,-1},
    /*19*/{-1,-1},
    /*20*/{-1,-1},
    /*21*/{-1,-1},
    /*22*/{23,25,-1,-1},
    /*23*/{-1,-1},
    /*24*/{-1,-1},
    /*25*/{-1,-1},
    /*26*/{-1,-1},
    /*27*/{-1,-1},
    /*28*/{-1,-1},
    /*29*/{28,69,-1,-1},
    /*30*/{8,33,26,32,-1,-1},
    /*31*/{-1,-1},
    /*32*/{-1,-1},
    /*33*/{9,42,19,43,33,41,-1,-1},
    /*34*/{-1,-1},
    /*35*/{33,37,-1,-1},
    /*36*/{-1,-1},
    /*37*/{49,38,-1,-1},
    /*38*/{-1,-1},
    /*39*/{-1,-1},
    /*40*/{52,67,-1,-1},
    /*41*/{50,45,-1,-1},
    /*42*/{19,44,33,41,-1,-1},
    /*43*/{-1,-1},
    /*44*/{-1,-1},
    /*45*/{-1,-1},
    /*46*/{51,47,-1,-1},
    /*47*/{20,49,24,51,25,50,26,48,-1,-1},
    /*48*/{-1,-1},
    /*49*/{21,59,34,58,-1,-1},
    /*50*/{-1,-1},
    /*51*/{-1,-1},
    /*52*/{-1,-1},
    /*53*/{20,49,25,54,26,48,-1,-1},
    /*54*/{-1,-1},
    /*55*/{-1,-1},
    /*56*/{34,65,38,66,-1,-1},
    /*57*/{-1,-1},
    /*58*/{26,60,36,61,-1,-1},
    /*59*/{-1,-1},
    /*60*/{-1,-1},
    /*61*/{-1,-1},
    /*62*/{35,64,-1,-1},
    /*63*/{-1,-1},
    /*64*/{-1,-1},
    /*65*/{-1,-1},
    /*66*/{-1,-1},
    /*67*/{-1,-1},
    /*68*/{-1,-1},
    /*69*/{-1,-1},
    /*70*/{48,83,-1,-1},
    /*71*/{46,80,-1,-1},
    /*72*/{47,73,-1,-1},
    /*73*/{29,75,34,65,37,76,38,74,-1,-1},
    /*74*/{-1,-1},
    /*75*/{-1,-1},
    /*76*/{-1,-1},
    /*77*/{-1,-1},
    /*78*/{34,65,37,79,38,74,-1,-1},
    /*79*/{-1,-1},
    /*80*/{29,81,34,65,37,76,38,74,-1,-1},
    /*81*/{-1,-1},
    /*82*/{-1,-1},
    /*83*/{29,84,34,65,37,76,38,74,-1,-1},
    /*84*/{-1,-1},
    /*85*/{-1,-1},
    /*86*/{44,96,-1,-1},
    /*87*/{-1,-1},
    /*88*/{-1,-1},
    /*89*/{42,94,-1,-1},
    /*90*/{-1,-1},
    /*91*/{17,86,22,87,31,93,-1,-1},
    /*92*/{-1,-1},
    /*93*/{-1,-1},
    /*94*/{-1,-1},
    /*95*/{-1,-1},
    /*96*/{-1,-1},
    /*97*/{22,98,-1,-1},
    /*98*/{-1,-1},
    /*99*/{-1,-1},
    /*100*/{-1,-1},
    /*101*/{3,107,26,108,-1,-1},
    /*102*/{10,104,-1,-1},
    /*103*/{-1,-1},
    /*104*/{40,105,-1,-1},
    /*105*/{-1,-1},
    /*106*/{-1,-1},
    /*107*/{4,114,5,111,11,112,26,109,-1,-1},
    /*108*/{-1,-1},
    /*109*/{-1,-1},
    /*110*/{-1,-1},
    /*111*/{6,138,26,137,-1,-1},
    /*112*/{-1,-1},
    /*113*/{10,132,12,131,-1,-1},
    /*114*/{13,116,26,115,-1,-1},
    /*115*/{-1,-1},
    /*116*/{14,122,26,121,-1,-1},
    /*117*/{-1,-1},
    /*118*/{-1,-1},
    /*119*/{-1,-1},
    /*120*/{-1,-1},
    /*121*/{-1,-1},
    /*122*/{7,127,15,5,-1,-1},
    /*123*/{-1,-1},
    /*124*/{-1,-1},
    /*125*/{-1,-1},
    /*126*/{-1,-1},
    /*127*/{15,27,26,28,27,128,28,31,30,29,-1,-1},
    /*128*/{8,129,26,32,-1,-1},
    /*129*/{9,130,19,43,33,41,-1,-1},
    /*130*/{19,44,33,41,-1,-1},
    /*131*/{41,135,-1,-1},
    /*132*/{-1,-1},
    /*133*/{-1,-1},
    /*134*/{-1,-1},
    /*135*/{-1,-1},
    /*136*/{-1,-1},
    /*137*/{-1,-1},
    /*138*/{-1,-1},
    /*139*/{-1,-1},
    /*140*/{-1,-1},
    /*141*/{-1,-1},
    /*142*/{-1,-1},
    /*143*/{-1,-1},
    /*144*/{-1,-1},
    /*145*/{-1,-1},
    /*146*/{-1,-1},
  };

  /** access to reduce_goto table */
  public short[][] reduce_table() {return _reduce_table;}

  /** instance of action encapsulation class */
  protected CUP$actions action_obj;

  /** action encapsulation object initializer */
  protected void init_actions()
    {
      action_obj = new CUP$actions();
    }

  /** invoke a user supplied parse action */
  public java_cup.runtime.Symbol do_action(
    int                        act_num,
    java_cup.runtime.lr_parser parser,
    java.util.Stack            stack,
    int                        top)
    throws java.lang.Exception
  {
    /* call code in generated class */
    return action_obj.CUP$do_action(act_num, parser, stack, top);
  }

  /** start state */
  public int start_state() {return 0;}
  /** start production */
  public int start_production() {return 0;}

  /** EOF Symbol index */
  public int EOF_sym() {return 0;}

  /** error Symbol index */
  public int error_sym() {return 1;}


  /** user initialization */
  public void user_init() throws java.lang.Exception
    {
 lexer.init(); 
    }

  /** scan to get the next Symbol */
  public java_cup.runtime.Symbol scan()
    throws java.lang.Exception
    {
 return lexer.next_token(); 
    }



  /* override error routines */

  public void report_fatal_error(
    String   message,
    Object   info)
    {
      done_parsing();
      lexer.emit_error(message);
      System.err.println("Can't recover from previous error(s), giving up.");
      System.exit(1);
    }

    public void report_error(String message, Object info)
    {
      lexer.emit_error(message);
    }

}

/** Cup generated class to encapsulate user supplied action code.*/
class CUP$actions {


  /** helper routine to clone a new production part adding a given label */
  protected production_part add_lab(production_part part, String lab)
    throws internal_error
    {
      /* if there is no label, or this is an action, just return the original */
      if (lab == null || part.is_action()) return part;

      /* otherwise build a new one with the given label attached */
      return new symbol_part(((symbol_part)part).the_symbol(),lab);
    }

  /** max size of right hand side we will support */
  protected final int MAX_RHS = 200;

  /** array for accumulating right hand side parts */
  protected production_part[] rhs_parts = new production_part[MAX_RHS];

  /** where we are currently in building a right hand side */
  protected int rhs_pos = 0;

  /** start a new right hand side */
  protected void new_rhs() {rhs_pos = 0; }

  /** add a new right hand side part */
  protected void add_rhs_part(production_part part) throws java.lang.Exception
    {
      if (rhs_pos >= MAX_RHS)
	throw new Exception("Internal Error: Productions limited to " + 
			     MAX_RHS + " symbols and actions"); 

      rhs_parts[rhs_pos] = part;
      rhs_pos++;
    }

  /** string to build up multiple part names */
  protected String multipart_name = new String();

  /** append a new name segment to the accumulated multipart name */
  protected void append_multipart(String name)
    {
      String dot = "";

      /* if we aren't just starting out, put on a dot */
      if (multipart_name.length() != 0)  dot = ".";

      multipart_name = multipart_name.concat(dot + name);
    }

  /** table of declared symbols -- contains production parts indexed by name */
  protected Hashtable symbols = new Hashtable();

  /** table of just non terminals -- contains non_terminals indexed by name */
  protected Hashtable non_terms = new Hashtable();

  /** declared start non_terminal */
  protected non_terminal start_nt = null;

  /** left hand side non terminal of the current production */
  protected non_terminal lhs_nt;

  /** Current precedence number */
  int _cur_prec = 0;

  /** Current precedence side */
  int _cur_side = assoc.no_prec;

  /** update the precedences we are declaring */
  protected void update_precedence(int p) {
    _cur_side = p;
    _cur_prec++;
  }
  /** add relevant data to terminals */ 
  protected void add_precedence(String term) {
    if (term == null) {
      System.err.println("Unable to add precedence to nonexistent terminal");
    } else {
      symbol_part sp = (symbol_part)symbols.get(term);
      if (sp == null) {
	System.err.println("Could find terminal " + term + " while declaring precedence");
      } else {
	java_cup.symbol sym = sp.the_symbol();
	if (sym instanceof terminal) 
	  ((terminal)sym).set_precedence(_cur_side, _cur_prec);
	else System.err.println("Precedence declaration: Can't find terminal " + term);
      }
    }
  }


  /** Constructor */
  CUP$actions() { }

  /** Method with the actual generated action code. */
  public final java_cup.runtime.Symbol CUP$do_action(
    int                        CUP$act_num,
    java_cup.runtime.lr_parser CUP$parser,
    java.util.Stack            CUP$stack,
    int                        CUP$top)
    throws java.lang.Exception
    {
      /* Symbol object for return from actions */
      java_cup.runtime.Symbol CUP$result;

      /* select the action based on the action number */
      switch (CUP$act_num)
        {
          /*. . . . . . . . . . . . . . . . . . . .*/
          case 82: // empty ::= 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(26/*empty*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 81: // label_id ::= ID 
            {
              String RESULT = null;
		int the_idleft = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left;
		int the_idright = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right;
		String the_id = (String)((java_cup.runtime.Symbol) CUP$stack.elementAt(CUP$top-0)).value;
		 RESULT = the_id; 
              CUP$result = new java_cup.runtime.Symbol(35/*label_id*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 80: // symbol_id ::= ID 
            {
              String RESULT = null;
		int the_idleft = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left;
		int the_idright = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right;
		String the_id = (String)((java_cup.runtime.Symbol) CUP$stack.elementAt(CUP$top-0)).value;
		 RESULT = the_id; 
              CUP$result = new java_cup.runtime.Symbol(34/*symbol_id*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 79: // nt_id ::= ID 
            {
              String RESULT = null;
		int the_idleft = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left;
		int the_idright = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right;
		String the_id = (String)((java_cup.runtime.Symbol) CUP$stack.elementAt(CUP$top-0)).value;
		 RESULT = the_id; 
              CUP$result = new java_cup.runtime.Symbol(33/*nt_id*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 78: // new_non_term_id ::= ID 
            {
              Object RESULT = null;
		int non_term_idleft = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left;
		int non_term_idright = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right;
		String non_term_id = (String)((java_cup.runtime.Symbol) CUP$stack.elementAt(CUP$top-0)).value;
		 
	  /* see if this non terminal has been declared before */
	  if (symbols.get(non_term_id) != null)
	    {
	      /* issue a message */
	      lexer.emit_error( "java_cup.runtime.Symbol \"" + non_term_id + 
			                      "\" has already been declared");
	    }
	  else
	    {
	      if (multipart_name.equals("")) {
		append_multipart("Object");
	      }
	      /* build the non terminal object */
              non_terminal this_nt = 
		new non_terminal(non_term_id, multipart_name);

	      /* put it in the non_terms table */
	      non_terms.put(non_term_id, this_nt);

	      /* build a production_part and put it in the symbols table */ 
	      symbols.put(non_term_id, new symbol_part(this_nt));
	    }
	
              CUP$result = new java_cup.runtime.Symbol(23/*new_non_term_id*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 77: // new_term_id ::= ID 
            {
              Object RESULT = null;
		int term_idleft = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left;
		int term_idright = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right;
		String term_id = (String)((java_cup.runtime.Symbol) CUP$stack.elementAt(CUP$top-0)).value;
		 
	  /* see if this terminal has been declared before */
	  if (symbols.get(term_id) != null)
	    {
	      /* issue a message */
	      lexer.emit_error("java_cup.runtime.Symbol \"" + term_id + 
			   "\" has already been declared");
	    }
	  else
	    {
	      /* if no type declared, declare one */
	      if (multipart_name.equals("")) {
		append_multipart("Object");
	      }
	      /* build a production_part and put it in the table */ 
	      symbols.put(term_id, 
	        new symbol_part(new terminal(term_id, multipart_name)));
	    }
	
              CUP$result = new java_cup.runtime.Symbol(22/*new_term_id*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 76: // type_id ::= multipart_id 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(16/*type_id*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 75: // import_id ::= multipart_id 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(12/*import_id*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 74: // import_id ::= multipart_id DOT STAR 
            {
              Object RESULT = null;
		 append_multipart("*"); 
              CUP$result = new java_cup.runtime.Symbol(12/*import_id*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-2)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 73: // multipart_id ::= ID 
            {
              Object RESULT = null;
		int an_idleft = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left;
		int an_idright = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right;
		String an_id = (String)((java_cup.runtime.Symbol) CUP$stack.elementAt(CUP$top-0)).value;
		 append_multipart(an_id); 
              CUP$result = new java_cup.runtime.Symbol(10/*multipart_id*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 72: // multipart_id ::= multipart_id DOT ID 
            {
              Object RESULT = null;
		int another_idleft = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left;
		int another_idright = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right;
		String another_id = (String)((java_cup.runtime.Symbol) CUP$stack.elementAt(CUP$top-0)).value;
		 append_multipart(another_id); 
              CUP$result = new java_cup.runtime.Symbol(10/*multipart_id*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-2)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 71: // opt_label ::= empty 
            {
              String RESULT = null;
		 RESULT = null; 
              CUP$result = new java_cup.runtime.Symbol(36/*opt_label*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 70: // opt_label ::= COLON label_id 
            {
              String RESULT = null;
		int labidleft = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left;
		int labidright = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right;
		String labid = (String)((java_cup.runtime.Symbol) CUP$stack.elementAt(CUP$top-0)).value;
		 RESULT = labid; 
              CUP$result = new java_cup.runtime.Symbol(36/*opt_label*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-1)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 69: // prod_part ::= CODE_STRING 
            {
              Object RESULT = null;
		int code_strleft = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left;
		int code_strright = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right;
		String code_str = (String)((java_cup.runtime.Symbol) CUP$stack.elementAt(CUP$top-0)).value;
		 
	  /* add a new production part */
	  add_rhs_part(new action_part(code_str));
	
              CUP$result = new java_cup.runtime.Symbol(21/*prod_part*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 68: // prod_part ::= symbol_id opt_label 
            {
              Object RESULT = null;
		int symidleft = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-1)).left;
		int symidright = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-1)).right;
		String symid = (String)((java_cup.runtime.Symbol) CUP$stack.elementAt(CUP$top-1)).value;
		int labidleft = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left;
		int labidright = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right;
		String labid = (String)((java_cup.runtime.Symbol) CUP$stack.elementAt(CUP$top-0)).value;
		 
	  /* try to look up the id */
	  production_part symb = (production_part)symbols.get(symid);

	  /* if that fails, symbol is undeclared */
	  if (symb == null)
	    {
	      if (lexer.error_count == 0)
	        lexer.emit_error("java_cup.runtime.Symbol \"" + symid + 
			       "\" has not been declared");
	    }
	  else
	    {
	      /* add a labeled production part */
	      add_rhs_part(add_lab(symb, labid));
	    }
	
              CUP$result = new java_cup.runtime.Symbol(21/*prod_part*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-1)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 67: // prod_part_list ::= empty 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(20/*prod_part_list*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 66: // prod_part_list ::= prod_part_list prod_part 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(20/*prod_part_list*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-1)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 65: // rhs ::= prod_part_list 
            {
              Object RESULT = null;
		 
	  if (lhs_nt != null) 
	    {
	      /* build the production */
	      production p = new production(lhs_nt, rhs_parts, rhs_pos);

	      /* if we have no start non-terminal declared and this is 
		 the first production, make its lhs nt the start_nt 
		 and build a special start production for it. */
              if (start_nt == null)
		{
		  start_nt = lhs_nt;

	          /* build a special start production */
	          new_rhs();
	          add_rhs_part(new symbol_part(start_nt));
	          add_rhs_part(new symbol_part(terminal.EOF));
	          emit.start_production = 
		     new production(non_terminal.START_nt, rhs_parts, rhs_pos);

	          new_rhs();
		}
	    }
	  
	  /* reset the rhs accumulation in any case */
	  new_rhs();
	
              CUP$result = new java_cup.runtime.Symbol(25/*rhs*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 64: // rhs ::= prod_part_list PERCENT_PREC term_id 
            {
              Object RESULT = null;
		int term_nameleft = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left;
		int term_nameright = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right;
		String term_name = (String)((java_cup.runtime.Symbol) CUP$stack.elementAt(CUP$top-0)).value;
		
	  java_cup.symbol sym = null;
	  if (lhs_nt != null) 
	    {
	      /* Find the precedence symbol */
	      if (term_name == null) {
		System.err.println("No terminal for contextual precedence");
		sym = null;
	      } else {
		sym = ((symbol_part)symbols.get(term_name)).the_symbol();
	      }
	      /* build the production */
	      production p;
	      if ((sym!=null) && (sym instanceof terminal)) {
		p = new production(lhs_nt, rhs_parts, rhs_pos,
				   ((terminal)sym).precedence_num(),
				   ((terminal)sym).precedence_side());
		((symbol_part)symbols.get(term_name)).the_symbol().note_use();
	      } else {
		System.err.println("Invalid terminal " + term_name + 
				   " for contextual precedence assignment");
		p = new production(lhs_nt, rhs_parts, rhs_pos);
	      }

	      /* if we have no start non-terminal declared and this is 
		 the first production, make its lhs nt the start_nt 
		 and build a special start production for it. */
              if (start_nt == null)
		{
		  start_nt = lhs_nt;

	          /* build a special start production */
	          new_rhs();
	          add_rhs_part(new symbol_part(start_nt));
	          add_rhs_part(new symbol_part(terminal.EOF));
		  if ((sym!=null) && (sym instanceof terminal)) {
		    emit.start_production = 
		      new production(non_terminal.START_nt, rhs_parts, 
				     rhs_pos, ((terminal)sym).precedence_num(),
				     ((terminal)sym).precedence_side());
		  } else {
		    emit.start_production = 
		      new production(non_terminal.START_nt, rhs_parts, rhs_pos);
		  }
	          new_rhs();
		}
	    }

	  /* reset the rhs accumulation in any case */
	  new_rhs();
	
              CUP$result = new java_cup.runtime.Symbol(25/*rhs*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-2)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 63: // rhs_list ::= rhs 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(24/*rhs_list*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 62: // rhs_list ::= rhs_list BAR rhs 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(24/*rhs_list*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-2)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 61: // production ::= error NT$13 SEMI 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(19/*production*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-2)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 60: // NT$13 ::= 
            {
              Object RESULT = null;
 lexer.emit_error("Syntax Error"); 
              CUP$result = new java_cup.runtime.Symbol(52/*NT$13*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 59: // production ::= nt_id NT$11 COLON_COLON_EQUALS NT$12 rhs_list SEMI 
            {
              Object RESULT = null;
		int lhs_idleft = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-5)).left;
		int lhs_idright = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-5)).right;
		String lhs_id = (String)((java_cup.runtime.Symbol) CUP$stack.elementAt(CUP$top-5)).value;

              CUP$result = new java_cup.runtime.Symbol(19/*production*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-5)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 58: // NT$12 ::= 
            {
              Object RESULT = null;
		int lhs_idleft = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-2)).left;
		int lhs_idright = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-2)).right;
		String lhs_id = (String)((java_cup.runtime.Symbol) CUP$stack.elementAt(CUP$top-2)).value;
 
              CUP$result = new java_cup.runtime.Symbol(51/*NT$12*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 57: // NT$11 ::= 
            {
              Object RESULT = null;
		int lhs_idleft = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left;
		int lhs_idright = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right;
		String lhs_id = (String)((java_cup.runtime.Symbol) CUP$stack.elementAt(CUP$top-0)).value;

	  /* lookup the lhs nt */
	  lhs_nt = (non_terminal)non_terms.get(lhs_id);

          /* if it wasn't declared, emit a message */
	  if (lhs_nt == null)
	    {
	      if (lexer.error_count == 0)
	        lexer.emit_error("LHS non terminal \"" + lhs_id + 
			       "\" has not been declared");
	    }

	  /* reset the rhs accumulation */
	  new_rhs();
	
              CUP$result = new java_cup.runtime.Symbol(50/*NT$11*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 56: // production_list ::= production 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(9/*production_list*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 55: // production_list ::= production_list production 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(9/*production_list*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-1)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 54: // start_spec ::= empty 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(8/*start_spec*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 53: // start_spec ::= START WITH nt_id NT$10 SEMI 
            {
              Object RESULT = null;
		int start_nameleft = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-2)).left;
		int start_nameright = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-2)).right;
		String start_name = (String)((java_cup.runtime.Symbol) CUP$stack.elementAt(CUP$top-2)).value;

              CUP$result = new java_cup.runtime.Symbol(8/*start_spec*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-4)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 52: // NT$10 ::= 
            {
              Object RESULT = null;
		int start_nameleft = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left;
		int start_nameright = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right;
		String start_name = (String)((java_cup.runtime.Symbol) CUP$stack.elementAt(CUP$top-0)).value;
 
	  /* verify that the name has been declared as a non terminal */
	  non_terminal nt = (non_terminal)non_terms.get(start_name);
	  if (nt == null)
	    {
	      lexer.emit_error( "Start non terminal \"" + start_name + 
	  		         "\" has not been declared");
	    }
          else
	    {
	      /* remember the non-terminal for later */
	      start_nt = nt;

	      /* build a special start production */
	      new_rhs();
	      add_rhs_part(add_lab(new symbol_part(start_nt), "start_val"));
	      add_rhs_part(new symbol_part(terminal.EOF));
	      add_rhs_part(new action_part("RESULT = start_val;"));
	      emit.start_production = 
		     new production(non_terminal.START_nt, rhs_parts, rhs_pos);
	      new_rhs();
	    }
	
              CUP$result = new java_cup.runtime.Symbol(49/*NT$10*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 51: // term_id ::= symbol_id 
            {
              String RESULT = null;
		int symleft = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left;
		int symright = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right;
		String sym = (String)((java_cup.runtime.Symbol) CUP$stack.elementAt(CUP$top-0)).value;
		
	  /* check that the symbol_id is a terminal */
	  if (symbols.get(sym) == null)
	    {
	      /* issue a message */
	      lexer.emit_error("Terminal \"" + sym + 
			   "\" has not been declared");
	    }
          RESULT = sym;
         
              CUP$result = new java_cup.runtime.Symbol(38/*term_id*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 50: // terminal_id ::= term_id 
            {
              String RESULT = null;
		int symleft = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left;
		int symright = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right;
		String sym = (String)((java_cup.runtime.Symbol) CUP$stack.elementAt(CUP$top-0)).value;
			
	  add_precedence(sym);
	  RESULT = sym;
	
              CUP$result = new java_cup.runtime.Symbol(37/*terminal_id*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 49: // terminal_list ::= terminal_id 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(29/*terminal_list*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 48: // terminal_list ::= terminal_list COMMA terminal_id 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(29/*terminal_list*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-2)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 47: // preced ::= PRECEDENCE NONASSOC NT$9 terminal_list SEMI 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(28/*preced*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-4)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 46: // NT$9 ::= 
            {
              Object RESULT = null;

	  update_precedence(assoc.nonassoc);
	
              CUP$result = new java_cup.runtime.Symbol(48/*NT$9*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 45: // preced ::= PRECEDENCE RIGHT NT$8 terminal_list SEMI 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(28/*preced*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-4)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 44: // NT$8 ::= 
            {
              Object RESULT = null;

	  update_precedence(assoc.right);
	
              CUP$result = new java_cup.runtime.Symbol(47/*NT$8*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 43: // preced ::= PRECEDENCE LEFT NT$7 terminal_list SEMI 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(28/*preced*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-4)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 42: // NT$7 ::= 
            {
              Object RESULT = null;

	  update_precedence(assoc.left);
	
              CUP$result = new java_cup.runtime.Symbol(46/*NT$7*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 41: // precedence_l ::= preced 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(30/*precedence_l*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 40: // precedence_l ::= precedence_l preced 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(30/*precedence_l*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-1)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 39: // precedence_list ::= empty 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(27/*precedence_list*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 38: // precedence_list ::= precedence_l 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(27/*precedence_list*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 37: // non_term_name_list ::= new_non_term_id 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(18/*non_term_name_list*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 36: // non_term_name_list ::= non_term_name_list COMMA new_non_term_id 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(18/*non_term_name_list*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-2)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 35: // term_name_list ::= new_term_id 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(17/*term_name_list*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 34: // term_name_list ::= term_name_list COMMA new_term_id 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(17/*term_name_list*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-2)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 33: // declares_non_term ::= non_term_name_list NT$6 SEMI 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(32/*declares_non_term*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-2)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 32: // NT$6 ::= 
            {
              Object RESULT = null;
 
	  /* reset the accumulated multipart name */
	  multipart_name = new String();
	
              CUP$result = new java_cup.runtime.Symbol(45/*NT$6*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 31: // declares_term ::= term_name_list NT$5 SEMI 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(31/*declares_term*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-2)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 30: // NT$5 ::= 
            {
              Object RESULT = null;
 
	  /* reset the accumulated multipart name */
	  multipart_name = new String();
	
              CUP$result = new java_cup.runtime.Symbol(44/*NT$5*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 29: // symbol ::= NON TERMINAL error NT$4 SEMI 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(15/*symbol*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-4)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 28: // NT$4 ::= 
            {
              Object RESULT = null;

	  /* reset the accumulated multipart name */
	  multipart_name = new String();
	
              CUP$result = new java_cup.runtime.Symbol(43/*NT$4*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 27: // symbol ::= TERMINAL error NT$3 SEMI 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(15/*symbol*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-3)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 26: // NT$3 ::= 
            {
              Object RESULT = null;

	  /* reset the accumulated multipart name */
	  multipart_name = new String();
	
              CUP$result = new java_cup.runtime.Symbol(42/*NT$3*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 25: // symbol ::= NON TERMINAL declares_non_term 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(15/*symbol*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-2)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 24: // symbol ::= NON TERMINAL type_id declares_non_term 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(15/*symbol*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-3)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 23: // symbol ::= TERMINAL declares_term 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(15/*symbol*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-1)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 22: // symbol ::= TERMINAL type_id declares_term 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(15/*symbol*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-2)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 21: // symbol_list ::= symbol 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(7/*symbol_list*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 20: // symbol_list ::= symbol_list symbol 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(7/*symbol_list*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-1)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 19: // scan_code ::= empty 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(14/*scan_code*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 18: // scan_code ::= SCAN WITH CODE_STRING SEMI 
            {
              Object RESULT = null;
		int user_codeleft = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-1)).left;
		int user_coderight = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-1)).right;
		String user_code = (String)((java_cup.runtime.Symbol) CUP$stack.elementAt(CUP$top-1)).value;
		 
	  /* save the user code */
	  emit.scan_code = user_code;
	
              CUP$result = new java_cup.runtime.Symbol(14/*scan_code*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-3)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 17: // init_code ::= empty 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(13/*init_code*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 16: // init_code ::= INIT WITH CODE_STRING SEMI 
            {
              Object RESULT = null;
		int user_codeleft = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-1)).left;
		int user_coderight = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-1)).right;
		String user_code = (String)((java_cup.runtime.Symbol) CUP$stack.elementAt(CUP$top-1)).value;
		 
	  /* save the user code */
	  emit.init_code = user_code;
	
              CUP$result = new java_cup.runtime.Symbol(13/*init_code*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-3)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 15: // parser_code_part ::= empty 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(6/*parser_code_part*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 14: // parser_code_part ::= PARSER CODE CODE_STRING SEMI 
            {
              Object RESULT = null;
		int user_codeleft = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-1)).left;
		int user_coderight = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-1)).right;
		String user_code = (String)((java_cup.runtime.Symbol) CUP$stack.elementAt(CUP$top-1)).value;
		
	  /* save the user included code string */
	  emit.parser_code = user_code;
	
              CUP$result = new java_cup.runtime.Symbol(6/*parser_code_part*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-3)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 13: // action_code_part ::= empty 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(5/*action_code_part*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 12: // action_code_part ::= ACTION CODE CODE_STRING SEMI 
            {
              Object RESULT = null;
		int user_codeleft = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-1)).left;
		int user_coderight = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-1)).right;
		String user_code = (String)((java_cup.runtime.Symbol) CUP$stack.elementAt(CUP$top-1)).value;
		
	  /* save the user included code string */
	  emit.action_code = user_code;
	
              CUP$result = new java_cup.runtime.Symbol(5/*action_code_part*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-3)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 11: // code_part ::= action_code_part parser_code_part 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(4/*code_part*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-1)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 10: // import_spec ::= IMPORT import_id NT$2 SEMI 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(11/*import_spec*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-3)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 9: // NT$2 ::= 
            {
              Object RESULT = null;
 
	  /* save this import on the imports list */
	  emit.import_list.push(multipart_name);

	  /* reset the accumulated multipart name */
	  multipart_name = new String();
	
              CUP$result = new java_cup.runtime.Symbol(41/*NT$2*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 8: // import_list ::= empty 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(3/*import_list*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 7: // import_list ::= import_list import_spec 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(3/*import_list*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-1)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 6: // package_spec ::= empty 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(2/*package_spec*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 5: // package_spec ::= PACKAGE multipart_id NT$1 SEMI 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(2/*package_spec*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-3)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 4: // NT$1 ::= 
            {
              Object RESULT = null;

	  /* save the package name */
	  emit.package_name = multipart_name;

	  /* reset the accumulated multipart name */
	  multipart_name = new String();
	
              CUP$result = new java_cup.runtime.Symbol(40/*NT$1*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 3: // spec ::= error symbol_list precedence_list start_spec production_list 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(1/*spec*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-4)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 2: // spec ::= NT$0 package_spec import_list code_part init_code scan_code symbol_list precedence_list start_spec production_list 
            {
              Object RESULT = null;

              CUP$result = new java_cup.runtime.Symbol(1/*spec*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-9)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 1: // NT$0 ::= 
            {
              Object RESULT = null;

          /* declare "error" as a terminal */
          symbols.put("error", new symbol_part(terminal.error));

          /* declare start non terminal */
          non_terms.put("$START", non_terminal.START_nt);
	
              CUP$result = new java_cup.runtime.Symbol(39/*NT$0*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          return CUP$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 0: // $START ::= spec EOF 
            {
              Object RESULT = null;
		int start_valleft = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-1)).left;
		int start_valright = ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-1)).right;
		Object start_val = (Object)((java_cup.runtime.Symbol) CUP$stack.elementAt(CUP$top-1)).value;
		RESULT = start_val;
              CUP$result = new java_cup.runtime.Symbol(0/*$START*/, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-1)).left, ((java_cup.runtime.Symbol)CUP$stack.elementAt(CUP$top-0)).right, RESULT);
            }
          /* ACCEPT */
          CUP$parser.done_parsing();
          return CUP$result;

          /* . . . . . .*/
          default:
            throw new Exception(
               "Invalid action number found in internal parse table");

        }
    }
}

