
//----------------------------------------------------
// The following code was generated by CUP v0.11b 20210814 (GIT d69c832)
//----------------------------------------------------

package java_cup;

import java_cup.runtime.*;
import java.util.Hashtable;
import java.util.Stack;
import java_cup.runtime.ComplexSymbolFactory.Location;
import java_cup.runtime.XMLElement;

/** CUP v0.11b 20210814 (GIT d69c832) generated parser.
  */
@SuppressWarnings("unused")
public class parser extends java_cup.runtime.lr_parser {

 @Override
 public final Class<?> getSymbolContainer() {
    return sym.class;
}

  /** Default constructor. */
  @Deprecated
  public parser() {super();}

  /** Constructor which sets the default scanner. */
  @Deprecated
  public parser(java_cup.runtime.Scanner s) {super(s);}

  /** Constructor which sets the default scanner. */
  public parser(java_cup.runtime.Scanner s, java_cup.runtime.SymbolFactory sf) {super(s,sf);}

  /** Production table. */
  protected static final short _production_table[][] = 
    unpackFromStrings(new String[] {
    "\000\167\000\002\002\004\000\002\060\002\000\002\002" +
    "\013\000\002\002\007\000\002\061\002\000\002\003\006" +
    "\000\002\003\003\000\002\004\004\000\002\004\003\000" +
    "\002\062\002\000\002\017\006\000\002\063\002\000\002" +
    "\017\007\000\002\045\003\000\002\045\005\000\002\007" +
    "\003\000\002\007\003\000\002\007\003\000\002\007\003" +
    "\000\002\006\002\000\002\006\004\000\002\005\006\000" +
    "\002\012\006\000\002\021\006\000\002\022\006\000\002" +
    "\013\004\000\002\013\003\000\002\023\005\000\002\023" +
    "\004\000\002\023\005\000\002\023\004\000\002\064\002" +
    "\000\002\023\006\000\002\065\002\000\002\023\006\000" +
    "\002\066\002\000\002\043\005\000\002\067\002\000\002" +
    "\044\005\000\002\025\005\000\002\025\003\000\002\026" +
    "\005\000\002\026\003\000\002\037\003\000\002\037\003" +
    "\000\002\042\004\000\002\042\003\000\002\070\002\000" +
    "\002\040\007\000\002\071\002\000\002\040\007\000\002" +
    "\072\002\000\002\040\007\000\002\041\005\000\002\041" +
    "\003\000\002\052\003\000\002\053\003\000\002\073\002" +
    "\000\002\014\007\000\002\014\003\000\002\015\004\000" +
    "\002\015\003\000\002\074\002\000\002\027\007\000\002" +
    "\075\002\000\002\027\005\000\002\034\005\000\002\034" +
    "\003\000\002\035\005\000\002\035\003\000\002\030\004" +
    "\000\002\030\003\000\002\031\004\000\002\031\003\000" +
    "\002\051\004\000\002\051\003\000\002\016\005\000\002" +
    "\076\002\000\002\016\007\000\002\016\003\000\002\055" +
    "\003\000\002\055\005\000\002\056\003\000\002\056\003" +
    "\000\002\057\003\000\002\057\005\000\002\057\005\000" +
    "\002\020\005\000\002\020\003\000\002\024\003\000\002" +
    "\024\005\000\002\032\003\000\002\033\003\000\002\046" +
    "\003\000\002\046\003\000\002\047\003\000\002\047\003" +
    "\000\002\050\003\000\002\054\003\000\002\054\003\000" +
    "\002\054\003\000\002\054\003\000\002\054\003\000\002" +
    "\054\003\000\002\054\003\000\002\054\003\000\002\054" +
    "\003\000\002\054\003\000\002\054\003\000\002\054\003" +
    "\000\002\054\003\000\002\054\003\000\002\054\003\000" +
    "\002\054\003\000\002\011\004\000\002\011\003\000\002" +
    "\010\002\000\002\010\003\000\002\036\002" });

  /** Access to production table. */
  @Override
  public short[][] production_table() {return _production_table;}

