
//----------------------------------------------------
// The following code was generated by CUP v0.11b beta 20140226
// Tue Jun 10 09:54:31 EDT 2014
//----------------------------------------------------

package ppg.parse;

import java.util.*;
import java_cup.runtime.Symbol;
import ppg.atoms.*;
import ppg.cmds.*;
import ppg.code.*;
import ppg.lex.*;
import ppg.spec.*;

/** CUP v0.11b beta 20140226 generated parser.
  * @version Tue Jun 10 09:54:31 EDT 2014
  */
public class Parser
 extends java_cup.runtime.lr_parser {

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

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

  /** Constructor which sets the default scanner and a SymbolFactory. */
  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\151\000\002\002\004\000\002\015\003\000\002\015" +
    "\003\000\002\016\012\000\002\021\004\000\002\063\003" +
    "\000\002\063\002\000\002\030\003\000\002\030\004\000" +
    "\002\031\006\000\002\031\003\000\002\033\004\000\002" +
    "\033\003\000\002\032\007\000\002\024\004\000\002\024" +
    "\002\000\002\035\004\000\002\035\006\000\002\035\006" +
    "\000\002\035\005\000\002\034\005\000\002\034\003\000" +
    "\002\002\003\000\002\002\003\000\002\002\002\000\002" +
    "\027\010\000\002\027\007\000\002\037\004\000\002\037" +
    "\003\000\002\036\006\000\002\040\003\000\002\041\003" +
    "\000\002\026\005\000\002\026\003\000\002\004\005\000" +
    "\002\004\003\000\002\025\004\000\002\025\002\000\002" +
    "\003\004\000\002\003\003\000\002\043\004\000\002\043" +
    "\002\000\002\042\003\000\002\046\003\000\002\013\004" +
    "\000\002\013\003\000\002\005\003\000\002\005\002\000" +
    "\002\017\011\000\002\047\005\000\002\047\002\000\002" +
    "\060\004\000\002\060\002\000\002\051\005\000\002\064" +
    "\004\000\002\064\002\000\002\007\003\000\002\007\003" +
    "\000\002\007\003\000\002\007\003\000\002\006\006\000" +
    "\002\010\006\000\002\010\007\000\002\022\002\000\002" +
    "\022\005\000\002\022\005\000\002\011\006\000\002\012" +
    "\006\000\002\062\004\000\002\062\003\000\002\072\005" +
    "\000\002\072\004\000\002\072\005\000\002\072\004\000" +
    "\002\070\004\000\002\071\004\000\002\061\005\000\002" +
    "\061\003\000\002\057\005\000\002\057\003\000\002\067" +
    "\003\000\002\067\002\000\002\066\004\000\002\066\003" +
    "\000\002\014\006\000\002\014\006\000\002\014\006\000" +
    "\002\065\005\000\002\065\003\000\002\044\003\000\002" +
    "\045\003\000\002\053\006\000\002\053\002\000\002\052" +
    "\005\000\002\052\003\000\002\050\005\000\002\050\003" +
    "\000\002\054\003\000\002\054\005\000\002\054\006\000" +
    "\002\054\010\000\002\056\003\000\002\055\003\000\002" +
    "\020\003\000\002\023\003" });

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

  /** Parse-action table. */
  protected static final short[][] _action_table = 
    unpackFromStrings(new String[] {
    "\000\300\000\026\004\010\021\uffcf\022\uffcf\032\004\033" +
    "\uffcf\035\uffcf\036\uffcf\037\uffcf\040\uffcf\041\uffcf\001\002" +
    "\000\004\052\064\001\002\000\004\002\300\001\002\000" +
    "\022\021\uffcd\022\uffcd\033\uffcd\035\uffcd\036\uffcd\037\uffcd" +
    "\040\uffcd\041\uffcd\001\002\000\004\002\000\001\002\000" +
    "\004\051\263\001\002\000\030\021\uffcf\022\uffcf\032\004" +
    "\033\uffcf\035\uffcf\036\uffcf\037\uffcf\040\uffcf\041\uffcf\043" +
    "\uffcf\045\uffcf\001\002\000\004\002\uffff\001\002\000\026" +
    "\021\uffcd\022\uffcd\033\uffcd\035\uffcd\036\uffcd\037\uffcd\040" +
    "\uffcd\041\uffcd\043\uffcd\045\uffcd\001\002\000\026\021\uffca" +
    "\022\uffca\033\015\035\uffca\036\uffca\037\uffca\040\uffca\041" +
    "\uffca\043\uffca\045\uffca\001\002\000\004\052\064\001\002" +
    "\000\026\021\uffce\022\uffce\033\uffce\035\uffce\036\uffce\037" +
    "\uffce\040\uffce\041\uffce\043\uffce\045\uffce\001\002\000\024" +
    "\021\024\022\020\035\035\036\032\037\023\040\031\041" +
    "\027\043\ufffb\045\ufffb\001\002\000\004\052\uffd4\001\002" +
    "\000\016\021\uffbc\022\uffbc\037\uffbc\043\uffbc\045\uffbc\052" +
    "\uffbc\001\002\000\024\021\uffc8\022\uffc8\035\uffc8\036\uffc8" +
    "\037\uffc8\040\uffc8\041\uffc8\043\uffc8\045\uffc8\001\002\000" +
    "\004\021\255\001\002\000\004\052\064\001\002\000\024" +
    "\021\uffc6\022\uffc6\035\uffc6\036\uffc6\037\uffc6\040\uffc6\041" +
    "\uffc6\043\uffc6\045\uffc6\001\002\000\024\021\uffc9\022\uffc9" +
    "\035\uffc9\036\uffc9\037\uffc9\040\uffc9\041\uffc9\043\uffc9\045" +
    "\uffc9\001\002\000\004\042\240\001\002\000\024\021\uffc7" +
    "\022\uffc7\035\uffc7\036\uffc7\037\uffc7\040\uffc7\041\uffc7\043" +
    "\uffc7\045\uffc7\001\002\000\004\042\235\001\002\000\006" +
    "\034\223\052\064\001\002\000\004\052\064\001\002\000" +
    "\006\043\uffb0\045\047\001\002\000\004\034\041\001\002" +
    "\000\014\021\024\022\020\037\023\043\ufffc\045\ufffc\001" +
    "\002\000\024\021\uffcb\022\uffcb\035\uffcb\036\uffcb\037\uffcb" +
    "\040\uffcb\041\uffcb\043\uffcb\045\uffcb\001\002\000\016\021" +
    "\uffbd\022\uffbd\037\uffbd\043\uffbd\045\uffbd\052\uffbd\001\002" +
    "\000\004\053\043\001\002\000\026\015\045\021\uffd2\022" +
    "\uffd2\035\uffd2\036\uffd2\037\uffd2\040\uffd2\041\uffd2\043\uffd2" +
    "\045\uffd2\001\002\000\040\011\uff99\015\uff99\020\uff99\021" +
    "\uff99\022\uff99\023\uff99\035\uff99\036\uff99\037\uff99\040\uff99" +
    "\041\uff99\043\uff99\045\uff99\052\uff99\053\uff99\001\002\000" +
    "\024\021\uffc5\022\uffc5\035\uffc5\036\uffc5\037\uffc5\040\uffc5" +
    "\041\uffc5\043\uffc5\045\uffc5\001\002\000\024\021\uffd3\022" +
    "\uffd3\035\uffd3\036\uffd3\037\uffd3\040\uffd3\041\uffd3\043\uffd3" +
    "\045\uffd3\001\002\000\010\043\uffae\045\uffae\052\uffae\001" +
    "\002\000\012\015\172\046\057\047\055\050\056\001\002" +
    "\000\004\043\ufffa\001\002\000\004\043\076\001\002\000" +
    "\010\043\uffb1\045\054\052\uffb1\001\002\000\010\043\uffaf" +
    "\045\uffaf\052\uffaf\001\002\000\010\046\057\047\055\050" +
    "\056\001\002\000\004\052\064\001\002\000\004\052\064" +
    "\001\002\000\004\052\064\001\002\000\022\011\uffe2\014" +
    "\uffe2\015\uffe2\016\uffe2\020\uffe2\023\uffe2\052\uffe2\053\uffe2" +
    "\001\002\000\006\014\uffa9\015\uffa9\001\002\000\006\014" +
    "\uffa8\015\uffa8\001\002\000\006\014\066\015\067\001\002" +
    "\000\044\005\uff9a\010\uff9a\011\uff9a\012\uff9a\013\uff9a\014" +
    "\uff9a\015\uff9a\016\uff9a\017\uff9a\020\uff9a\023\uff9a\024\uff9a" +
    "\025\uff9a\027\uff9a\030\uff9a\052\uff9a\053\uff9a\001\002\000" +
    "\012\011\uffa7\014\uffa7\015\uffa7\020\uffa7\001\002\000\004" +
    "\052\064\001\002\000\010\043\uffad\045\uffad\052\uffad\001" +
    "\002\000\006\014\uffaa\015\uffaa\001\002\000\006\014\066" +
    "\015\072\001\002\000\010\043\uffab\045\uffab\052\uffab\001" +
    "\002\000\006\014\066\015\074\001\002\000\010\043\uffac" +
    "\045\uffac\052\uffac\001\002\000\016\002\ufff2\006\ufff2\007" +
    "\ufff2\052\ufff2\054\ufff2\055\ufff2\001\002\000\004\042\107" +
    "\001\002\000\020\002\ufff7\006\ufff7\007\ufff7\043\101\052" +
    "\ufff7\054\ufff7\055\ufff7\001\002\000\020\002\ufff5\006\ufff5" +
    "\007\ufff5\043\ufff5\052\ufff5\054\ufff5\055\ufff5\001\002\000" +
    "\004\042\103\001\002\000\020\002\ufff6\006\ufff6\007\ufff6" +
    "\043\ufff6\052\ufff6\054\ufff6\055\ufff6\001\002\000\004\052" +
    "\064\001\002\000\004\052\064\001\002\000\004\015\106" +
    "\001\002\000\020\002\ufff4\006\ufff4\007\ufff4\043\ufff4\052" +
    "\ufff4\054\ufff4\055\ufff4\001\002\000\004\052\064\001\002" +
    "\000\006\015\uffe3\052\064\001\002\000\004\015\112\001" +
    "\002\000\016\002\ufff8\006\ufff8\007\ufff8\052\ufff8\054\ufff8" +
    "\055\ufff8\001\002\000\016\002\ufffe\006\117\007\121\052" +
    "\uffe9\054\115\055\120\001\002\000\004\052\064\001\002" +
    "\000\004\052\uffeb\001\002\000\016\002\ufff3\006\ufff3\007" +
    "\ufff3\052\ufff3\054\ufff3\055\ufff3\001\002\000\004\010\155" +
    "\001\002\000\004\052\uffea\001\002\000\004\052\064\001" +
    "\002\000\016\005\uffe3\010\uffe3\011\uffe3\014\uffe3\015\uffe3" +
    "\017\uffe3\001\002\000\004\005\125\001\002\000\020\002" +
    "\uffee\005\150\006\uffee\007\uffee\052\uffee\054\uffee\055\uffee" +
    "\001\002\000\004\052\064\001\002\000\004\010\127\001" +
    "\002\000\014\011\uffdc\020\uffdc\023\uffdc\052\uffdc\053\uffdc" +
    "\001\002\000\006\011\145\020\146\001\002\000\016\011" +
    "\uffde\015\uffde\020\uffde\023\135\052\064\053\043\001\002" +
    "\000\010\011\uffe0\015\uffe0\020\uffe0\001\002\000\016\011" +
    "\uffdd\015\uffdd\020\uffdd\023\uffdd\052\uffdd\053\uffdd\001\002" +
    "\000\016\011\uffda\015\uffda\020\uffda\023\uffda\052\uffda\053" +
    "\uffda\001\002\000\004\052\064\001\002\000\020\011\uffd8" +
    "\015\uffd8\016\137\020\uffd8\023\uffd8\052\uffd8\053\uffd8\001" +
    "\002\000\004\052\064\001\002\000\016\011\uffdb\015\uffdb" +
    "\020\uffdb\023\uffdb\052\uffdb\053\uffdb\001\002\000\032\011" +
    "\uffd6\012\uffd6\013\uffd6\015\uffd6\020\uffd6\023\uffd6\024\uffd6" +
    "\025\uffd6\027\uffd6\030\uffd6\052\uffd6\053\uffd6\001\002\000" +
    "\016\011\uffd7\015\uffd7\020\uffd7\023\uffd7\052\uffd7\053\uffd7" +
    "\001\002\000\016\011\uffd9\015\uffd9\020\uffd9\023\uffd9\052" +
    "\uffd9\053\uffd9\001\002\000\010\011\uffdf\015\uffdf\020\uffdf" +
    "\001\002\000\020\002\uffe7\005\uffe7\006\uffe7\007\uffe7\052" +
    "\uffe7\054\uffe7\055\uffe7\001\002\000\016\011\uffdc\015\uffdc" +
    "\020\uffdc\023\uffdc\052\uffdc\053\uffdc\001\002\000\010\011" +
    "\uffe1\015\uffe1\020\uffe1\001\002\000\004\052\064\001\002" +
    "\000\004\010\152\001\002\000\014\011\uffdc\020\uffdc\023" +
    "\uffdc\052\uffdc\053\uffdc\001\002\000\006\011\154\020\146" +
    "\001\002\000\020\002\uffe8\005\uffe8\006\uffe8\007\uffe8\052" +
    "\uffe8\054\uffe8\055\uffe8\001\002\000\004\052\064\001\002" +
    "\000\010\011\uffec\014\uffec\017\165\001\002\000\006\011" +
    "\162\014\163\001\002\000\004\011\161\001\002\000\016" +
    "\002\ufff0\006\ufff0\007\ufff0\052\ufff0\054\ufff0\055\ufff0\001" +
    "\002\000\016\002\uffef\006\uffef\007\uffef\052\uffef\054\uffef" +
    "\055\uffef\001\002\000\004\052\064\001\002\000\006\011" +
    "\uffed\014\uffed\001\002\000\014\015\uffdc\020\uffdc\023\uffdc" +
    "\052\uffdc\053\uffdc\001\002\000\006\015\167\020\146\001" +
    "\002\000\020\002\uffe4\006\uffe4\007\uffe4\011\uffe4\052\uffe4" +
    "\054\uffe4\055\uffe4\001\002\000\004\017\165\001\002\000" +
    "\016\002\ufff1\006\ufff1\007\ufff1\052\ufff1\054\ufff1\055\ufff1" +
    "\001\002\000\004\043\ufff9\001\002\000\016\014\uff9b\015" +
    "\uff9b\024\uffd6\025\uffd6\027\uffd6\052\uffd6\001\002\000\024" +
    "\012\uffa3\013\uffa3\015\uffa3\024\uffa3\025\uffa3\027\uffa3\030" +
    "\uffa3\052\uffa3\053\uffa3\001\002\000\006\014\217\015\220" +
    "\001\002\000\014\024\207\025\uffa0\027\206\030\uffa0\052" +
    "\uffa0\001\002\000\016\021\uffb8\022\uffb8\037\uffb8\043\uffb8" +
    "\045\uffb8\052\uffb8\001\002\000\006\025\203\052\064\001" +
    "\002\000\006\014\uffb2\015\uffb2\001\002\000\006\014\uff9b" +
    "\015\uff9b\001\002\000\004\026\205\001\002\000\016\021" +
    "\uffb9\022\uffb9\037\uffb9\043\uffb9\045\uffb9\052\uffb9\001\002" +
    "\000\010\025\uff9f\030\uff9f\052\uff9f\001\002\000\006\031" +
    "\211\052\064\001\002\000\004\052\064\001\002\000\024" +
    "\012\uffa4\013\uffa4\015\uffa4\024\uffa4\025\uffa4\027\uffa4\030" +
    "\uffa4\052\uffa4\053\uffa4\001\002\000\004\012\214\001\002" +
    "\000\006\025\203\030\213\001\002\000\010\025\uff9e\030" +
    "\uff9e\052\uff9e\001\002\000\004\052\064\001\002\000\006" +
    "\025\203\030\216\001\002\000\010\025\uff9d\030\uff9d\052" +
    "\uff9d\001\002\000\004\052\064\001\002\000\016\021\uffb6" +
    "\022\uffb6\037\uffb6\043\uffb6\045\uffb6\052\uffb6\001\002\000" +
    "\006\014\uffb3\015\uffb3\001\002\000\010\012\uffc2\013\uffc2" +
    "\053\uffc2\001\002\000\004\053\043\001\002\000\026\015" +
    "\045\021\uffd2\022\uffd2\035\uffd2\036\uffd2\037\uffd2\040\uffd2" +
    "\041\uffd2\043\uffd2\045\uffd2\001\002\000\024\021\uffc4\022" +
    "\uffc4\035\uffc4\036\uffc4\037\uffc4\040\uffc4\041\uffc4\043\uffc4" +
    "\045\uffc4\001\002\000\010\012\231\013\230\053\043\001" +
    "\002\000\026\015\045\021\uffd2\022\uffd2\035\uffd2\036\uffd2" +
    "\037\uffd2\040\uffd2\041\uffd2\043\uffd2\045\uffd2\001\002\000" +
    "\004\052\064\001\002\000\004\052\064\001\002\000\012" +
    "\012\uffc1\013\uffc1\024\207\053\uffc1\001\002\000\012\012" +
    "\uffc0\013\uffc0\024\207\053\uffc0\001\002\000\024\021\uffc3" +
    "\022\uffc3\035\uffc3\036\uffc3\037\uffc3\040\uffc3\041\uffc3\043" +
    "\uffc3\045\uffc3\001\002\000\004\053\043\001\002\000\026" +
    "\015\045\021\uffd2\022\uffd2\035\uffd2\036\uffd2\037\uffd2\040" +
    "\uffd2\041\uffd2\043\uffd2\045\uffd2\001\002\000\024\021\uffbf" +
    "\022\uffbf\035\uffbf\036\uffbf\037\uffbf\040\uffbf\041\uffbf\043" +
    "\uffbf\045\uffbf\001\002\000\004\053\043\001\002\000\026" +
    "\015\045\021\uffd2\022\uffd2\035\uffd2\036\uffd2\037\uffd2\040" +
    "\uffd2\041\uffd2\043\uffd2\045\uffd2\001\002\000\024\021\uffbe" +
    "\022\uffbe\035\uffbe\036\uffbe\037\uffbe\040\uffbe\041\uffbe\043" +
    "\uffbe\045\uffbe\001\002\000\006\014\uffb4\015\uffb4\001\002" +
    "\000\016\014\uff9c\015\uff9c\024\uffd6\025\uffd6\027\uffd6\052" +
    "\uffd6\001\002\000\016\021\uffba\022\uffba\037\uffba\043\uffba" +
    "\045\uffba\052\uffba\001\002\000\006\014\252\015\253\001" +
    "\002\000\006\025\203\052\064\001\002\000\006\014\uff9c" +
    "\015\uff9c\001\002\000\016\021\uffbb\022\uffbb\037\uffbb\043" +
    "\uffbb\045\uffbb\052\uffbb\001\002\000\004\052\064\001\002" +
    "\000\016\021\uffb7\022\uffb7\037\uffb7\043\uffb7\045\uffb7\052" +
    "\uffb7\001\002\000\006\014\uffb5\015\uffb5\001\002\000\004" +
    "\052\uffd5\001\002\000\004\015\262\001\002\000\006\015" +
    "\uffa1\024\260\001\002\000\006\044\261\052\064\001\002" +
    "\000\004\015\uffa2\001\002\000\026\021\uffcc\022\uffcc\033" +
    "\uffcc\035\uffcc\036\uffcc\037\uffcc\040\uffcc\041\uffcc\043\uffcc" +
    "\045\uffcc\001\002\000\030\021\ufffd\022\ufffd\032\ufffd\033" +
    "\ufffd\035\ufffd\036\ufffd\037\ufffd\040\ufffd\041\ufffd\043\ufffd" +
    "\045\ufffd\001\002\000\022\021\uffca\022\uffca\033\015\035" +
    "\uffca\036\uffca\037\uffca\040\uffca\041\uffca\001\002\000\020" +
    "\021\024\022\020\035\035\036\032\037\023\040\031\041" +
    "\027\001\002\000\016\021\024\022\020\037\023\043\uffb0" +
    "\045\054\052\uffb0\001\002\000\006\043\271\052\uffa5\001" +
    "\002\000\004\052\064\001\002\000\004\042\272\001\002" +
    "\000\004\052\064\001\002\000\004\015\274\001\002\000" +
    "\004\052\uffa6\001\002\000\006\002\uffd1\052\064\001\002" +
    "\000\006\002\uffe5\052\uffe5\001\002\000\006\002\uffe6\052" +
    "\uffe6\001\002\000\004\002\001\001\002\000\006\015\302" +
    "\024\207\001\002\000\026\021\uffd0\022\uffd0\033\uffd0\035" +
    "\uffd0\036\uffd0\037\uffd0\040\uffd0\041\uffd0\043\uffd0\045\uffd0" +
    "\001\002" });

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

  /** {@code reduce_goto} table. */
  protected static final short[][] _reduce_table = 
    unpackFromStrings(new String[] {
    "\000\300\000\014\015\004\016\006\017\011\021\010\047" +
    "\005\001\001\000\010\020\140\046\173\052\300\001\001" +
    "\000\002\001\001\000\004\060\263\001\001\000\002\001" +
    "\001\000\002\001\001\000\004\047\012\001\001\000\002" +
    "\001\001\000\004\060\013\001\001\000\006\051\015\064" +
    "\016\001\001\000\012\020\140\046\173\050\255\052\256" +
    "\001\001\000\002\001\001\000\024\006\025\007\036\010" +
    "\021\011\027\012\024\013\032\062\035\063\033\072\020" +
    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
    "\001\000\002\001\001\000\020\020\243\046\173\052\175" +
    "\054\246\056\242\061\245\070\244\001\001\000\002\001" +
    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
    "\000\002\001\001\000\004\020\221\001\001\000\020\020" +
    "\172\046\173\052\175\054\177\055\200\057\174\071\176" +
    "\001\001\000\012\014\045\030\050\066\051\067\047\001" +
    "\001\000\002\001\001\000\006\013\032\072\037\001\001" +
    "\000\002\001\001\000\002\001\001\000\004\023\041\001" +
    "\001\000\004\005\043\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\031\074\032\077\033\076" +
    "\001\001\000\004\014\052\001\001\000\002\001\001\000" +
    "\002\001\001\000\014\020\057\041\064\044\060\045\061" +
    "\065\072\001\001\000\014\020\057\041\064\044\060\045" +
    "\061\065\070\001\001\000\014\020\057\041\064\044\060" +
    "\045\061\065\062\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\012\020\057\041\064\044\067\045" +
    "\061\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\024\112\001\001\000\002\001\001\000\004" +
    "\032\101\001\001\000\002\001\001\000\002\001\001\000" +
    "\002\001\001\000\004\020\103\001\001\000\004\020\104" +
    "\001\001\000\002\001\001\000\002\001\001\000\006\020" +
    "\107\040\110\001\001\000\004\020\104\001\001\000\002" +
    "\001\001\000\002\001\001\000\006\002\113\035\115\001" +
    "\001\000\010\020\121\036\170\040\167\001\001\000\002" +
    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
    "\001\000\006\020\121\040\122\001\001\000\002\001\001" +
    "\000\004\027\123\001\001\000\002\001\001\000\006\020" +
    "\121\040\125\001\001\000\002\001\001\000\010\004\131" +
    "\025\130\026\127\001\001\000\002\001\001\000\012\003" +
    "\132\020\057\023\133\041\135\001\001\000\002\001\001" +
    "\000\002\001\001\000\002\001\001\000\010\020\057\041" +
    "\064\045\143\001\001\000\004\043\137\001\001\000\010" +
    "\020\140\042\142\046\141\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\004\146\025\130\001" +
    "\001\000\002\001\001\000\006\020\121\040\150\001\001" +
    "\000\002\001\001\000\010\004\131\025\130\026\152\001" +
    "\001\000\002\001\001\000\002\001\001\000\012\020\121" +
    "\034\156\036\157\040\155\001\001\000\002\001\001\000" +
    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
    "\001\001\000\006\020\121\040\163\001\001\000\002\001" +
    "\001\000\010\004\131\025\130\026\165\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" +
    "\012\020\201\055\200\057\174\071\203\001\001\000\002" +
    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
    "\001\000\002\001\001\000\012\020\140\046\173\052\175" +
    "\054\211\001\001\000\006\020\140\046\207\001\001\000" +
    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
    "\001\001\000\012\020\140\046\173\052\175\054\214\001" +
    "\001\000\002\001\001\000\002\001\001\000\006\020\201" +
    "\055\220\001\001\000\002\001\001\000\002\001\001\000" +
    "\004\022\225\001\001\000\004\023\223\001\001\000\004" +
    "\005\224\001\001\000\002\001\001\000\004\023\226\001" +
    "\001\000\004\005\233\001\001\000\010\020\140\046\173" +
    "\052\232\001\001\000\010\020\140\046\173\052\231\001" +
    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
    "\000\004\023\235\001\001\000\004\005\236\001\001\000" +
    "\002\001\001\000\004\023\240\001\001\000\004\005\241" +
    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
    "\001\000\002\001\001\000\002\001\001\000\012\020\247" +
    "\056\242\061\245\070\250\001\001\000\002\001\001\000" +
    "\002\001\001\000\006\020\247\056\253\001\001\000\002" +
    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
    "\001\000\002\001\001\000\006\020\140\046\207\001\001" +
    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
    "\006\051\015\064\264\001\001\000\022\006\025\007\036" +
    "\010\021\011\027\012\024\013\032\062\265\072\020\001" +
    "\001\000\014\013\032\014\045\066\051\067\266\072\037" +
    "\001\001\000\004\053\267\001\001\000\012\020\121\036" +
    "\275\037\274\040\167\001\001\000\002\001\001\000\006" +
    "\020\121\040\272\001\001\000\002\001\001\000\002\001" +
    "\001\000\010\020\121\036\276\040\167\001\001\000\002" +
    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
    "\001\000\002\001\001" });

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

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

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

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

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

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

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


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

    }

 
    private Lexer lexer;           
    private static String filename; 
    
    public static String getFilename() { return filename; } 

    public Parser (String fname, Lexer lex) { 
        this(); 
        filename = fname; 
        lexer = lex;
    } 

    @Override
    public void syntax_error(Symbol cur_token)
    {
	Token tok = (Token) cur_token.value;
	report_error (tok.getFilename () + ":" +
		    tok.getLineno () + ": syntax error: \"" +
                    tok.getValue () + "\" (" +
		    tok.getID () + ")", null);
	System.exit (1);
    }

    @Override
    public void report_fatal_error(String message, Object info) { 
        // stop parsing 
        done_parsing(); 

        // use the normal error message reporting to put out the message 
        report_error(message, info); 
        System.exit(1);
    } 

    private static Object program; 
    public static Object getProgramNode() { return program; } 
    public static void setProgramNode(Object n) { program = n; } 

}

