//----------------------------------------------------
// The following code was generated by CUP v0.11a beta 20060608
// Sat Mar 28 15:23:52 CET 2015
//----------------------------------------------------

package java_cup;

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

/** CUP v0.11a beta 20060608 generated parser.
  * @version Sat Mar 28 15:23:52 CET 2015
  */
public class parser extends java_cup.runtime.lr_parser {

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

	/** Constructor which sets the default scanner. */
	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\165\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\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\063\002\000\002\023\006\000\002\064\002" +
							"\000\002\023\006\000\002\065\002\000\002\043\005\000" +
							"\002\066\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\067\002\000\002\040\007\000\002\070\002\000" +
							"\002\040\007\000\002\071\002\000\002\040\007\000\002" +
							"\041\005\000\002\041\003\000\002\052\003\000\002\053" +
							"\003\000\002\072\002\000\002\014\007\000\002\014\003" +
							"\000\002\015\004\000\002\015\003\000\002\073\002\000" +
							"\002\027\007\000\002\074\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\075\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. */
	public short[][] production_table() {
		return _production_table;
	}

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

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

	/** <code>reduce_goto</code> table. */
	protected static final short[][] _reduce_table =
			unpackFromStrings(new String[] {
					"\000\271\000\006\002\003\060\005\001\001\000\002\001" +
							"\001\000\010\011\077\013\266\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\075\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\075\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\065\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\237\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\221\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\067\147\001\001\000\004\070\144\001\001" +
							"\000\004\071\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\165" +
							"\027\166\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\072\161\001\001\000\002\001\001\000" +
							"\002\001\001\000\004\074\213\001\001\000\004\073\170" +
							"\001\001\000\006\027\167\046\164\001\001\000\002\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\065\230\001\001\000\010\025\220\032\215" +
							"\043\226\001\001\000\004\063\223\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\066\246\001\001\000\004\064\243\001\001\000" +
							"\010\026\235\033\234\044\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\264\001\001\000\004\075\034\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\267\040\121\042\125\001\001\000\006\014\270\036" +
							"\153\001\001\000\010\015\271\027\166\046\164\001\001" +
							"\000\006\027\167\046\164\001\001\000\002\001\001" });

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

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

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

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

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

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

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

	/** <code>error</code> Symbol index. */
	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. */
	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");

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

	/** string to build up multiple part names */
	protected String multipart_name = new String();
	protected Stack 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 symbols = new Hashtable();

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

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

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

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

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