  /** Parse-action table. */
  protected static final short[][] _action_table = 
    unpackFromStrings(new String[] {
    "\000\275\000\030\003\005\004\000\005\000\010\000\011" +
    "\000\012\000\013\000\014\000\015\000\036\000\044\000" +
    "\001\002\000\004\002\277\001\002\000\010\012\104\013" +
    "\077\036\103\001\002\000\026\004\011\005\uff8b\010\uff8b" +
    "\011\uff8b\012\uff8b\013\uff8b\014\uff8b\015\uff8b\036\uff8b\044" +
    "\uff8b\001\002\000\024\005\uff8b\010\uff8b\011\uff8b\012\uff8b" +
    "\013\uff8b\014\uff8b\015\uff8b\036\uff8b\044\uff8b\001\002\000" +
    "\024\005\ufffb\010\ufffb\011\ufffb\012\ufffb\013\ufffb\014\ufffb" +
    "\015\ufffb\036\ufffb\044\ufffb\001\002\000\042\003\030\007" +
    "\015\010\031\011\026\012\023\013\016\014\012\015\033" +
    "\016\017\017\032\027\014\030\024\031\022\032\013\036" +
    "\025\045\020\001\002\000\030\003\uff98\020\uff98\021\uff98" +
    "\023\uff98\026\uff98\033\uff98\034\uff98\037\uff98\040\uff98\045" +
    "\uff98\046\uff98\001\002\000\030\003\uff91\020\uff91\021\uff91" +
    "\023\uff91\026\uff91\033\uff91\034\uff91\037\uff91\040\uff91\045" +
    "\uff91\046\uff91\001\002\000\030\003\uff94\020\uff94\021\uff94" +
    "\023\uff94\026\uff94\033\uff94\034\uff94\037\uff94\040\uff94\045" +
    "\uff94\046\uff94\001\002\000\030\003\uff9e\020\uff9e\021\uff9e" +
    "\023\uff9e\026\uff9e\033\uff9e\034\uff9e\037\uff9e\040\uff9e\045" +
    "\uff9e\046\uff9e\001\002\000\030\003\uff9a\020\uff9a\021\uff9a" +
    "\023\uff9a\026\uff9a\033\uff9a\034\uff9a\037\uff9a\040\uff9a\045" +
    "\uff9a\046\uff9a\001\002\000\030\003\uff96\020\uff96\021\uff96" +
    "\023\uff96\026\uff96\033\uff96\034\uff96\037\uff96\040\uff96\045" +
    "\uff96\046\uff96\001\002\000\030\003\uff9f\020\uff9f\021\uff9f" +
    "\023\uff9f\026\uff9f\033\uff9f\034\uff9f\037\uff9f\040\uff9f\045" +
    "\uff9f\046\uff9f\001\002\000\010\020\ufffd\023\036\040\uffb4" +
    "\001\002\000\030\003\uff92\020\uff92\021\uff92\023\uff92\026" +
    "\uff92\033\uff92\034\uff92\037\uff92\040\uff92\045\uff92\046\uff92" +
    "\001\002\000\030\003\uff9b\020\uff9b\021\uff9b\023\uff9b\026" +
    "\uff9b\033\uff9b\034\uff9b\037\uff9b\040\uff9b\045\uff9b\046\uff9b" +
    "\001\002\000\030\003\uff93\020\uff93\021\uff93\023\uff93\026" +
    "\uff93\033\uff93\034\uff93\037\uff93\040\uff93\045\uff93\046\uff93" +
    "\001\002\000\030\003\uff99\020\uff99\021\uff99\023\uff99\026" +
    "\uff99\033\uff99\034\uff99\037\uff99\040\uff99\045\uff99\046\uff99" +
    "\001\002\000\030\003\uff9c\020\uff9c\021\uff9c\023\uff9c\026" +
    "\uff9c\033\uff9c\034\uff9c\037\uff9c\040\uff9c\045\uff9c\046\uff9c" +
    "\001\002\000\020\020\uffb2\021\uffb2\023\uffb2\034\uffb2\037" +
    "\uffb2\040\uffb2\045\uffb2\001\002\000\030\003\uff90\020\uff90" +
    "\021\uff90\023\uff90\026\uff90\033\uff90\034\uff90\037\uff90\040" +
    "\uff90\045\uff90\046\uff90\001\002\000\030\003\uff9d\020\uff9d" +
    "\021\uff9d\023\uff9d\026\uff9d\033\uff9d\034\uff9d\037\uff9d\040" +
    "\uff9d\045\uff9d\046\uff9d\001\002\000\030\003\uff95\020\uff95" +
    "\021\uff95\023\uff95\026\uff95\033\uff95\034\uff95\037\uff95\040" +
    "\uff95\045\uff95\046\uff95\001\002\000\030\003\uff97\020\uff97" +
    "\021\uff97\023\uff97\026\uff97\033\uff97\034\uff97\037\uff97\040" +
    "\uff97\045\uff97\046\uff97\001\002\000\004\020\060\001\002" +
    "\000\004\040\040\001\002\000\042\003\030\007\015\010" +
    "\031\011\026\012\023\013\016\014\012\015\033\016\017" +
    "\017\032\027\014\030\024\031\022\032\013\036\025\045" +
    "\020\001\002\000\020\020\uffb5\021\uffb5\023\uffb5\034\uffb5" +
    "\037\uffb5\040\uffb5\045\uffb5\001\002\000\044\003\030\007" +
    "\015\010\031\011\026\012\023\013\016\014\012\015\033" +
    "\016\017\017\032\027\014\030\024\031\022\032\013\036" +
    "\025\041\041\045\020\001\002\000\012\021\uffad\037\uffad" +
    "\042\054\043\055\001\002\000\006\021\uffae\037\uffae\001" +
    "\002\000\016\021\uffa8\023\036\034\uffa8\037\uffa8\040\uffb4" +
    "\045\uffa8\001\002\000\006\021\051\037\052\001\002\000" +
    "\010\021\uffaf\034\047\037\uffaf\001\002\000\006\021\uffb1" +
    "\037\uffb1\001\002\000\004\035\050\001\002\000\012\021" +
    "\uffa7\034\uffa7\037\uffa7\045\uffa7\001\002\000\044\003\030" +
    "\007\015\010\031\011\026\012\023\013\016\014\012\015" +
    "\033\016\017\017\032\027\014\030\024\031\022\032\013" +
    "\036\025\041\041\045\020\001\002\000\020\020\uffb3\021" +
    "\uffb3\023\uffb3\034\uffb3\037\uffb3\040\uffb3\045\uffb3\001\002" +
    "\000\006\021\uffb0\037\uffb0\001\002\000\042\003\030\007" +
    "\015\010\031\011\026\012\023\013\016\014\012\015\033" +
    "\016\017\017\032\027\014\030\024\031\022\032\013\036" +
    "\025\045\020\001\002\000\042\003\030\007\015\010\031" +
    "\011\026\012\023\013\016\014\012\015\033\016\017\017" +
    "\032\027\014\030\024\031\022\032\013\036\025\045\020" +
    "\001\002\000\010\021\uffac\034\047\037\uffac\001\002\000" +
    "\010\021\uffab\034\047\037\uffab\001\002\000\024\005\ufffc" +
    "\010\ufffc\011\ufffc\012\ufffc\013\ufffc\014\ufffc\015\ufffc\036" +
    "\ufffc\044\ufffc\001\002\000\024\005\064\010\uff8b\011\uff8b" +
    "\012\uff8b\013\uff8b\014\uff8b\015\uff8b\036\uff8b\044\066\001" +
    "\002\000\024\005\ufff9\010\ufff9\011\ufff9\012\ufff9\013\ufff9" +
    "\014\ufff9\015\ufff9\036\ufff9\044\ufff9\001\002\000\024\005" +
    "\ufffa\010\ufffa\011\ufffa\012\ufffa\013\ufffa\014\ufffa\015\ufffa" +
    "\036\ufffa\044\ufffa\001\002\000\044\003\030\006\263\007" +
    "\015\010\031\011\026\012\023\013\016\014\012\015\033" +
    "\016\017\017\032\027\014\030\024\031\022\032\013\036" +
    "\025\045\020\001\002\000\020\010\uffee\011\uffee\012\uffee" +
    "\013\uffee\014\uffee\015\uffee\036\uffee\001\002\000\004\045" +
    "\070\001\002\000\020\010\ufff4\011\ufff4\012\ufff4\013\ufff4" +
    "\014\ufff4\015\ufff4\036\ufff4\001\002\000\004\020\071\001" +
    "\002\000\020\010\ufff3\011\ufff3\012\ufff3\013\ufff3\014\ufff3" +
    "\015\ufff3\036\ufff3\001\002\000\020\010\074\011\073\012" +
    "\104\013\077\014\107\015\110\036\103\001\002\000\004" +
    "\007\256\001\002\000\004\007\253\001\002\000\020\010" +
    "\uffed\011\uffed\012\uffed\013\uffed\014\uffed\015\uffed\036\uffed" +
    "\001\002\000\020\010\ufff1\011\ufff1\012\ufff1\013\ufff1\014" +
    "\ufff1\015\ufff1\036\ufff1\001\002\000\004\012\252\001\002" +
    "\000\042\003\240\007\015\010\031\011\026\012\023\013" +
    "\016\014\012\015\033\016\017\017\032\027\014\030\024" +
    "\031\022\032\013\036\025\045\234\001\002\000\020\003" +
    "\uffe7\012\uffe7\013\uffe7\017\uffe7\027\uffe7\036\uffe7\045\uffe7" +
    "\001\002\000\020\010\uffef\011\uffef\012\uffef\013\uffef\014" +
    "\uffef\015\uffef\036\uffef\001\002\000\042\003\uff8e\007\uff8e" +
    "\010\uff8e\011\uff8e\012\uff8e\013\uff8e\014\uff8e\015\uff8e\016" +
    "\uff8e\017\uff8e\027\uff8e\030\uff8e\031\uff8e\032\uff8e\036\uff8e" +
    "\045\uff8e\001\002\000\042\003\222\007\015\010\031\011" +
    "\026\012\023\013\016\014\012\015\033\016\017\017\032" +
    "\027\014\030\024\031\022\032\013\036\025\045\220\001" +
    "\002\000\020\010\ufff2\011\ufff2\012\ufff2\013\ufff2\014\ufff2" +
    "\015\ufff2\036\ufff2\001\002\000\020\003\uff8b\012\104\013" +
    "\077\017\uff8b\027\123\036\103\045\uff8b\001\002\000\004" +
    "\016\116\001\002\000\004\016\112\001\002\000\020\010" +
    "\ufff0\011\ufff0\012\ufff0\013\ufff0\014\ufff0\015\ufff0\036\ufff0" +
    "\001\002\000\004\046\113\001\002\000\022\010\uff8d\011" +
    "\uff8d\012\uff8d\013\uff8d\014\uff8d\015\uff8d\020\115\036\uff8d" +
    "\001\002\000\020\010\uffe9\011\uffe9\012\uffe9\013\uffe9\014" +
    "\uffe9\015\uffe9\036\uffe9\001\002\000\020\010\uff8c\011\uff8c" +
    "\012\uff8c\013\uff8c\014\uff8c\015\uff8c\036\uff8c\001\002\000" +
    "\004\046\117\001\002\000\022\010\uff8d\011\uff8d\012\uff8d" +
    "\013\uff8d\014\uff8d\015\uff8d\020\115\036\uff8d\001\002\000" +
    "\020\010\uffea\011\uffea\012\uffea\013\uffea\014\uffea\015\uffea" +
    "\036\uffea\001\002\000\010\003\uff8b\017\155\045\uff8b\001" +
    "\002\000\012\003\uffd3\017\uffd3\027\uffd3\045\uffd3\001\002" +
    "\000\010\030\130\031\131\032\132\001\002\000\020\003" +
    "\uffe8\012\uffe8\013\uffe8\017\uffe8\027\uffe8\036\uffe8\045\uffe8" +
    "\001\002\000\010\003\uffd5\017\uffd5\045\uffd5\001\002\000" +
    "\012\003\uffd6\017\uffd6\027\123\045\uffd6\001\002\000\012" +
    "\003\uffd4\017\uffd4\027\uffd4\045\uffd4\001\002\000\006\003" +
    "\uffd2\045\uffd2\001\002\000\006\003\uffd0\045\uffd0\001\002" +
    "\000\006\003\uffce\045\uffce\001\002\000\006\003\135\045" +
    "\134\001\002\000\022\003\uffa2\020\uffa2\021\uffa2\024\uffa2" +
    "\026\uffa2\033\uffa2\045\uffa2\046\uffa2\001\002\000\022\003" +
    "\uffa1\020\uffa1\021\uffa1\024\uffa1\026\uffa1\033\uffa1\045\uffa1" +
    "\046\uffa1\001\002\000\010\020\uffc9\021\uffc9\026\uffc9\001" +
    "\002\000\006\020\uffca\021\uffca\001\002\000\006\020\143" +
    "\021\142\001\002\000\006\020\uffcb\021\uffcb\001\002\000" +
    "\006\003\135\045\134\001\002\000\012\003\uffcd\017\uffcd" +
    "\027\uffcd\045\uffcd\001\002\000\006\020\uffcc\021\uffcc\001" +
    "\002\000\006\003\135\045\134\001\002\000\006\020\147" +
    "\021\142\001\002\000\012\003\uffcf\017\uffcf\027\uffcf\045" +
    "\uffcf\001\002\000\006\003\135\045\134\001\002\000\006" +
    "\020\152\021\142\001\002\000\012\003\uffd1\017\uffd1\027" +
    "\uffd1\045\uffd1\001\002\000\006\003\164\045\157\001\002" +
    "\000\006\003\uffc6\045\uffc6\001\002\000\004\016\156\001" +
    "\002\000\006\003\160\045\157\001\002\000\006\020\uffa4" +
    "\025\uffa4\001\002\000\004\020\uffa3\001\002\000\004\020" +
    "\uffc8\001\002\000\004\020\163\001\002\000\006\003\uffc7" +
    "\045\uffc7\001\002\000\006\020\uffc1\025\uffa3\001\002\000" +
    "\004\025\uffc3\001\002\000\010\002\uffc4\003\uffc4\045\uffc4" +
    "\001\002\000\010\002\uffff\003\164\045\157\001\002\000" +
    "\010\002\uffc5\003\uffc5\045\uffc5\001\002\000\004\025\172" +
    "\001\002\000\016\003\uff8b\020\uff8b\026\uff8b\033\uff8b\045" +
    "\uff8b\046\uff8b\001\002\000\006\020\212\026\211\001\002" +
    "\000\016\003\uffba\020\uffba\026\uffba\033\uffba\045\uffba\046" +
    "\uffba\001\002\000\006\020\uffbe\026\uffbe\001\002\000\016" +
    "\003\135\020\uffbc\026\uffbc\033\201\045\134\046\177\001" +
    "\002\000\016\003\uffb8\020\uffb8\026\uffb8\033\uffb8\045\uffb8" +
    "\046\uffb8\001\002\000\020\003\uff8b\020\uff8b\024\204\026" +
    "\uff8b\033\uff8b\045\uff8b\046\uff8b\001\002\000\006\003\135" +
    "\045\134\001\002\000\016\003\uffbb\020\uffbb\026\uffbb\033" +
    "\uffbb\045\uffbb\046\uffbb\001\002\000\006\020\uffbd\026\uffbd" +
    "\001\002\000\042\003\030\007\015\010\031\011\026\012" +
    "\023\013\016\014\012\015\033\016\017\017\032\027\014" +
    "\030\024\031\022\032\013\036\025\045\020\001\002\000" +
    "\016\003\uffb6\020\uffb6\026\uffb6\033\uffb6\045\uffb6\046\uffb6" +
    "\001\002\000\016\003\uffb9\020\uffb9\026\uffb9\033\uffb9\045" +
    "\uffb9\046\uffb9\001\002\000\016\003\uffb7\020\uffb7\026\uffb7" +
    "\033\uffb7\045\uffb7\046\uffb7\001\002\000\016\003\uffa0\020" +
    "\uffa0\026\uffa0\033\uffa0\045\uffa0\046\uffa0\001\002\000\016" +
    "\003\uff8b\020\uff8b\026\uff8b\033\uff8b\045\uff8b\046\uff8b\001" +
    "\002\000\010\002\uffc2\003\uffc2\045\uffc2\001\002\000\006" +
    "\020\uffbf\026\uffbf\001\002\000\004\020\215\001\002\000" +
    "\010\002\uffc0\003\uffc0\045\uffc0\001\002\000\006\020\uffd9" +
    "\021\uffd9\001\002\000\020\003\uffe5\012\uffe5\013\uffe5\017" +
    "\uffe5\027\uffe5\036\uffe5\045\uffe5\001\002\000\016\020\uffa6" +
    "\021\uffa6\023\uff9f\034\uff9f\040\uff9f\045\uff9f\001\002\000" +
    "\006\020\uffde\021\230\001\002\000\014\020\uffe2\023\uff90" +
    "\034\uff90\040\uff90\045\uff90\001\002\000\006\034\047\045" +
    "\224\001\002\000\006\020\uffa6\021\uffa6\001\002\000\020" +
    "\003\uffe6\012\uffe6\013\uffe6\017\uffe6\027\uffe6\036\uffe6\045" +
    "\uffe6\001\002\000\004\020\227\001\002\000\020\003\uffe1" +
    "\012\uffe1\013\uffe1\017\uffe1\027\uffe1\036\uffe1\045\uffe1\001" +
    "\002\000\004\045\224\001\002\000\004\020\232\001\002" +
    "\000\020\003\uffdd\012\uffdd\013\uffdd\017\uffdd\027\uffdd\036" +
    "\uffdd\045\uffdd\001\002\000\006\020\uffda\021\uffda\001\002" +
    "\000\016\020\uffa5\021\uffa5\023\uff9f\034\uff9f\040\uff9f\045" +
    "\uff9f\001\002\000\006\020\uffd7\021\uffd7\001\002\000\006" +
    "\020\uffdc\021\246\001\002\000\006\034\047\045\244\001" +
    "\002\000\014\020\uffe0\023\uff90\034\uff90\040\uff90\045\uff90" +
    "\001\002\000\020\003\uffe3\012\uffe3\013\uffe3\017\uffe3\027" +
    "\uffe3\036\uffe3\045\uffe3\001\002\000\004\020\243\001\002" +
    "\000\020\003\uffdf\012\uffdf\013\uffdf\017\uffdf\027\uffdf\036" +
    "\uffdf\045\uffdf\001\002\000\006\020\uffa5\021\uffa5\001\002" +
    "\000\020\003\uffe4\012\uffe4\013\uffe4\017\uffe4\027\uffe4\036" +
    "\uffe4\045\uffe4\001\002\000\004\045\244\001\002\000\004" +
    "\020\250\001\002\000\020\003\uffdb\012\uffdb\013\uffdb\017" +
    "\uffdb\027\uffdb\036\uffdb\045\uffdb\001\002\000\006\020\uffd8" +
    "\021\uffd8\001\002\000\042\003\uff8f\007\uff8f\010\uff8f\011" +
    "\uff8f\012\uff8f\013\uff8f\014\uff8f\015\uff8f\016\uff8f\017\uff8f" +
    "\027\uff8f\030\uff8f\031\uff8f\032\uff8f\036\uff8f\045\uff8f\001" +
    "\002\000\004\046\254\001\002\000\022\010\uff8d\011\uff8d" +
    "\012\uff8d\013\uff8d\014\uff8d\015\uff8d\020\115\036\uff8d\001" +
    "\002\000\020\010\uffec\011\uffec\012\uffec\013\uffec\014\uffec" +
    "\015\uffec\036\uffec\001\002\000\004\046\257\001\002\000" +
    "\022\010\uff8d\011\uff8d\012\uff8d\013\uff8d\014\uff8d\015\uff8d" +
    "\020\115\036\uff8d\001\002\000\020\010\uffeb\011\uffeb\012" +
    "\uffeb\013\uffeb\014\uffeb\015\uffeb\036\uffeb\001\002\000\004" +
    "\020\ufff8\001\002\000\010\020\uffa9\023\267\040\uffb4\001" +
    "\002\000\042\003\030\007\015\010\031\011\026\012\023" +
    "\013\016\014\012\015\033\016\017\017\032\027\014\030" +
    "\024\031\022\032\013\036\025\045\020\001\002\000\004" +
    "\020\ufff6\001\002\000\004\020\266\001\002\000\024\005" +
    "\ufff5\010\ufff5\011\ufff5\012\ufff5\013\ufff5\014\ufff5\015\ufff5" +
    "\036\ufff5\044\ufff5\001\002\000\044\003\030\007\015\010" +
    "\031\011\026\012\023\013\016\014\012\015\033\016\017" +
    "\017\032\022\270\027\014\030\024\031\022\032\013\036" +
    "\025\045\020\001\002\000\004\020\uffaa\001\002\000\004" +
    "\020\272\001\002\000\024\005\ufff7\010\ufff7\011\ufff7\012" +
    "\ufff7\013\ufff7\014\ufff7\015\ufff7\036\ufff7\044\ufff7\001\002" +
    "\000\020\003\uff8b\012\104\013\077\017\uff8b\027\123\036" +
    "\103\045\uff8b\001\002\000\010\003\uff8b\017\155\045\uff8b" +
    "\001\002\000\006\003\164\045\157\001\002\000\010\002" +
    "\ufffe\003\164\045\157\001\002\000\004\002\001\001\002" +
    "" });