/** Cup generated class to encapsulate user supplied action code.*/
class CUP$Parser$actions {
    private final Parser parser;

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

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

        /* select the action based on the action number */
        switch (CUP$Parser$act_num) {
        /*. . . . . . . . . . . . . . . . . . . .*/
        case 0: // $START ::= spec EOF 
            {
                Object RESULT = null;
                Spec start_val = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<Spec> value();
                RESULT = start_val;
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("$START",0, RESULT);
            }
            /* ACCEPT */
            CUP$Parser$parser.done_parsing();
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 1: // spec ::= ppg_spec 
            {
                Spec RESULT = null;
                Spec s = CUP$Parser$stack.peek().<Spec> value();
                
		Parser.setProgramNode(s);
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("spec",11, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 2: // spec ::= cup_spec 
            {
                Spec RESULT = null;
                Spec s = CUP$Parser$stack.peek().<Spec> value();
                
		Parser.setProgramNode(s);
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("spec",11, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 3: // ppg_spec ::= include_spec package_spec import_list code_parts symbol_list_opt ppg_precedence_list ppg_start_spec command_list_opt 
            {
                Spec RESULT = null;
                String inc = CUP$Parser$stack.elementAt(CUP$Parser$top-7).<String> value();
                String pkg = CUP$Parser$stack.elementAt(CUP$Parser$top-6).<String> value();
                Vector<String> imp = CUP$Parser$stack.elementAt(CUP$Parser$top-5).<Vector<String>> value();
                Vector<Code> code = CUP$Parser$stack.elementAt(CUP$Parser$top-4).<Vector<Code>> value();
                Vector<SymbolList> sym_list = CUP$Parser$stack.elementAt(CUP$Parser$top-3).<Vector<SymbolList>> value();
                Vector<Precedence> prec_list = CUP$Parser$stack.elementAt(CUP$Parser$top-2).<Vector<Precedence>> value();
                Vector<String> start = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<Vector<String>> value();
                Vector<Command> cmd_list = CUP$Parser$stack.peek().<Vector<Command>> value();
                
		RESULT = new PPGSpec(inc, pkg, imp, code, sym_list,
								prec_list, start, cmd_list);
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("ppg_spec",12, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 4: // include_spec ::= INCLUDE STRING_CONST 
            {
                String RESULT = null;
                Token a = CUP$Parser$stack.peek().<Token> value();
                
		RESULT = (String)a.getValue();
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("include_spec",15, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 5: // symbol_list_opt ::= symbol_list 
            {
                Vector<SymbolList> RESULT = null;
                Vector<SymbolList> sym_list = CUP$Parser$stack.peek().<Vector<SymbolList>> value();
                 RESULT = sym_list; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("symbol_list_opt",49, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 6: // symbol_list_opt ::= 
            {
                Vector<SymbolList> RESULT = null;
                 RESULT = null; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("symbol_list_opt",49, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 7: // ppg_precedence_list ::= precedence_list 
            {
                Vector<Precedence> RESULT = null;
                Vector<Precedence> p_l = CUP$Parser$stack.peek().<Vector<Precedence>> value();
                 RESULT = p_l; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("ppg_precedence_list",22, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 8: // ppg_precedence_list ::= PRECEDENCE SEMI 
            {
                Vector<Precedence> RESULT = null;
                 RESULT = null; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("ppg_precedence_list",22, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 9: // ppg_start_spec ::= START WITH nt_id SEMI 
            {
                Vector<String> RESULT = null;
                String start = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<String> value();
                 
		Vector<String> v = new Vector<>();
		v.addElement(start);
		RESULT = v;
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("ppg_start_spec",23, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 10: // ppg_start_spec ::= ppg_start_spec_list 
            {
                Vector<String> RESULT = null;
                Vector<String> m = CUP$Parser$stack.peek().<Vector<String>> value();
                 RESULT = m; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("ppg_start_spec",23, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 11: // ppg_start_spec_list ::= ppg_start_spec_list ppg_start_spec_elt 
            {
                Vector<String> RESULT = null;
                Vector<String> list = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<Vector<String>> value();
                Vector<String> elt = CUP$Parser$stack.peek().<Vector<String>> value();
                 
		list.addAll(elt);
		RESULT = list;
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("ppg_start_spec_list",25, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 12: // ppg_start_spec_list ::= ppg_start_spec_elt 
            {
                Vector<String> RESULT = null;
                Vector<String> elt = CUP$Parser$stack.peek().<Vector<String>> value();
                 RESULT = elt; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("ppg_start_spec_list",25, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 13: // ppg_start_spec_elt ::= START WITH id id SEMI 
            {
                Vector<String> RESULT = null;
                String start = CUP$Parser$stack.elementAt(CUP$Parser$top-2).<String> value();
                String method = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<String> value();
                
		Vector<String> m = new Vector<>();
		m.addElement(start);
		m.addElement(method);
		RESULT = m;
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("ppg_start_spec_elt",24, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 14: // command_list_opt ::= command_list_opt command 
            {
                Vector<Command> RESULT = null;
                Vector<Command> b = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<Vector<Command>> value();
                Command a = CUP$Parser$stack.peek().<Command> value();
                
		/* b = Vector, a = command; */
		b.addElement(a);
		RESULT = b;
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("command_list_opt",18, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 15: // command_list_opt ::= 
            {
                Vector<Command> RESULT = null;
                 RESULT = new Vector<>(); 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("command_list_opt",18, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 16: // command ::= prod_modifier_opt production 
            {
                Command RESULT = null;
                String mod = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<String> value();
                Production p = CUP$Parser$stack.peek().<Production> value();
                
		if (mod == null) {
			/* no modifier, new command */
			RESULT = new NewProdCmd(p);
		} else if (mod.equals("extend")) {
			RESULT = new ExtendCmd(p);
		} else /* if (mod.equals("override")) */ {
			RESULT = new OverrideCmd(p);
		} 
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("command",27, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 17: // command ::= DROP LBRACE production RBRACE 
            {
                Command RESULT = null;
                Production p = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<Production> value();
                 RESULT = new DropCmd(p); 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("command",27, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 18: // command ::= DROP LBRACE nt_id_list RBRACE 
            {
                Command RESULT = null;
                Vector<String> nt_list = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<Vector<String>> value();
                 
		RESULT = new DropCmd(nt_list);
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("command",27, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 19: // command ::= TRANSFER nt_id transfer_list 
            {
                Command RESULT = null;
                String nt = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<String> value();
                Vector<Production> tlist = CUP$Parser$stack.peek().<Vector<Production>> value();
                
		RESULT = new TransferCmd(nt, tlist);
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("command",27, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 20: // nt_id_list ::= nt_id_list COMMA nt_id 
            {
                Vector<String> RESULT = null;
                Vector<String> list = CUP$Parser$stack.elementAt(CUP$Parser$top-2).<Vector<String>> value();
                String id = CUP$Parser$stack.peek().<String> value();
                
		list.addElement(id);
		RESULT = list;
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("nt_id_list",26, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 21: // nt_id_list ::= nt_id 
            {
                Vector<String> RESULT = null;
                String id = CUP$Parser$stack.peek().<String> value();
                
		Vector<String> list = new Vector<>();
		list.addElement(id);
		RESULT = list;
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("nt_id_list",26, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 22: // prod_modifier_opt ::= EXTEND 
            {
                String RESULT = null;
                Token a = CUP$Parser$stack.peek().<Token> value();
                 RESULT = (String)a.getValue(); 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("prod_modifier_opt",0, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 23: // prod_modifier_opt ::= OVERRIDE 
            {
                String RESULT = null;
                Token a = CUP$Parser$stack.peek().<Token> value();
                 RESULT = (String)a.getValue(); 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("prod_modifier_opt",0, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 24: // prod_modifier_opt ::= 
            {
                String RESULT = null;
                 RESULT = null; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("prod_modifier_opt",0, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 25: // transfer_list ::= transfer_list TO nt_id LBRACE rhs_list RBRACE 
            {
                Vector<Production> RESULT = null;
                Vector<Production> tl = CUP$Parser$stack.elementAt(CUP$Parser$top-5).<Vector<Production>> value();
                String nt = CUP$Parser$stack.elementAt(CUP$Parser$top-3).<String> value();
                Vector<Vector<GrammarPart>> rhs = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<Vector<Vector<GrammarPart>>> value();
                
		Production p = new Production(new Nonterminal(nt), rhs);
		tl.addElement(p);
		RESULT = tl;
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("transfer_list",21, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 26: // transfer_list ::= TO nt_id LBRACE rhs_list RBRACE 
            {
                Vector<Production> RESULT = null;
                String nt = CUP$Parser$stack.elementAt(CUP$Parser$top-3).<String> value();
                Vector<Vector<GrammarPart>> rhs = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<Vector<Vector<GrammarPart>>> value();
                
		Vector<Production> v = new Vector<>();
		Production p = new Production(new Nonterminal(nt), rhs);
		v.addElement(p);
		RESULT = v;
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("transfer_list",21, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 27: // production_list ::= production_list production 
            {
                Vector<Production> RESULT = null;
                Vector<Production> p_list = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<Vector<Production>> value();
                Production p = CUP$Parser$stack.peek().<Production> value();
                
		p_list.addElement(p);
		RESULT = p_list;
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("production_list",29, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 28: // production_list ::= production 
            {
                Vector<Production> RESULT = null;
                Production p = CUP$Parser$stack.peek().<Production> value();
                
		Vector<Production> p_list = new Vector<>();
		p_list.addElement(p);
		RESULT = p_list;
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("production_list",29, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 29: // production ::= nt_id COLON_COLON_EQUALS rhs_list SEMI 
            {
                Production RESULT = null;
                String lhs_id = CUP$Parser$stack.elementAt(CUP$Parser$top-3).<String> value();
                Vector<Vector<GrammarPart>> rhs = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<Vector<Vector<GrammarPart>>> value();
                 
		RESULT = new Production(new Nonterminal(lhs_id), rhs);
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("production",28, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 30: // nt_id ::= id 
            {
                String RESULT = null;
                String id = CUP$Parser$stack.peek().<String> value();
                 RESULT = id; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("nt_id",30, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 31: // symbol_id ::= id 
            {
                String RESULT = null;
                String id = CUP$Parser$stack.peek().<String> value();
                 RESULT = id; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("symbol_id",31, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 32: // rhs_list ::= rhs_list BAR rhs 
            {
                Vector<Vector<GrammarPart>> RESULT = null;
                Vector<Vector<GrammarPart>> r_list = CUP$Parser$stack.elementAt(CUP$Parser$top-2).<Vector<Vector<GrammarPart>>> value();
                Vector<GrammarPart> r = CUP$Parser$stack.peek().<Vector<GrammarPart>> value();
                
		r_list.addElement(r);
		RESULT = r_list;
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("rhs_list",20, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 33: // rhs_list ::= rhs 
            {
                Vector<Vector<GrammarPart>> RESULT = null;
                Vector<GrammarPart> r = CUP$Parser$stack.peek().<Vector<GrammarPart>> value();
                
		Vector<Vector<GrammarPart>> r_list = new Vector<>();
		r_list.addElement(r);
		RESULT = r_list;
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("rhs_list",20, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 34: // rhs ::= prod_part_list PERCENT_PREC term_id 
            {
                Vector<GrammarPart> RESULT = null;
                Vector<GrammarPart> p = CUP$Parser$stack.elementAt(CUP$Parser$top-2).<Vector<GrammarPart>> value();
                String term_name = CUP$Parser$stack.peek().<String> value();
                 p.add(new PrecedenceModifier(term_name));
	       RESULT = p; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("rhs",2, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 35: // rhs ::= prod_part_list 
            {
                Vector<GrammarPart> RESULT = null;
                Vector<GrammarPart> p = CUP$Parser$stack.peek().<Vector<GrammarPart>> value();
                 RESULT = p; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("rhs",2, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 36: // prod_part_list ::= prod_part_list prod_part 
            {
                Vector<GrammarPart> RESULT = null;
                Vector<GrammarPart> a = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<Vector<GrammarPart>> value();
                GrammarPart b = CUP$Parser$stack.peek().<GrammarPart> value();
                 
		/* Vector a, (non)terminal/code b */
		a.addElement(b); RESULT = a;
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("prod_part_list",19, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 37: // prod_part_list ::= 
            {
                Vector<GrammarPart> RESULT = null;
                 RESULT = new Vector<>(); 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("prod_part_list",19, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 38: // prod_part ::= symbol_id opt_label 
            {
                GrammarPart RESULT = null;
                String symid = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<String> value();
                String labid = CUP$Parser$stack.peek().<String> value();
                
		RESULT = new Nonterminal(symid, labid);
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("prod_part",1, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 39: // prod_part ::= code_str 
            {
                GrammarPart RESULT = null;
                String code_str = CUP$Parser$stack.peek().<String> value();
                
		RESULT = new SemanticAction(code_str);
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("prod_part",1, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 40: // opt_label ::= COLON label_id 
            {
                String RESULT = null;
                String labid = CUP$Parser$stack.peek().<String> value();
                 RESULT = labid; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("opt_label",33, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 41: // opt_label ::= 
            {
                String RESULT = null;
                 RESULT = null; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("opt_label",33, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 42: // label_id ::= robust_id 
            {
                String RESULT = null;
                String the_id = CUP$Parser$stack.peek().<String> value();
                 RESULT = the_id; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("label_id",32, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 43: // robust_id ::= id 
            {
                String RESULT = null;
                String id = CUP$Parser$stack.peek().<String> value();
                 RESULT = id; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("robust_id",36, RESULT);
            }
            return CUP$Parser$result;

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

                CUP$Parser$result = parser.getSymbolFactory().newSymbol("non_terminal",9, RESULT);
            }
            return CUP$Parser$result;

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

                CUP$Parser$result = parser.getSymbolFactory().newSymbol("non_terminal",9, RESULT);
            }
            return CUP$Parser$result;

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

                CUP$Parser$result = parser.getSymbolFactory().newSymbol("opt_semi",3, RESULT);
            }
            return CUP$Parser$result;

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

                CUP$Parser$result = parser.getSymbolFactory().newSymbol("opt_semi",3, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 48: // cup_spec ::= package_spec import_list code_parts symbol_list precedence_list start_spec production_list 
            {
                Spec RESULT = null;
                String pkg = CUP$Parser$stack.elementAt(CUP$Parser$top-6).<String> value();
                Vector<String> imp = CUP$Parser$stack.elementAt(CUP$Parser$top-5).<Vector<String>> value();
                Vector<Code> code = CUP$Parser$stack.elementAt(CUP$Parser$top-4).<Vector<Code>> value();
                Vector<SymbolList> sym_list = CUP$Parser$stack.elementAt(CUP$Parser$top-3).<Vector<SymbolList>> value();
                Vector<Precedence> prec_list = CUP$Parser$stack.elementAt(CUP$Parser$top-2).<Vector<Precedence>> value();
                String start = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<String> value();
                Vector<Production> prod_list = CUP$Parser$stack.peek().<Vector<Production>> value();
                
		RESULT = new CUPSpec(pkg, imp, code, sym_list, prec_list, start, prod_list);
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("cup_spec",13, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 49: // package_spec ::= PACKAGE multipart_id SEMI 
            {
                String RESULT = null;
                String m_id = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<String> value();
                 RESULT = m_id; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("package_spec",37, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 50: // package_spec ::= 
            {
                String RESULT = null;
                 RESULT = null; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("package_spec",37, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 51: // import_list ::= import_list import_spec 
            {
                Vector<String> RESULT = null;
                Vector<String> i_list = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<Vector<String>> value();
                String i = CUP$Parser$stack.peek().<String> value();
                
		i_list.addElement(i);
		RESULT = i_list;
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("import_list",46, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 52: // import_list ::= 
            {
                Vector<String> RESULT = null;
                 RESULT = new Vector<>(); 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("import_list",46, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 53: // import_spec ::= IMPORT import_id SEMI 
            {
                String RESULT = null;
                String i = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<String> value();
                 RESULT = i; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("import_spec",39, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 54: // code_parts ::= code_parts code_part 
            {
                Vector<Code> RESULT = null;
                Vector<Code> c_parts = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<Vector<Code>> value();
                Code c = CUP$Parser$stack.peek().<Code> value();
                
		c_parts.addElement(c);
		RESULT = c_parts;
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("code_parts",50, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 55: // code_parts ::= 
            {
                Vector<Code> RESULT = null;
                 RESULT = new Vector<>(); 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("code_parts",50, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 56: // code_part ::= action_code_part 
            {
                Code RESULT = null;
                Code a = CUP$Parser$stack.peek().<Code> value();
                 RESULT = a; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("code_part",5, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 57: // code_part ::= parser_code_part 
            {
                Code RESULT = null;
                Code p = CUP$Parser$stack.peek().<Code> value();
                 RESULT = p; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("code_part",5, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 58: // code_part ::= init_code 
            {
                Code RESULT = null;
                Code i = CUP$Parser$stack.peek().<Code> value();
                 RESULT = i; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("code_part",5, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 59: // code_part ::= scan_code 
            {
                Code RESULT = null;
                Code s = CUP$Parser$stack.peek().<Code> value();
                 RESULT = s; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("code_part",5, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 60: // action_code_part ::= ACTION CODE code_str opt_semi 
            {
                Code RESULT = null;
                String user_code = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<String> value();
                 RESULT = new ActionCode(user_code); 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("action_code_part",4, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 61: // parser_code_part ::= PARSER CODE code_str opt_semi 
            {
                Code RESULT = null;
                String user_code = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<String> value();
                
	  RESULT = new ParserCode(null, "", user_code);
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("parser_code_part",6, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 62: // parser_code_part ::= PARSER id extendsimpls code_str opt_semi 
            {
                Code RESULT = null;
                String classname = CUP$Parser$stack.elementAt(CUP$Parser$top-3).<String> value();
                String ei = CUP$Parser$stack.elementAt(CUP$Parser$top-2).<String> value();
                String user_code = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<String> value();
                
	  RESULT = new ParserCode(classname, ei, user_code);
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("parser_code_part",6, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 63: // extendsimpls ::= 
            {
                String RESULT = null;
                 RESULT = ""; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("extendsimpls",16, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 64: // extendsimpls ::= extendsimpls EXTENDS multipart_id 
            {
                String RESULT = null;
                String e = CUP$Parser$stack.elementAt(CUP$Parser$top-2).<String> value();
                String qid = CUP$Parser$stack.peek().<String> value();
                 RESULT = e + " extends " + qid; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("extendsimpls",16, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 65: // extendsimpls ::= extendsimpls IMPLEMENTS multipart_id 
            {
                String RESULT = null;
                String e = CUP$Parser$stack.elementAt(CUP$Parser$top-2).<String> value();
                String qid = CUP$Parser$stack.peek().<String> value();
                 RESULT = e + " implements " + qid; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("extendsimpls",16, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 66: // init_code ::= INIT WITH code_str opt_semi 
            {
                Code RESULT = null;
                String user_code = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<String> value();
                 RESULT = new InitCode(user_code); 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("init_code",7, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 67: // scan_code ::= SCAN WITH code_str opt_semi 
            {
                Code RESULT = null;
                String user_code = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<String> value();
                 RESULT = new ScanCode(user_code); 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("scan_code",8, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 68: // symbol_list ::= symbol_list symbol 
            {
                Vector<SymbolList> RESULT = null;
                Vector<SymbolList> s_list = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<Vector<SymbolList>> value();
                SymbolList s = CUP$Parser$stack.peek().<SymbolList> value();
                
		s_list.addElement(s);
		RESULT = s_list;
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("symbol_list",48, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 69: // symbol_list ::= symbol 
            {
                Vector<SymbolList> RESULT = null;
                SymbolList s = CUP$Parser$stack.peek().<SymbolList> value();
                 
		Vector<SymbolList> s_list = new Vector<>();
		s_list.addElement(s);
		RESULT = s_list;
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("symbol_list",48, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 70: // symbol ::= TERMINAL type_id declares_term 
            {
                SymbolList RESULT = null;
                String type = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<String> value();
                Vector<String> term = CUP$Parser$stack.peek().<Vector<String>> value();
                
		RESULT = new SymbolList(SymbolList.TERMINAL, type, term);
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("symbol",56, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 71: // symbol ::= TERMINAL declares_term 
            {
                SymbolList RESULT = null;
                Vector<String> term = CUP$Parser$stack.peek().<Vector<String>> value();
                
		RESULT = new SymbolList(SymbolList.TERMINAL, null, term);
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("symbol",56, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 72: // symbol ::= non_terminal type_id declares_non_term 
            {
                SymbolList RESULT = null;
                String type = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<String> value();
                Vector<String> non_term = CUP$Parser$stack.peek().<Vector<String>> value();
                
		RESULT = new SymbolList(SymbolList.NONTERMINAL, type, non_term);
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("symbol",56, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 73: // symbol ::= non_terminal declares_non_term 
            {
                SymbolList RESULT = null;
                Vector<String> non_term = CUP$Parser$stack.peek().<Vector<String>> value();
                
		RESULT = new SymbolList(SymbolList.NONTERMINAL, null, non_term);
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("symbol",56, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 74: // declares_term ::= term_name_list SEMI 
            {
                Vector<String> RESULT = null;
                Vector<String> tn_list = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<Vector<String>> value();
                 RESULT = tn_list; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("declares_term",54, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 75: // declares_non_term ::= non_term_name_list SEMI 
            {
                Vector<String> RESULT = null;
                Vector<String> ntn_list = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<Vector<String>> value();
                 RESULT = ntn_list; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("declares_non_term",55, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 76: // term_name_list ::= term_name_list COMMA new_term_id 
            {
                Vector<String> RESULT = null;
                Vector<String> tn_list = CUP$Parser$stack.elementAt(CUP$Parser$top-2).<Vector<String>> value();
                String n_id = CUP$Parser$stack.peek().<String> value();
                
		tn_list.addElement(n_id);
		RESULT = tn_list;
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("term_name_list",47, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 77: // term_name_list ::= new_term_id 
            {
                Vector<String> RESULT = null;
                String n_id = CUP$Parser$stack.peek().<String> value();
                
		Vector<String> tn_list = new Vector<>();
		tn_list.addElement(n_id);
		RESULT = tn_list;
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("term_name_list",47, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 78: // non_term_name_list ::= non_term_name_list COMMA new_non_term_id 
            {
                Vector<String> RESULT = null;
                Vector<String> ntn_list = CUP$Parser$stack.elementAt(CUP$Parser$top-2).<Vector<String>> value();
                String n_id = CUP$Parser$stack.peek().<String> value();
                
		ntn_list.addElement(n_id);
		RESULT = ntn_list;
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("non_term_name_list",45, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 79: // non_term_name_list ::= new_non_term_id 
            {
                Vector<String> RESULT = null;
                String n_id = CUP$Parser$stack.peek().<String> value();
                 
		Vector<String> nnt_list = new Vector<>();
		nnt_list.addElement(n_id);
		RESULT = nnt_list; 
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("non_term_name_list",45, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 80: // precedence_list ::= precedence_l 
            {
                Vector<Precedence> RESULT = null;
                Vector<Precedence> p_l = CUP$Parser$stack.peek().<Vector<Precedence>> value();
                 RESULT = p_l; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("precedence_list",53, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 81: // precedence_list ::= 
            {
                Vector<Precedence> RESULT = null;
                 RESULT = new Vector<>(); 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("precedence_list",53, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 82: // precedence_l ::= precedence_l preced 
            {
                Vector<Precedence> RESULT = null;
                Vector<Precedence> p_l = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<Vector<Precedence>> value();
                Precedence p = CUP$Parser$stack.peek().<Precedence> value();
                
		p_l.addElement(p);
		RESULT = p_l;
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("precedence_l",52, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 83: // precedence_l ::= preced 
            {
                Vector<Precedence> RESULT = null;
                Precedence p = CUP$Parser$stack.peek().<Precedence> value();
                 
		Vector<Precedence> p_l = new Vector<>();
		p_l.addElement(p);
		RESULT = p_l;
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("precedence_l",52, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 84: // preced ::= PRECEDENCE LEFT terminal_list SEMI 
            {
                Precedence RESULT = null;
                Vector<GrammarSymbol> t_list = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<Vector<GrammarSymbol>> value();
                
		RESULT = new Precedence(Precedence.LEFT, t_list);
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("preced",10, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 85: // preced ::= PRECEDENCE RIGHT terminal_list SEMI 
            {
                Precedence RESULT = null;
                Vector<GrammarSymbol> t_list = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<Vector<GrammarSymbol>> value();
                
		RESULT = new Precedence(Precedence.RIGHT, t_list);
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("preced",10, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 86: // preced ::= PRECEDENCE NONASSOC terminal_list SEMI 
            {
                Precedence RESULT = null;
                Vector<GrammarSymbol> t_list = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<Vector<GrammarSymbol>> value();
                
		RESULT = new Precedence(Precedence.NONASSOC, t_list);
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("preced",10, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 87: // terminal_list ::= terminal_list COMMA terminal_id 
            {
                Vector<GrammarSymbol> RESULT = null;
                Vector<GrammarSymbol> t_list = CUP$Parser$stack.elementAt(CUP$Parser$top-2).<Vector<GrammarSymbol>> value();
                String t = CUP$Parser$stack.peek().<String> value();
                
		t_list.addElement(new Terminal(t));
		RESULT = t_list;
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("terminal_list",51, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 88: // terminal_list ::= terminal_id 
            {
                Vector<GrammarSymbol> RESULT = null;
                String t = CUP$Parser$stack.peek().<String> value();
                
		Vector<GrammarSymbol> t_list = new Vector<>();
		t_list.addElement(new Terminal(t));
		RESULT = t_list;
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("terminal_list",51, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 89: // terminal_id ::= term_id 
            {
                String RESULT = null;
                String sym = CUP$Parser$stack.peek().<String> value();
                 RESULT = sym; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("terminal_id",34, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 90: // term_id ::= symbol_id 
            {
                String RESULT = null;
                String sym = CUP$Parser$stack.peek().<String> value();
                 RESULT = sym; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("term_id",35, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 91: // start_spec ::= START WITH nt_id SEMI 
            {
                String RESULT = null;
                String start_name = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<String> value();
                 RESULT = start_name; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("start_spec",41, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 92: // start_spec ::= 
            {
                String RESULT = null;
                 RESULT = null; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("start_spec",41, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 93: // multipart_id ::= multipart_id DOT robust_id 
            {
                String RESULT = null;
                String m_id = CUP$Parser$stack.elementAt(CUP$Parser$top-2).<String> value();
                String r_id = CUP$Parser$stack.peek().<String> value();
                
		RESULT = m_id + "." + r_id;
	
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("multipart_id",40, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 94: // multipart_id ::= robust_id 
            {
                String RESULT = null;
                String r_id = CUP$Parser$stack.peek().<String> value();
                 RESULT = r_id; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("multipart_id",40, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 95: // import_id ::= multipart_id DOT STAR 
            {
                String RESULT = null;
                String m_id = CUP$Parser$stack.elementAt(CUP$Parser$top-2).<String> value();
                 RESULT = m_id + ".*"; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("import_id",38, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 96: // import_id ::= multipart_id 
            {
                String RESULT = null;
                String m_id = CUP$Parser$stack.peek().<String> value();
                 RESULT = m_id; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("import_id",38, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 97: // type_id ::= multipart_id 
            {
                String RESULT = null;
                String m_id = CUP$Parser$stack.peek().<String> value();
                 RESULT = m_id; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("type_id",42, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 98: // type_id ::= type_id LBRACK RBRACK 
            {
                String RESULT = null;
                String t_id = CUP$Parser$stack.elementAt(CUP$Parser$top-2).<String> value();
                 RESULT = t_id + "[]"; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("type_id",42, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 99: // type_id ::= multipart_id LT type_id GT 
            {
                String RESULT = null;
                String t_id = CUP$Parser$stack.elementAt(CUP$Parser$top-3).<String> value();
                String p_id = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<String> value();
                 RESULT = t_id + "<" + p_id + ">"; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("type_id",42, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 100: // type_id ::= multipart_id LT QUESTION EXTENDS type_id GT 
            {
                String RESULT = null;
                String t_id = CUP$Parser$stack.elementAt(CUP$Parser$top-5).<String> value();
                String p_id = CUP$Parser$stack.elementAt(CUP$Parser$top-1).<String> value();
                 RESULT = t_id + "<? extends " + p_id + ">"; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("type_id",42, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 101: // new_term_id ::= id 
            {
                String RESULT = null;
                String id = CUP$Parser$stack.peek().<String> value();
                 RESULT = id; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("new_term_id",44, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 102: // new_non_term_id ::= id 
            {
                String RESULT = null;
                String id = CUP$Parser$stack.peek().<String> value();
                 RESULT = id; 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("new_non_term_id",43, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 103: // id ::= ID 
            {
                String RESULT = null;
                Token id = CUP$Parser$stack.peek().<Token> value();
                 RESULT = (String)id.getValue(); 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("id",14, RESULT);
            }
            return CUP$Parser$result;

        /*. . . . . . . . . . . . . . . . . . . .*/
        case 104: // code_str ::= CODE_STR 
            {
                String RESULT = null;
                Token c = CUP$Parser$stack.peek().<Token> value();
                 RESULT = (String) c.getValue(); 
                CUP$Parser$result = parser.getSymbolFactory().newSymbol("code_str",17, RESULT);
            }
            return CUP$Parser$result;

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

        }
    } /* end of method */

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