	/** update the precedences we are declaring */
	protected void update_precedence(int p) {
		_cur_side = p;
		_cur_prec++;
	}

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

	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 with the actual generated action code. */
	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 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 116: // empty ::= 
		{
			Object RESULT = null;

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

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

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

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

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

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

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

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

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

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 111: // 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,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 96: // robust_id ::= ID 
		{
			String RESULT = null;
			int the_idleft = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left;
			int the_idright = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right;
			String the_id = (String) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value;
			RESULT = the_id;
			CUP$parser$result =
					parser.getSymbolFactory().newSymbol("robust_id", 42,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 95: // label_id ::= robust_id 
		{
			String RESULT = null;
			int the_idleft = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left;
			int the_idright = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right;
			String the_id = (String) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value;
			RESULT = the_id;
			CUP$parser$result =
					parser.getSymbolFactory().newSymbol("label_id", 38,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 94: // 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,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 93: // symbol_id ::= ID 
		{
			String RESULT = null;
			int the_idleft = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left;
			int the_idright = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right;
			String the_id = (String) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value;
			RESULT = the_id;
			CUP$parser$result =
					parser.getSymbolFactory().newSymbol("symbol_id", 37,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 92: // 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,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 91: // nt_id ::= ID 
		{
			String RESULT = null;
			int the_idleft = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left;
			int the_idright = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right;
			String the_id = (String) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value;
			RESULT = the_id;
			CUP$parser$result =
					parser.getSymbolFactory().newSymbol("nt_id", 36,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 90: // new_non_term_id ::= ID 
		{
			Object RESULT = null;
			int non_term_idleft = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left;
			int non_term_idright = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right;
			String non_term_id = (String) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).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,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 89: // new_term_id ::= ID 
		{
			Object RESULT = null;
			int term_idleft = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left;
			int term_idright = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right;
			String term_id = (String) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).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,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

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

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

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

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

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

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

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

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

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

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 81: // typearguement ::= wildcard 
		{
			String RESULT = null;
			int wleft = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left;
			int wright = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right;
			String w = (String) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value;
			RESULT = w;
			CUP$parser$result =
					parser.getSymbolFactory().newSymbol("typearguement", 44,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

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

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 79: // typearglist ::= typearglist COMMA typearguement 
		{
			String RESULT = null;
			int listleft = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)).left;
			int listright = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)).right;
			String list = (String) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)).value;
			int argleft = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left;
			int argright = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right;
			String arg = (String) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value;
			RESULT = list + "," + arg;
			CUP$parser$result =
					parser.getSymbolFactory().newSymbol("typearglist", 43,
							((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 78: // typearglist ::= typearguement 
		{
			String RESULT = null;
			int argleft = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left;
			int argright = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right;
			String arg = (String) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value;
			RESULT = arg;
			CUP$parser$result =
					parser.getSymbolFactory().newSymbol("typearglist", 43,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 77: // multipart_id ::= robust_id 
		{
			Object RESULT = null;
			int an_idleft = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left;
			int an_idright = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right;
			String an_id = (String) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value;
			multipart_name = multipart_name.concat(an_id);
			CUP$parser$result =
					parser.getSymbolFactory().newSymbol("multipart_id", 12,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 76: // multipart_id ::= multipart_id NT$13 LT typearglist GT 
		{
			Object RESULT = null;
			// propagate RESULT from NT$13
			RESULT = (Object) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 3)).value;
			int typesleft = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).left;
			int typesright = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).right;
			String types = (String) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).value;
			multipart_name =
					((String) multipart_names.pop()).concat("<" + types + ">");
			CUP$parser$result =
					parser.getSymbolFactory().newSymbol("multipart_id", 12,
							((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 4)),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 75: // NT$13 ::= 
		{
			Object RESULT = null;
			multipart_names.push(multipart_name);
			multipart_name = "";
			CUP$parser$result =
					parser.getSymbolFactory().newSymbol("NT$13", 59,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 74: // multipart_id ::= multipart_id DOT robust_id 
		{
			Object RESULT = null;
			int another_idleft = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left;
			int another_idright = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right;
			String another_id = (String) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value;
			multipart_name = multipart_name.concat("." + another_id);
			CUP$parser$result =
					parser.getSymbolFactory().newSymbol("multipart_id", 12,
							((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

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

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 72: // opt_label ::= COLON label_id 
		{
			String RESULT = null;
			int labidleft = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left;
			int labidright = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right;
			String labid = (String) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value;
			RESULT = labid;
			CUP$parser$result =
					parser.getSymbolFactory().newSymbol("opt_label", 39,
							((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 71: // prod_part ::= CODE_STRING 
		{
			Object RESULT = null;
			int code_strleft = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left;
			int code_strright = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right;
			String code_str = (String) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).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,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 70: // prod_part ::= symbol_id opt_label 
		{
			Object RESULT = null;
			int symidleft = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).left;
			int symidright = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).right;
			String symid = (String) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).value;
			int labidleft = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left;
			int labidright = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right;
			String labid = (String) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).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,
							((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

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

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

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

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

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 67: // 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, ((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 66: // rhs ::= prod_part_list PERCENT_PREC term_id 
		{
			Object RESULT = null;
			int term_nameleft = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left;
			int term_nameright = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right;
			String term_name = (String) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).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,
							((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

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

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

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

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

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 63: // production ::= error NT$12 SEMI 
		{
			Object RESULT = null;
			// propagate RESULT from NT$12
			RESULT = (Object) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).value;

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

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 62: // NT$12 ::= 
		{
			Object RESULT = null;
			ErrorManager.getManager().emit_error("Syntax Error");
			CUP$parser$result =
					parser.getSymbolFactory().newSymbol("NT$12", 58,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

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

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

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 60: // NT$11 ::= 
		{
			Object RESULT = null;
			int lhs_idleft = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left;
			int lhs_idright = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right;
			String lhs_id = (String) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).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$11", 57,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

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

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

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

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

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

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

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

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

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 55: // NT$10 ::= 
		{
			Object RESULT = null;
			int start_nameleft = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left;
			int start_nameright = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right;
			String start_name = (String) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).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$10", 56,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 54: // term_id ::= symbol_id 
		{
			String RESULT = null;
			int symleft = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left;
			int symright = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right;
			String sym = (String) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).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,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 53: // terminal_id ::= term_id 
		{
			String RESULT = null;
			int symleft = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).left;
			int symright = ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).right;
			String sym = (String) ((java_cup.runtime.Symbol) CUP$parser$stack.peek()).value;

			add_precedence(sym);
			RESULT = sym;

			CUP$parser$result =
					parser.getSymbolFactory().newSymbol("terminal_id", 40,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

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

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

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

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

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

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

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

			update_precedence(assoc.nonassoc);

			CUP$parser$result =
					parser.getSymbolFactory().newSymbol("NT$9", 55,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

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

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

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

			update_precedence(assoc.right);

			CUP$parser$result =
					parser.getSymbolFactory().newSymbol("NT$8", 54,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 46: // preced ::= PRECEDENCE LEFT NT$7 terminal_list SEMI 
		{
			Object RESULT = null;
			// propagate RESULT from NT$7
			RESULT = (Object) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)).value;

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

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

			update_precedence(assoc.left);

			CUP$parser$result =
					parser.getSymbolFactory().newSymbol("NT$7", 53,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

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

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

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

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

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

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

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

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

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

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

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 39: // 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,
							((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

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

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

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

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

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 36: // declares_non_term ::= non_term_name_list NT$6 SEMI 
		{
			Object RESULT = null;
			// propagate RESULT from NT$6
			RESULT = (Object) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).value;

			CUP$parser$result =
					parser.getSymbolFactory().newSymbol("declares_non_term", 34,
							((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)),
							((java_cup.runtime.Symbol) 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,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 34: // declares_term ::= term_name_list NT$5 SEMI 
		{
			Object RESULT = null;
			// propagate RESULT from NT$5
			RESULT = (Object) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).value;

			CUP$parser$result =
					parser.getSymbolFactory().newSymbol("declares_term", 33,
							((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)),
							((java_cup.runtime.Symbol) 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,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

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

			CUP$parser$result =
					parser.getSymbolFactory().newSymbol("symbol", 17,
							((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 3)),
							((java_cup.runtime.Symbol) 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,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 30: // symbol ::= TERMINAL error NT$3 SEMI 
		{
			Object RESULT = null;
			// propagate RESULT from NT$3
			RESULT = (Object) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).value;

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

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

			/* reset the accumulated multipart name */
			multipart_name = new String();

			CUP$parser$result =
					parser.getSymbolFactory().newSymbol("NT$3", 49,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

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

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

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

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

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

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

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

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

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

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

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

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

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 22: // scan_code ::= SCAN WITH CODE_STRING opt_semi 
		{
			Object RESULT = null;
			int user_codeleft = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).left;
			int user_coderight = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).right;
			String user_code =
					(String) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).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,
							((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 3)),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 21: // init_code ::= INIT WITH CODE_STRING opt_semi 
		{
			Object RESULT = null;
			int user_codeleft = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).left;
			int user_coderight = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).right;
			String user_code =
					(String) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).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,
							((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 3)),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 20: // parser_code_part ::= PARSER CODE CODE_STRING opt_semi 
		{
			Object RESULT = null;
			int user_codeleft = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).left;
			int user_coderight = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).right;
			String user_code =
					(String) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).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,
							((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 3)),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 19: // action_code_part ::= ACTION CODE CODE_STRING opt_semi 
		{
			Object RESULT = null;
			int user_codeleft = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).left;
			int user_coderight = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).right;
			String user_code =
					(String) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).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,
							((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 3)),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

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

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

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

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

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

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

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

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

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

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

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

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

			/*. . . . . . . . . . . . . . . . . . . .*/
		case 12: // class_name ::= CLASS ID SEMI 
		{
			Object RESULT = null;
			int idleft = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).left;
			int idright = ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).right;
			String id = (String) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).value;

			emit.parser_class_name = id;
			emit.symbol_const_class_name = id + "Sym";

			CUP$parser$result =
					parser.getSymbolFactory().newSymbol("class_name", 35,
							((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 2)),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

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

			CUP$parser$result =
					parser.getSymbolFactory().newSymbol("class_name", 35,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) 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 = (Object) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).value;

			CUP$parser$result =
					parser.getSymbolFactory().newSymbol("import_spec", 13,
							((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 3)),
							((java_cup.runtime.Symbol) 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,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) 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,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) 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,
							((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)),
							((java_cup.runtime.Symbol) 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,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) 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 = (Object) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 1)).value;

			CUP$parser$result =
					parser.getSymbolFactory().newSymbol("package_spec", 1,
							((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 3)),
							((java_cup.runtime.Symbol) 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,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) 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,
							((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 4)),
							((java_cup.runtime.Symbol) 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;

			CUP$parser$result =
					parser.getSymbolFactory().newSymbol("spec", 0,
							((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top - 8)),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			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,
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()),
							((java_cup.runtime.Symbol) CUP$parser$stack.peek()), RESULT);
		}
			return CUP$parser$result;

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

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

		}
	}
}