  /** Access to parse-action table. */
  @Override
  public short[][] action_table() {return _action_table;}

  /** <code>reduce_goto</code> table. */
  protected static final short[][] _reduce_table = 
    unpackFromStrings(new String[] {
    "\000\275\000\006\002\003\060\005\001\001\000\002\001" +
    "\001\000\010\011\077\013\272\023\100\001\001\000\006" +
    "\003\006\036\007\001\001\000\006\004\060\036\061\001" +
    "\001\000\002\001\001\000\006\016\020\054\026\001\001" +
    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
    "\001\001\000\006\061\033\076\034\001\001\000\002\001" +
    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
    "\001\001\000\002\001\001\000\004\054\036\001\001\000" +
    "\002\001\001\000\016\016\042\024\044\054\026\055\043" +
    "\056\045\057\041\001\001\000\002\001\001\000\002\001" +
    "\001\000\004\076\034\001\001\000\002\001\001\000\002" +
    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
    "\001\000\014\016\042\024\044\054\026\056\052\057\041" +
    "\001\001\000\002\001\001\000\002\001\001\000\010\016" +
    "\042\024\056\054\026\001\001\000\010\016\042\024\055" +
    "\054\026\001\001\000\002\001\001\000\002\001\001\000" +
    "\002\001\001\000\010\017\062\036\066\045\064\001\001" +
    "\000\002\001\001\000\002\001\001\000\010\016\261\020" +
    "\260\054\026\001\001\000\004\006\071\001\001\000\002" +
    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
    "\001\000\022\005\104\007\074\011\077\012\075\013\105" +
    "\021\110\022\101\023\100\001\001\000\002\001\001\000" +
    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
    "\001\001\000\016\016\042\024\236\026\235\033\234\044" +
    "\240\054\026\001\001\000\002\001\001\000\002\001\001" +
    "\000\002\001\001\000\016\016\042\024\222\025\220\032" +
    "\215\043\216\054\026\001\001\000\002\001\001\000\016" +
    "\011\077\023\123\036\124\037\120\040\121\042\125\001" +
    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
    "\000\002\001\001\000\004\010\113\001\001\000\002\001" +
    "\001\000\002\001\001\000\002\001\001\000\004\010\117" +
    "\001\001\000\002\001\001\000\006\014\152\036\153\001" +
    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
    "\000\002\001\001\000\004\040\126\001\001\000\002\001" +
    "\001\000\004\070\147\001\001\000\004\071\144\001\001" +
    "\000\004\072\132\001\001\000\012\041\137\047\135\052" +
    "\140\053\136\001\001\000\002\001\001\000\002\001\001" +
    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
    "\002\001\001\000\010\047\135\052\143\053\136\001\001" +
    "\000\002\001\001\000\002\001\001\000\012\041\145\047" +
    "\135\052\140\053\136\001\001\000\002\001\001\000\002" +
    "\001\001\000\012\041\150\047\135\052\140\053\136\001" +
    "\001\000\002\001\001\000\002\001\001\000\010\015\166" +
    "\027\165\046\164\001\001\000\002\001\001\000\002\001" +
    "\001\000\004\046\160\001\001\000\002\001\001\000\002" +
    "\001\001\000\004\073\161\001\001\000\002\001\001\000" +
    "\002\001\001\000\004\075\213\001\001\000\004\074\170" +
    "\001\001\000\002\001\001\000\006\027\167\046\164\001" +
    "\001\000\002\001\001\000\002\001\001\000\012\030\175" +
    "\034\172\035\174\036\173\001\001\000\002\001\001\000" +
    "\002\001\001\000\002\001\001\000\006\031\201\047\177" +
    "\001\001\000\002\001\001\000\006\036\204\051\205\001" +
    "\001\000\006\047\135\053\202\001\001\000\002\001\001" +
    "\000\002\001\001\000\006\050\206\054\207\001\001\000" +
    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
    "\001\001\000\010\030\175\035\212\036\173\001\001\000" +
    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
    "\001\000\004\066\230\001\001\000\004\064\225\001\001" +
    "\000\010\025\220\032\215\043\224\001\001\000\002\001" +
    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
    "\000\004\032\232\001\001\000\002\001\001\000\002\001" +
    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
    "\000\004\067\246\001\001\000\010\026\235\033\234\044" +
    "\244\001\001\000\004\065\241\001\001\000\002\001\001" +
    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
    "\002\001\001\000\004\033\250\001\001\000\002\001\001" +
    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
    "\002\001\001\000\004\010\254\001\001\000\002\001\001" +
    "\000\002\001\001\000\004\010\257\001\001\000\002\001" +
    "\001\000\004\062\270\001\001\000\004\076\034\001\001" +
    "\000\010\016\261\020\263\054\026\001\001\000\004\063" +
    "\264\001\001\000\002\001\001\000\002\001\001\000\004" +
    "\054\036\001\001\000\002\001\001\000\002\001\001\000" +
    "\002\001\001\000\016\011\077\023\123\036\124\037\273" +
    "\040\121\042\125\001\001\000\006\014\274\036\153\001" +
    "\001\000\010\015\275\027\165\046\164\001\001\000\006" +
    "\027\167\046\164\001\001\000\002\001\001" });

  /** Access to <code>reduce_goto</code> table. */
  @Override
  public short[][] reduce_table() {return _reduce_table;}

  /** Instance of action encapsulation class. */
  protected CUP$parser$actions action_obj;

  /** Action encapsulation object initializer. */
  @Override
  protected void init_actions()
    {
      action_obj = new CUP$parser$actions(this);
    }

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

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

  /** <code>EOF</code> Symbol index. */
  @Override
  public int EOF_sym() {return 0;}

  /** <code>error</code> Symbol index. */
  @Override
  public int error_sym() {return 1;}


  /** User initialization code. */
  public void user_init() throws java.lang.Exception
    {
 
    ComplexSymbolFactory f = new ComplexSymbolFactory();
    symbolFactory = f;
    lexer = new Lexer(f); 

    }

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

    }


 /* override error routines */
  protected Lexer lexer;
  public boolean debugSymbols;
  public void setDebugSymbols(boolean debugSymbols){
  	this.debugSymbols = debugSymbols;
  }
  public void report_fatal_error(
    String   message,
    Object   info)
    {
      done_parsing();
      if (info instanceof Symbol) ErrorManager.getManager().emit_fatal(message+ "\nCan't recover from previous error(s), giving up.",(Symbol)info);
      else ErrorManager.getManager().emit_fatal(message + "\nCan't recover from previous error(s), giving up.",cur_token);
      System.exit(1);
    }

    public void report_error(String message, Object info)
    {
      if (info instanceof Symbol)
         ErrorManager.getManager().emit_error(message,(Symbol)info);
      else
         ErrorManager.getManager().emit_error(message,cur_token);
    }


/** Cup generated class to encapsulate user supplied action code.*/
class CUP$parser$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"); 
	  for (int i=0;i<rhs_pos;i++)
	  	if (part.label()!=null && part.label().equals(rhs_parts[i].label()))
		  this.parser.report_error("Label '"+part.label()+"' for symbol #"+rhs_pos+" already used for symbol #"+i+"; compilation will fail",part);
      rhs_parts[rhs_pos] = part;
      rhs_pos++;
    }

  /** string to build up multiple part names */
  protected String multipart_name = new String();
  protected Stack<String> multipart_names = new Stack<>();
  /** append a new name segment to the accumulated multipart name */

//  TUM CHANGES
//   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);
//     }
// TUM CHANGES

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

  /** table of just non terminals -- contains non_terminals indexed by name */
  protected Hashtable<String,non_terminal> 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);
      }
    }
  }
  
  private int cur_debug_id = 0;
  public int get_new_debug_id() {
   	return cur_debug_id++;
  }
   
  public String attach_debug_symbol(int id, String code) {
 	if (!parser.debugSymbols)
 		return code;
 	return "//@@CUPDBG" + id + "\n" + code;
  }

  private final parser parser;

  /** Constructor */
  CUP$parser$actions(parser parser) {
    this.parser = parser;
  }

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

      /* select the action based on the action number */
      switch (CUP$parser$act_num)
        {
          /*. . . . . . . . . . . . . . . . . . . .*/
          case 0: // $START ::= spec EOF 
            {
              Object RESULT =null;
		Location start_valxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).xleft;
		Location start_valxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).xright;
		Object start_val = CUP$parser$stack.elementAt(CUP$parser$top-1).<Object>value();
		RESULT = start_val;
              CUP$parser$result = parser.getSymbolFactory().newSymbol("$START",0, CUP$parser$stack.elementAt(CUP$parser$top-1), CUP$parser$stack.peek(), RESULT);
            }
          /* ACCEPT */
          CUP$parser$parser.done_parsing();
          return CUP$parser$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$parser$result = parser.getSymbolFactory().newSymbol("NT$0",46, CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 2: // spec ::= NT$0 package_spec import_list class_name code_parts symbol_list precedence_list start_spec production_list 
            {
              Object RESULT =null;
              // propagate RESULT from NT$0
                RESULT = CUP$parser$stack.elementAt(CUP$parser$top-8).<Object>value();

              CUP$parser$result = parser.getSymbolFactory().newSymbol("spec",0, CUP$parser$stack.elementAt(CUP$parser$top-8), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("spec",0, CUP$parser$stack.elementAt(CUP$parser$top-4), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$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$parser$result = parser.getSymbolFactory().newSymbol("NT$1",47, CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 5: // package_spec ::= PACKAGE multipart_id NT$1 SEMI 
            {
              Object RESULT =null;
              // propagate RESULT from NT$1
                RESULT = CUP$parser$stack.elementAt(CUP$parser$top-1).<Object>value();

              CUP$parser$result = parser.getSymbolFactory().newSymbol("package_spec",1, CUP$parser$stack.elementAt(CUP$parser$top-3), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("package_spec",1, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("import_list",2, CUP$parser$stack.elementAt(CUP$parser$top-1), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("import_list",2, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$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$parser$result = parser.getSymbolFactory().newSymbol("NT$2",48, CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 10: // import_spec ::= IMPORT import_id NT$2 SEMI 
            {
              Object RESULT =null;
              // propagate RESULT from NT$2
                RESULT = CUP$parser$stack.elementAt(CUP$parser$top-1).<Object>value();

              CUP$parser$result = parser.getSymbolFactory().newSymbol("import_spec",13, CUP$parser$stack.elementAt(CUP$parser$top-3), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 11: // NT$3 ::= 
            {
              Object RESULT =null;
 
	  /* save this import on the imports list */
	  emit.import_list.push(" static " + multipart_name);

	  /* reset the accumulated multipart name */
	  multipart_name = new String();
	
              CUP$parser$result = parser.getSymbolFactory().newSymbol("NT$3",49, CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 12: // import_spec ::= IMPORT STATIC import_id NT$3 SEMI 
            {
              Object RESULT =null;
              // propagate RESULT from NT$3
                RESULT = CUP$parser$stack.elementAt(CUP$parser$top-1).<Object>value();

              CUP$parser$result = parser.getSymbolFactory().newSymbol("import_spec",13, CUP$parser$stack.elementAt(CUP$parser$top-4), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("class_name",35, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 14: // class_name ::= CLASS ID SEMI 
            {
              Object RESULT =null;
		Location idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).xleft;
		Location idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).xright;
		String id = CUP$parser$stack.elementAt(CUP$parser$top-1).<String>value();
		
     emit.parser_class_name = id;
     emit.symbol_const_class_name = id + "Sym";
    
              CUP$parser$result = parser.getSymbolFactory().newSymbol("class_name",35, CUP$parser$stack.elementAt(CUP$parser$top-2), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("code_part",5, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("code_part",5, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("code_part",5, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 18: // code_part ::= scan_code 
            {
              Object RESULT =null;

              CUP$parser$result = parser.getSymbolFactory().newSymbol("code_part",5, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("code_parts",4, CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 20: // code_parts ::= code_parts code_part 
            {
              Object RESULT =null;

              CUP$parser$result = parser.getSymbolFactory().newSymbol("code_parts",4, CUP$parser$stack.elementAt(CUP$parser$top-1), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 21: // action_code_part ::= ACTION CODE CODE_STRING opt_semi 
            {
              Object RESULT =null;
		Location user_codexleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).xleft;
		Location user_codexright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).xright;
		String user_code = CUP$parser$stack.elementAt(CUP$parser$top-1).<String>value();
		
	  if (emit.action_code!=null)
	    ErrorManager.getManager().emit_warning("Redundant action code (skipping)");
	  else /* save the user included code string */
	    emit.action_code = attach_debug_symbol(get_new_debug_id(),user_code);
	
              CUP$parser$result = parser.getSymbolFactory().newSymbol("action_code_part",3, CUP$parser$stack.elementAt(CUP$parser$top-3), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 22: // parser_code_part ::= PARSER CODE CODE_STRING opt_semi 
            {
              Object RESULT =null;
		Location user_codexleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).xleft;
		Location user_codexright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).xright;
		String user_code = CUP$parser$stack.elementAt(CUP$parser$top-1).<String>value();
		
	  if (emit.parser_code!=null)
	    ErrorManager.getManager().emit_warning("Redundant parser code (skipping)");
	  else /* save the user included code string */
	    emit.parser_code = attach_debug_symbol(get_new_debug_id(),user_code);
	
              CUP$parser$result = parser.getSymbolFactory().newSymbol("parser_code_part",8, CUP$parser$stack.elementAt(CUP$parser$top-3), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 23: // init_code ::= INIT WITH CODE_STRING opt_semi 
            {
              Object RESULT =null;
		Location user_codexleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).xleft;
		Location user_codexright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).xright;
		String user_code = CUP$parser$stack.elementAt(CUP$parser$top-1).<String>value();
		 
	  if (emit.init_code!=null)
	    ErrorManager.getManager().emit_warning("Redundant init code (skipping)");
	  else /* save the user code */
	    emit.init_code = attach_debug_symbol(get_new_debug_id(),user_code);
	
              CUP$parser$result = parser.getSymbolFactory().newSymbol("init_code",15, CUP$parser$stack.elementAt(CUP$parser$top-3), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 24: // scan_code ::= SCAN WITH CODE_STRING opt_semi 
            {
              Object RESULT =null;
		Location user_codexleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).xleft;
		Location user_codexright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).xright;
		String user_code = CUP$parser$stack.elementAt(CUP$parser$top-1).<String>value();
		 
	  if (emit.scan_code!=null)
	    ErrorManager.getManager().emit_warning("Redundant scan code (skipping)");
	  else /* save the user code */
	    emit.scan_code = attach_debug_symbol(get_new_debug_id(),user_code);
	
              CUP$parser$result = parser.getSymbolFactory().newSymbol("scan_code",16, CUP$parser$stack.elementAt(CUP$parser$top-3), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("symbol_list",9, CUP$parser$stack.elementAt(CUP$parser$top-1), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("symbol_list",9, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("symbol",17, CUP$parser$stack.elementAt(CUP$parser$top-2), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("symbol",17, CUP$parser$stack.elementAt(CUP$parser$top-1), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 29: // symbol ::= non_terminal type_id declares_non_term 
            {
              Object RESULT =null;

              CUP$parser$result = parser.getSymbolFactory().newSymbol("symbol",17, CUP$parser$stack.elementAt(CUP$parser$top-2), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 30: // symbol ::= non_terminal declares_non_term 
            {
              Object RESULT =null;

              CUP$parser$result = parser.getSymbolFactory().newSymbol("symbol",17, CUP$parser$stack.elementAt(CUP$parser$top-1), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

	  /* reset the accumulated multipart name */
	  multipart_name = new String();
	
              CUP$parser$result = parser.getSymbolFactory().newSymbol("NT$4",50, CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 32: // symbol ::= TERMINAL error NT$4 SEMI 
            {
              Object RESULT =null;
              // propagate RESULT from NT$4
                RESULT = CUP$parser$stack.elementAt(CUP$parser$top-1).<Object>value();

              CUP$parser$result = parser.getSymbolFactory().newSymbol("symbol",17, CUP$parser$stack.elementAt(CUP$parser$top-3), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 33: // NT$5 ::= 
            {
              Object RESULT =null;

	  /* reset the accumulated multipart name */
	  multipart_name = new String();
	
              CUP$parser$result = parser.getSymbolFactory().newSymbol("NT$5",51, CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 34: // symbol ::= non_terminal error NT$5 SEMI 
            {
              Object RESULT =null;
              // propagate RESULT from NT$5
                RESULT = CUP$parser$stack.elementAt(CUP$parser$top-1).<Object>value();

              CUP$parser$result = parser.getSymbolFactory().newSymbol("symbol",17, CUP$parser$stack.elementAt(CUP$parser$top-3), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 35: // NT$6 ::= 
            {
              Object RESULT =null;
 
	  /* reset the accumulated multipart name */
	  multipart_name = new String();
	
              CUP$parser$result = parser.getSymbolFactory().newSymbol("NT$6",52, CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 36: // declares_term ::= term_name_list NT$6 SEMI 
            {
              Object RESULT =null;
              // propagate RESULT from NT$6
                RESULT = CUP$parser$stack.elementAt(CUP$parser$top-1).<Object>value();

              CUP$parser$result = parser.getSymbolFactory().newSymbol("declares_term",33, CUP$parser$stack.elementAt(CUP$parser$top-2), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 37: // NT$7 ::= 
            {
              Object RESULT =null;
 
	  /* reset the accumulated multipart name */
	  multipart_name = new String();
	
              CUP$parser$result = parser.getSymbolFactory().newSymbol("NT$7",53, CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 38: // declares_non_term ::= non_term_name_list NT$7 SEMI 
            {
              Object RESULT =null;
              // propagate RESULT from NT$7
                RESULT = CUP$parser$stack.elementAt(CUP$parser$top-1).<Object>value();

              CUP$parser$result = parser.getSymbolFactory().newSymbol("declares_non_term",34, CUP$parser$stack.elementAt(CUP$parser$top-2), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("term_name_list",19, CUP$parser$stack.elementAt(CUP$parser$top-2), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("term_name_list",19, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("non_term_name_list",20, CUP$parser$stack.elementAt(CUP$parser$top-2), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("non_term_name_list",20, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("precedence_list",29, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("precedence_list",29, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("precedence_l",32, CUP$parser$stack.elementAt(CUP$parser$top-1), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("precedence_l",32, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

	  update_precedence(assoc.left);
	
              CUP$parser$result = parser.getSymbolFactory().newSymbol("NT$8",54, CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 48: // preced ::= PRECEDENCE LEFT NT$8 terminal_list SEMI 
            {
              Object RESULT =null;
              // propagate RESULT from NT$8
                RESULT = CUP$parser$stack.elementAt(CUP$parser$top-2).<Object>value();

              CUP$parser$result = parser.getSymbolFactory().newSymbol("preced",30, CUP$parser$stack.elementAt(CUP$parser$top-4), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

	  update_precedence(assoc.right);
	
              CUP$parser$result = parser.getSymbolFactory().newSymbol("NT$9",55, CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 50: // preced ::= PRECEDENCE RIGHT NT$9 terminal_list SEMI 
            {
              Object RESULT =null;
              // propagate RESULT from NT$9
                RESULT = CUP$parser$stack.elementAt(CUP$parser$top-2).<Object>value();

              CUP$parser$result = parser.getSymbolFactory().newSymbol("preced",30, CUP$parser$stack.elementAt(CUP$parser$top-4), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 51: // NT$10 ::= 
            {
              Object RESULT =null;

	  update_precedence(assoc.nonassoc);
	
              CUP$parser$result = parser.getSymbolFactory().newSymbol("NT$10",56, CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 52: // preced ::= PRECEDENCE NONASSOC NT$10 terminal_list SEMI 
            {
              Object RESULT =null;
              // propagate RESULT from NT$10
                RESULT = CUP$parser$stack.elementAt(CUP$parser$top-2).<Object>value();

              CUP$parser$result = parser.getSymbolFactory().newSymbol("preced",30, CUP$parser$stack.elementAt(CUP$parser$top-4), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("terminal_list",31, CUP$parser$stack.elementAt(CUP$parser$top-2), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("terminal_list",31, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 55: // terminal_id ::= term_id 
            {
              String RESULT =null;
		Location symxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xleft;
		Location symxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xright;
		String sym = CUP$parser$stack.peek().<String>value();
			
	  add_precedence(sym);
	  RESULT = sym;
	
              CUP$parser$result = parser.getSymbolFactory().newSymbol("terminal_id",40, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 56: // term_id ::= symbol_id 
            {
              String RESULT =null;
		Location symxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xleft;
		Location symxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xright;
		String sym = CUP$parser$stack.peek().<String>value();
		
	  /* check that the symbol_id is a terminal */
	  if (symbols.get(sym) == null)
	    {
	      /* issue a message */
	      ErrorManager.getManager().emit_error("Terminal \"" + sym + 
			   "\" has not been declared");
	    }
          RESULT = sym;
         
              CUP$parser$result = parser.getSymbolFactory().newSymbol("term_id",41, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 57: // NT$11 ::= 
            {
              Object RESULT =null;
		Location start_namexleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xleft;
		Location start_namexright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xright;
		String start_name = CUP$parser$stack.peek().<String>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)
	    {
	    ErrorManager.getManager().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));
	      if (!emit._xmlactions) 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$parser$result = parser.getSymbolFactory().newSymbol("NT$11",57, CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 58: // start_spec ::= START WITH nt_id NT$11 SEMI 
            {
              Object RESULT =null;
              // propagate RESULT from NT$11
                RESULT = CUP$parser$stack.elementAt(CUP$parser$top-1).<Object>value();
		Location start_namexleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).xleft;
		Location start_namexright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).xright;
		String start_name = CUP$parser$stack.elementAt(CUP$parser$top-2).<String>value();

              CUP$parser$result = parser.getSymbolFactory().newSymbol("start_spec",10, CUP$parser$stack.elementAt(CUP$parser$top-4), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("start_spec",10, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("production_list",11, CUP$parser$stack.elementAt(CUP$parser$top-1), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("production_list",11, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 62: // NT$12 ::= 
            {
              Object RESULT =null;
		Location lhs_idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xleft;
		Location lhs_idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xright;
		String lhs_id = CUP$parser$stack.peek().<String>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 (ErrorManager.getManager().getErrorCount() == 0)
	      ErrorManager.getManager().emit_warning("LHS non terminal \"" + lhs_id + 
			       "\" has not been declared");
	    }

	  /* reset the rhs accumulation */
	  new_rhs();
	
              CUP$parser$result = parser.getSymbolFactory().newSymbol("NT$12",58, CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 63: // production ::= nt_id NT$12 COLON_COLON_EQUALS rhs_list SEMI 
            {
              Object RESULT =null;
              // propagate RESULT from NT$12
                RESULT = CUP$parser$stack.elementAt(CUP$parser$top-3).<Object>value();
		Location lhs_idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).xleft;
		Location lhs_idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).xright;
		String lhs_id = CUP$parser$stack.elementAt(CUP$parser$top-4).<String>value();

              CUP$parser$result = parser.getSymbolFactory().newSymbol("production",21, CUP$parser$stack.elementAt(CUP$parser$top-4), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 64: // NT$13 ::= 
            {
              Object RESULT =null;
 ErrorManager.getManager().emit_error("Syntax Error"); 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("NT$13",59, CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 65: // production ::= error NT$13 SEMI 
            {
              Object RESULT =null;
              // propagate RESULT from NT$13
                RESULT = CUP$parser$stack.elementAt(CUP$parser$top-1).<Object>value();

              CUP$parser$result = parser.getSymbolFactory().newSymbol("production",21, CUP$parser$stack.elementAt(CUP$parser$top-2), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("rhs_list",26, CUP$parser$stack.elementAt(CUP$parser$top-2), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("rhs_list",26, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 68: // rhs ::= prod_part_list PERCENT_PREC term_id 
            {
              Object RESULT =null;
		Location term_namexleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xleft;
		Location term_namexright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xright;
		String term_name = CUP$parser$stack.peek().<String>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(add_lab(new symbol_part(start_nt),"start_val"));
	          add_rhs_part(new symbol_part(terminal.EOF));
		  if (!emit._xmlactions) add_rhs_part(new action_part("RESULT = start_val;"));
		  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$parser$result = parser.getSymbolFactory().newSymbol("rhs",27, CUP$parser$stack.elementAt(CUP$parser$top-2), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 69: // 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(add_lab(new symbol_part(start_nt),"start_val"));
	          add_rhs_part(new symbol_part(terminal.EOF));
		  if (!emit._xmlactions) add_rhs_part(new action_part("RESULT = start_val;"));
	          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$parser$result = parser.getSymbolFactory().newSymbol("rhs",27, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("prod_part_list",22, CUP$parser$stack.elementAt(CUP$parser$top-1), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("prod_part_list",22, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 72: // prod_part ::= symbol_id opt_label 
            {
              Object RESULT =null;
		Location symidxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).xleft;
		Location symidxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).xright;
		String symid = CUP$parser$stack.elementAt(CUP$parser$top-1).<String>value();
		Location labidxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xleft;
		Location labidxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xright;
		String labid = CUP$parser$stack.peek().<String>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 (ErrorManager.getManager().getErrorCount() == 0)
	        ErrorManager.getManager().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$parser$result = parser.getSymbolFactory().newSymbol("prod_part",23, CUP$parser$stack.elementAt(CUP$parser$top-1), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 73: // prod_part ::= CODE_STRING 
            {
              Object RESULT =null;
		Location code_strxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xleft;
		Location code_strxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xright;
		String code_str = CUP$parser$stack.peek().<String>value();
		 
	  /* add a new production part */
	  add_rhs_part(new action_part(attach_debug_symbol(get_new_debug_id(),code_str)));
	
              CUP$parser$result = parser.getSymbolFactory().newSymbol("prod_part",23, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 74: // opt_label ::= COLON label_id 
            {
              String RESULT =null;
		Location labidxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xleft;
		Location labidxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xright;
		String labid = CUP$parser$stack.peek().<String>value();
		 RESULT = labid; 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("opt_label",39, CUP$parser$stack.elementAt(CUP$parser$top-1), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 75: // opt_label ::= empty 
            {
              String RESULT =null;
		 RESULT = null; 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("opt_label",39, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 76: // multipart_id ::= multipart_id DOT robust_id 
            {
              Object RESULT =null;
		Location another_idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xleft;
		Location another_idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xright;
		String another_id = CUP$parser$stack.peek().<String>value();
		 multipart_name = multipart_name.concat("."+another_id); 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("multipart_id",12, CUP$parser$stack.elementAt(CUP$parser$top-2), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 77: // NT$14 ::= 
            {
              Object RESULT =null;
 multipart_names.push(multipart_name); multipart_name="";
              CUP$parser$result = parser.getSymbolFactory().newSymbol("NT$14",60, CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 78: // multipart_id ::= multipart_id NT$14 LT typearglist GT 
            {
              Object RESULT =null;
              // propagate RESULT from NT$14
                RESULT = CUP$parser$stack.elementAt(CUP$parser$top-3).<Object>value();
		Location typesxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).xleft;
		Location typesxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).xright;
		String types = CUP$parser$stack.elementAt(CUP$parser$top-1).<String>value();
		 multipart_name =
         ((String)multipart_names.pop()).concat("<"+types+">"); 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("multipart_id",12, CUP$parser$stack.elementAt(CUP$parser$top-4), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 79: // multipart_id ::= robust_id 
            {
              Object RESULT =null;
		Location an_idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xleft;
		Location an_idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xright;
		String an_id = CUP$parser$stack.peek().<String>value();
		 multipart_name = multipart_name.concat(an_id); 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("multipart_id",12, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 80: // typearglist ::= typearguement 
            {
              String RESULT =null;
		Location argxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xleft;
		Location argxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xright;
		String arg = CUP$parser$stack.peek().<String>value();
		 RESULT = arg; 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("typearglist",43, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 81: // typearglist ::= typearglist COMMA typearguement 
            {
              String RESULT =null;
		Location listxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).xleft;
		Location listxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).xright;
		String list = CUP$parser$stack.elementAt(CUP$parser$top-2).<String>value();
		Location argxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xleft;
		Location argxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xright;
		String arg = CUP$parser$stack.peek().<String>value();
		 RESULT = list + "," + arg; 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("typearglist",43, CUP$parser$stack.elementAt(CUP$parser$top-2), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 82: // typearguement ::= type_id 
            {
              String RESULT =null;
		 RESULT = multipart_name; multipart_name = new String(); 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("typearguement",44, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 83: // typearguement ::= wildcard 
            {
              String RESULT =null;
		Location wxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xleft;
		Location wxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xright;
		String w = CUP$parser$stack.peek().<String>value();
		 RESULT = w; 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("typearguement",44, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 84: // wildcard ::= QUESTION 
            {
              String RESULT =null;
		 RESULT = " ? "; 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("wildcard",45, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 85: // wildcard ::= QUESTION EXTENDS type_id 
            {
              String RESULT =null;
		 RESULT = " ? extends "+multipart_name; multipart_name = new
         String(); 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("wildcard",45, CUP$parser$stack.elementAt(CUP$parser$top-2), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 86: // wildcard ::= QUESTION SUPER type_id 
            {
              String RESULT =null;
		 RESULT = " ? super "+multipart_name; multipart_name = new
         String(); 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("wildcard",45, CUP$parser$stack.elementAt(CUP$parser$top-2), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 87: // import_id ::= multipart_id DOT STAR 
            {
              Object RESULT =null;
		 multipart_name = multipart_name.concat(".*"); 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("import_id",14, CUP$parser$stack.elementAt(CUP$parser$top-2), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("import_id",14, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("type_id",18, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 90: // type_id ::= type_id LBRACK RBRACK 
            {
              Object RESULT =null;
		 multipart_name = multipart_name.concat("[]"); 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("type_id",18, CUP$parser$stack.elementAt(CUP$parser$top-2), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 91: // new_term_id ::= ID 
            {
              Object RESULT =null;
		Location term_idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xleft;
		Location term_idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xright;
		String term_id = CUP$parser$stack.peek().<String>value();
		 
	  /* see if this terminal has been declared before */
	  if (symbols.get(term_id) != null)
	    {
	      /* issue a message */
	      ErrorManager.getManager().emit_error("java_cup.runtime.Symbol \"" + term_id + 
			   "\" has already been declared");
	    }
	  else
	    {
	      /* if no type declared, declare one */
	      if (multipart_name.equals("")) {
		multipart_name = "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$parser$result = parser.getSymbolFactory().newSymbol("new_term_id",24, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 92: // new_non_term_id ::= ID 
            {
              Object RESULT =null;
		Location non_term_idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xleft;
		Location non_term_idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xright;
		String non_term_id = CUP$parser$stack.peek().<String>value();
		 
	  /* see if this non terminal has been declared before */
	  if (symbols.get(non_term_id) != null)
	    {
	      /* issue a message */
	      ErrorManager.getManager().emit_error( "java_cup.runtime.Symbol \"" + non_term_id + 
			                      "\" has already been declared");
	    }
	  else
	    {
	      if (multipart_name.equals("")) {
                   multipart_name ="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$parser$result = parser.getSymbolFactory().newSymbol("new_non_term_id",25, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 93: // nt_id ::= ID 
            {
              String RESULT =null;
		Location the_idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xleft;
		Location the_idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xright;
		String the_id = CUP$parser$stack.peek().<String>value();
		 RESULT = the_id; 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("nt_id",36, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 94: // nt_id ::= error 
            {
              String RESULT =null;
		
		ErrorManager.getManager().emit_error("Illegal use of reserved word");
		RESULT="ILLEGAL";
	
              CUP$parser$result = parser.getSymbolFactory().newSymbol("nt_id",36, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 95: // symbol_id ::= ID 
            {
              String RESULT =null;
		Location the_idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xleft;
		Location the_idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xright;
		String the_id = CUP$parser$stack.peek().<String>value();
		 RESULT = the_id; 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("symbol_id",37, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 96: // symbol_id ::= error 
            {
              String RESULT =null;
		
		ErrorManager.getManager().emit_error("Illegal use of reserved word");
		RESULT="ILLEGAL";
	
              CUP$parser$result = parser.getSymbolFactory().newSymbol("symbol_id",37, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 97: // label_id ::= robust_id 
            {
              String RESULT =null;
		Location the_idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xleft;
		Location the_idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xright;
		String the_id = CUP$parser$stack.peek().<String>value();
		 RESULT = the_id; 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("label_id",38, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 98: // robust_id ::= ID 
            {
              String RESULT =null;
		Location the_idxleft = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xleft;
		Location the_idxright = ((java_cup.runtime.ComplexSymbolFactory.ComplexSymbol)CUP$parser$stack.peek()).xright;
		String the_id = CUP$parser$stack.peek().<String>value();
		 RESULT = the_id; 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("robust_id",42, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 99: // robust_id ::= CODE 
            {
              String RESULT =null;
		 RESULT = "code"; 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("robust_id",42, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 100: // robust_id ::= ACTION 
            {
              String RESULT =null;
		 RESULT = "action"; 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("robust_id",42, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 101: // robust_id ::= PARSER 
            {
              String RESULT =null;
		 RESULT = "parser"; 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("robust_id",42, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 102: // robust_id ::= TERMINAL 
            {
              String RESULT =null;
		 RESULT = "terminal"; 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("robust_id",42, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 103: // robust_id ::= NON 
            {
              String RESULT =null;
		 RESULT = "non"; 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("robust_id",42, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 104: // robust_id ::= NONTERMINAL 
            {
              String RESULT =null;
		 RESULT = "nonterminal"; 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("robust_id",42, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 105: // robust_id ::= INIT 
            {
              String RESULT =null;
		 RESULT = "init"; 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("robust_id",42, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 106: // robust_id ::= SCAN 
            {
              String RESULT =null;
		 RESULT = "scan"; 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("robust_id",42, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 107: // robust_id ::= WITH 
            {
              String RESULT =null;
		 RESULT = "with"; 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("robust_id",42, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 108: // robust_id ::= START 
            {
              String RESULT =null;
		 RESULT = "start"; 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("robust_id",42, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 109: // robust_id ::= PRECEDENCE 
            {
              String RESULT =null;
		 RESULT = "precedence"; 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("robust_id",42, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 110: // robust_id ::= LEFT 
            {
              String RESULT =null;
		 RESULT = "left"; 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("robust_id",42, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 111: // robust_id ::= RIGHT 
            {
              String RESULT =null;
		 RESULT = "right"; 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("robust_id",42, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 112: // robust_id ::= NONASSOC 
            {
              String RESULT =null;
		 RESULT = "nonassoc"; 
              CUP$parser$result = parser.getSymbolFactory().newSymbol("robust_id",42, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 113: // robust_id ::= error 
            {
              String RESULT =null;
		
		ErrorManager.getManager().emit_error("Illegal use of reserved word");
		RESULT="ILLEGAL";
	
              CUP$parser$result = parser.getSymbolFactory().newSymbol("robust_id",42, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 114: // non_terminal ::= NON TERMINAL 
            {
              Object RESULT =null;

              CUP$parser$result = parser.getSymbolFactory().newSymbol("non_terminal",7, CUP$parser$stack.elementAt(CUP$parser$top-1), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 115: // non_terminal ::= NONTERMINAL 
            {
              Object RESULT =null;

              CUP$parser$result = parser.getSymbolFactory().newSymbol("non_terminal",7, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 116: // opt_semi ::= 
            {
              Object RESULT =null;

              CUP$parser$result = parser.getSymbolFactory().newSymbol("opt_semi",6, CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 117: // opt_semi ::= SEMI 
            {
              Object RESULT =null;

              CUP$parser$result = parser.getSymbolFactory().newSymbol("opt_semi",6, CUP$parser$stack.peek(), CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

              CUP$parser$result = parser.getSymbolFactory().newSymbol("empty",28, CUP$parser$stack.peek(), RESULT);
            }
          return CUP$parser$result;

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

        }
    } /* end of method */

  /** Method splitting the generated action code into several parts. */
  public final java_cup.runtime.Symbol CUP$parser$do_action(
    int                        CUP$parser$act_num,
    java_cup.runtime.lr_parser CUP$parser$parser,
    java.util.Stack<java_cup.runtime.Symbol>     CUP$parser$stack,
    int                        CUP$parser$top)
    throws java.lang.Exception
    {
              return CUP$parser$do_action_part00000000(
                               CUP$parser$act_num,
                               CUP$parser$parser,
                               CUP$parser$stack,
                               CUP$parser$top);
    }
}

}
