All Downloads are FREE. Search and download functionalities are using the official Maven repository.

java_cup.parser Maven / Gradle / Ivy

/*
 * Copyright 2021 EPAM Systems, Inc
 *
 * See the NOTICE file distributed with this work for additional information
 * regarding copyright ownership. Licensed under the Apache License,
 * Version 2.0 (the "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
//----------------------------------------------------
// The following code was generated by CUP v0.10k
// Tue Jul 10 13:21:59 EDT 2012
//----------------------------------------------------

package java_cup;

import java.util.*;

/** CUP v0.10k generated parser.
  * @version Tue Jul 10 13:21:59 EDT 2012
  */
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);}

  /** Production table. */
  protected static final short _production_table[][] = 
    unpackFromStrings(new String[] {
    "\000\161\000\002\002\004\000\002\055\002\000\002\003" +
    "\012\000\002\003\007\000\002\056\002\000\002\004\006" +
    "\000\002\004\003\000\002\005\004\000\002\005\003\000" +
    "\002\057\002\000\002\020\006\000\002\010\003\000\002" +
    "\010\003\000\002\010\003\000\002\010\003\000\002\007" +
    "\002\000\002\007\004\000\002\006\006\000\002\013\006" +
    "\000\002\022\006\000\002\023\006\000\002\014\004\000" +
    "\002\014\003\000\002\024\005\000\002\024\004\000\002" +
    "\024\005\000\002\024\004\000\002\060\002\000\002\024" +
    "\006\000\002\061\002\000\002\024\006\000\002\062\002" +
    "\000\002\044\005\000\002\063\002\000\002\045\005\000" +
    "\002\026\005\000\002\026\003\000\002\027\005\000\002" +
    "\027\003\000\002\040\003\000\002\040\003\000\002\043" +
    "\004\000\002\043\003\000\002\064\002\000\002\041\007" +
    "\000\002\065\002\000\002\041\007\000\002\066\002\000" +
    "\002\041\007\000\002\042\005\000\002\042\003\000\002" +
    "\052\003\000\002\053\003\000\002\067\002\000\002\015" +
    "\007\000\002\015\003\000\002\016\004\000\002\016\003" +
    "\000\002\070\002\000\002\071\002\000\002\030\010\000" +
    "\002\072\002\000\002\030\005\000\002\035\005\000\002" +
    "\035\003\000\002\036\005\000\002\036\003\000\002\031" +
    "\004\000\002\031\003\000\002\032\004\000\002\032\003" +
    "\000\002\073\002\000\002\032\007\000\002\074\002\000" +
    "\002\032\007\000\002\051\004\000\002\051\003\000\002" +
    "\017\005\000\002\017\003\000\002\021\005\000\002\021" +
    "\003\000\002\025\003\000\002\025\005\000\002\075\002" +
    "\000\002\025\007\000\002\033\003\000\002\034\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\012\004\000\002\012\003" +
    "\000\002\011\002\000\002\011\003\000\002\037\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\265\000\026\003\005\004\000\005\000\007\000\010" +
    "\000\011\000\012\000\013\000\014\000\035\000\001\002" +
    "\000\004\002\267\001\002\000\010\011\056\012\051\035" +
    "\055\001\002\000\024\004\011\005\uff91\007\uff91\010\uff91" +
    "\011\uff91\012\uff91\013\uff91\014\uff91\035\uff91\001\002\000" +
    "\022\005\uff91\007\uff91\010\uff91\011\uff91\012\uff91\013\uff91" +
    "\014\uff91\035\uff91\001\002\000\022\005\ufffb\007\ufffb\010" +
    "\ufffb\011\ufffb\012\ufffb\013\ufffb\014\ufffb\035\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\042\020\001\002\000\034\003" +
    "\uff9e\017\uff9e\022\uff9e\025\uff9e\032\uff9e\033\uff9e\034\uff9e" +
    "\036\uff9e\037\uff9e\040\uff9e\041\uff9e\042\uff9e\043\uff9e\001" +
    "\002\000\034\003\uff97\017\uff97\022\uff97\025\uff97\032\uff97" +
    "\033\uff97\034\uff97\036\uff97\037\uff97\040\uff97\041\uff97\042" +
    "\uff97\043\uff97\001\002\000\034\003\uff9a\017\uff9a\022\uff9a" +
    "\025\uff9a\032\uff9a\033\uff9a\034\uff9a\036\uff9a\037\uff9a\040" +
    "\uff9a\041\uff9a\042\uff9a\043\uff9a\001\002\000\034\003\uffa4" +
    "\017\uffa4\022\uffa4\025\uffa4\032\uffa4\033\uffa4\034\uffa4\036" +
    "\uffa4\037\uffa4\040\uffa4\041\uffa4\042\uffa4\043\uffa4\001\002" +
    "\000\034\003\uffa0\017\uffa0\022\uffa0\025\uffa0\032\uffa0\033" +
    "\uffa0\034\uffa0\036\uffa0\037\uffa0\040\uffa0\041\uffa0\042\uffa0" +
    "\043\uffa0\001\002\000\034\003\uff9c\017\uff9c\022\uff9c\025" +
    "\uff9c\032\uff9c\033\uff9c\034\uff9c\036\uff9c\037\uff9c\040\uff9c" +
    "\041\uff9c\042\uff9c\043\uff9c\001\002\000\034\003\uffa5\017" +
    "\uffa5\022\uffa5\025\uffa5\032\uffa5\033\uffa5\034\uffa5\036\uffa5" +
    "\037\uffa5\040\uffa5\041\uffa5\042\uffa5\043\uffa5\001\002\000" +
    "\006\017\ufffd\022\035\001\002\000\034\003\uff98\017\uff98" +
    "\022\uff98\025\uff98\032\uff98\033\uff98\034\uff98\036\uff98\037" +
    "\uff98\040\uff98\041\uff98\042\uff98\043\uff98\001\002\000\034" +
    "\003\uffa1\017\uffa1\022\uffa1\025\uffa1\032\uffa1\033\uffa1\034" +
    "\uffa1\036\uffa1\037\uffa1\040\uffa1\041\uffa1\042\uffa1\043\uffa1" +
    "\001\002\000\034\003\uff99\017\uff99\022\uff99\025\uff99\032" +
    "\uff99\033\uff99\034\uff99\036\uff99\037\uff99\040\uff99\041\uff99" +
    "\042\uff99\043\uff99\001\002\000\034\003\uff9f\017\uff9f\022" +
    "\uff9f\025\uff9f\032\uff9f\033\uff9f\034\uff9f\036\uff9f\037\uff9f" +
    "\040\uff9f\041\uff9f\042\uff9f\043\uff9f\001\002\000\034\003" +
    "\uffa2\017\uffa2\022\uffa2\025\uffa2\032\uffa2\033\uffa2\034\uffa2" +
    "\036\uffa2\037\uffa2\040\uffa2\041\uffa2\042\uffa2\043\uffa2\001" +
    "\002\000\016\017\uffb3\022\uffb3\033\uffb3\040\uffb3\041\uffb3" +
    "\042\uffb3\001\002\000\034\003\uff96\017\uff96\022\uff96\025" +
    "\uff96\032\uff96\033\uff96\034\uff96\036\uff96\037\uff96\040\uff96" +
    "\041\uff96\042\uff96\043\uff96\001\002\000\034\003\uffa3\017" +
    "\uffa3\022\uffa3\025\uffa3\032\uffa3\033\uffa3\034\uffa3\036\uffa3" +
    "\037\uffa3\040\uffa3\041\uffa3\042\uffa3\043\uffa3\001\002\000" +
    "\034\003\uff9b\017\uff9b\022\uff9b\025\uff9b\032\uff9b\033\uff9b" +
    "\034\uff9b\036\uff9b\037\uff9b\040\uff9b\041\uff9b\042\uff9b\043" +
    "\uff9b\001\002\000\034\003\uff9d\017\uff9d\022\uff9d\025\uff9d" +
    "\032\uff9d\033\uff9d\034\uff9d\036\uff9d\037\uff9d\040\uff9d\041" +
    "\uff9d\042\uff9d\043\uff9d\001\002\000\004\017\037\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\042\020\001\002\000\016\017" +
    "\uffb4\022\uffb4\033\uffb4\040\uffb4\041\uffb4\042\uffb4\001\002" +
    "\000\022\005\ufffc\007\ufffc\010\ufffc\011\ufffc\012\ufffc\013" +
    "\ufffc\014\ufffc\035\ufffc\001\002\000\022\005\043\007\ufff2" +
    "\010\ufff2\011\ufff2\012\ufff2\013\ufff2\014\ufff2\035\ufff2\001" +
    "\002\000\022\005\ufff9\007\ufff9\010\ufff9\011\ufff9\012\ufff9" +
    "\013\ufff9\014\ufff9\035\ufff9\001\002\000\022\005\ufffa\007" +
    "\ufffa\010\ufffa\011\ufffa\012\ufffa\013\ufffa\014\ufffa\035\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\042\020\001\002\000" +
    "\020\007\045\010\046\011\056\012\051\013\061\014\062" +
    "\035\055\001\002\000\004\006\252\001\002\000\004\006" +
    "\247\001\002\000\020\007\ufff1\010\ufff1\011\ufff1\012\ufff1" +
    "\013\ufff1\014\ufff1\035\ufff1\001\002\000\020\007\ufff5\010" +
    "\ufff5\011\ufff5\012\ufff5\013\ufff5\014\ufff5\035\ufff5\001\002" +
    "\000\004\011\246\001\002\000\042\003\234\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\042" +
    "\230\001\002\000\020\003\uffeb\011\uffeb\012\uffeb\016\uffeb" +
    "\026\uffeb\035\uffeb\042\uffeb\001\002\000\020\007\ufff3\010" +
    "\ufff3\011\ufff3\012\ufff3\013\ufff3\014\ufff3\035\ufff3\001\002" +
    "\000\042\003\uff94\006\uff94\007\uff94\010\uff94\011\uff94\012" +
    "\uff94\013\uff94\014\uff94\015\uff94\016\uff94\026\uff94\027\uff94" +
    "\030\uff94\031\uff94\035\uff94\042\uff94\001\002\000\042\003" +
    "\211\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\042\205\001\002\000\020\007\ufff6\010\ufff6" +
    "\011\ufff6\012\ufff6\013\ufff6\014\ufff6\035\ufff6\001\002\000" +
    "\020\003\uff91\011\056\012\051\016\uff91\026\075\035\055" +
    "\042\uff91\001\002\000\004\015\070\001\002\000\004\015" +
    "\064\001\002\000\020\007\ufff4\010\ufff4\011\ufff4\012\ufff4" +
    "\013\ufff4\014\ufff4\035\ufff4\001\002\000\004\043\065\001" +
    "\002\000\022\007\uff93\010\uff93\011\uff93\012\uff93\013\uff93" +
    "\014\uff93\017\067\035\uff93\001\002\000\020\007\uffed\010" +
    "\uffed\011\uffed\012\uffed\013\uffed\014\uffed\035\uffed\001\002" +
    "\000\020\007\uff92\010\uff92\011\uff92\012\uff92\013\uff92\014" +
    "\uff92\035\uff92\001\002\000\004\043\071\001\002\000\022" +
    "\007\uff93\010\uff93\011\uff93\012\uff93\013\uff93\014\uff93\017" +
    "\067\035\uff93\001\002\000\020\007\uffee\010\uffee\011\uffee" +
    "\012\uffee\013\uffee\014\uffee\035\uffee\001\002\000\010\003" +
    "\uff91\016\127\042\uff91\001\002\000\012\003\uffd7\016\uffd7" +
    "\026\uffd7\042\uffd7\001\002\000\010\027\102\030\103\031" +
    "\104\001\002\000\020\003\uffec\011\uffec\012\uffec\016\uffec" +
    "\026\uffec\035\uffec\042\uffec\001\002\000\010\003\uffd9\016" +
    "\uffd9\042\uffd9\001\002\000\012\003\uffda\016\uffda\026\075" +
    "\042\uffda\001\002\000\012\003\uffd8\016\uffd8\026\uffd8\042" +
    "\uffd8\001\002\000\006\003\uffd6\042\uffd6\001\002\000\006" +
    "\003\uffd4\042\uffd4\001\002\000\006\003\uffd2\042\uffd2\001" +
    "\002\000\006\003\107\042\106\001\002\000\032\003\uffa8" +
    "\017\uffa8\020\uffa8\023\uffa8\025\uffa8\032\uffa8\033\uffa8\034" +
    "\uffa8\036\uffa8\037\uffa8\042\uffa8\043\uffa8\001\002\000\032" +
    "\003\uffa7\017\uffa7\020\uffa7\023\uffa7\025\uffa7\032\uffa7\033" +
    "\uffa7\034\uffa7\036\uffa7\037\uffa7\042\uffa7\043\uffa7\001\002" +
    "\000\010\017\uffcd\020\uffcd\025\uffcd\001\002\000\006\017" +
    "\uffce\020\uffce\001\002\000\006\017\uffcf\020\uffcf\001\002" +
    "\000\006\017\115\020\114\001\002\000\006\003\107\042" +
    "\106\001\002\000\012\003\uffd1\016\uffd1\026\uffd1\042\uffd1" +
    "\001\002\000\006\017\uffd0\020\uffd0\001\002\000\006\003" +
    "\107\042\106\001\002\000\006\017\121\020\114\001\002" +
    "\000\012\003\uffd3\016\uffd3\026\uffd3\042\uffd3\001\002\000" +
    "\006\003\107\042\106\001\002\000\006\017\124\020\114" +
    "\001\002\000\012\003\uffd5\016\uffd5\026\uffd5\042\uffd5\001" +
    "\002\000\006\003\136\042\131\001\002\000\006\003\uffca" +
    "\042\uffca\001\002\000\004\015\130\001\002\000\006\003" +
    "\132\042\131\001\002\000\006\017\uffaa\024\uffaa\001\002" +
    "\000\004\017\uffa9\001\002\000\004\017\uffcc\001\002\000" +
    "\004\017\135\001\002\000\006\003\uffcb\042\uffcb\001\002" +
    "\000\006\017\uffc4\024\uffa9\001\002\000\004\024\uffc7\001" +
    "\002\000\010\002\uffff\003\136\042\131\001\002\000\010" +
    "\002\uffc8\003\uffc8\042\uffc8\001\002\000\010\002\uffc9\003" +
    "\uffc9\042\uffc9\001\002\000\004\024\144\001\002\000\022" +
    "\003\uffc6\017\uffc6\025\uffc6\032\uffc6\033\uffc6\036\uffc6\042" +
    "\uffc6\043\uffc6\001\002\000\022\003\uff91\017\uff91\025\uff91" +
    "\032\uff91\033\uff91\036\uff91\042\uff91\043\uff91\001\002\000" +
    "\006\017\177\025\176\001\002\000\026\003\uffbd\017\uffbd" +
    "\025\uffbd\032\uffbd\033\uffbd\034\uffbd\036\uffbd\037\uffbd\042" +
    "\uffbd\043\uffbd\001\002\000\006\017\uffc1\025\uffc1\001\002" +
    "\000\022\003\107\017\uffbf\025\uffbf\032\155\033\156\036" +
    "\153\042\106\043\152\001\002\000\026\003\uffbb\017\uffbb" +
    "\025\uffbb\032\uffbb\033\uffbb\034\uffbb\036\uffbb\037\uffbb\042" +
    "\uffbb\043\uffbb\001\002\000\016\003\uffb8\033\uffb8\036\uffb8" +
    "\037\uffb8\042\uffb8\043\uffb8\001\002\000\030\003\uff91\017" +
    "\uff91\023\163\025\uff91\032\uff91\033\uff91\034\uff91\036\uff91" +
    "\037\uff91\042\uff91\043\uff91\001\002\000\006\003\107\042" +
    "\106\001\002\000\016\003\uffba\033\uffba\034\uffba\036\uffba" +
    "\042\uffba\043\uffba\001\002\000\026\003\uffbe\017\uffbe\025" +
    "\uffbe\032\uffbe\033\uffbe\034\uffbe\036\uffbe\037\uffbe\042\uffbe" +
    "\043\uffbe\001\002\000\016\003\uff91\033\uff91\034\uff91\036" +
    "\uff91\042\uff91\043\uff91\001\002\000\016\003\107\033\156" +
    "\034\162\036\153\042\106\043\152\001\002\000\030\003" +
    "\uff91\017\uff91\023\163\025\uff91\032\uff91\033\uff91\034\uff91" +
    "\036\uff91\037\uff91\042\uff91\043\uff91\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\042\020\001\002\000\026\003\uffb5\017\uffb5" +
    "\025\uffb5\032\uffb5\033\uffb5\034\uffb5\036\uffb5\037\uffb5\042" +
    "\uffb5\043\uffb5\001\002\000\026\003\uffb9\017\uffb9\025\uffb9" +
    "\032\uffb9\033\uffb9\034\uffb9\036\uffb9\037\uffb9\042\uffb9\043" +
    "\uffb9\001\002\000\026\003\uffb6\017\uffb6\025\uffb6\032\uffb6" +
    "\033\uffb6\034\uffb6\036\uffb6\037\uffb6\042\uffb6\043\uffb6\001" +
    "\002\000\026\003\uffa6\017\uffa6\025\uffa6\032\uffa6\033\uffa6" +
    "\034\uffa6\036\uffa6\037\uffa6\042\uffa6\043\uffa6\001\002\000" +
    "\006\017\uffc0\025\uffc0\001\002\000\026\003\uffbc\017\uffbc" +
    "\025\uffbc\032\uffbc\033\uffbc\034\uffbc\036\uffbc\037\uffbc\042" +
    "\uffbc\043\uffbc\001\002\000\016\003\uff91\033\uff91\036\uff91" +
    "\037\uff91\042\uff91\043\uff91\001\002\000\016\003\107\033" +
    "\156\036\153\037\174\042\106\043\152\001\002\000\030" +
    "\003\uff91\017\uff91\023\163\025\uff91\032\uff91\033\uff91\034" +
    "\uff91\036\uff91\037\uff91\042\uff91\043\uff91\001\002\000\026" +
    "\003\uffb7\017\uffb7\025\uffb7\032\uffb7\033\uffb7\034\uffb7\036" +
    "\uffb7\037\uffb7\042\uffb7\043\uffb7\001\002\000\022\003\uff91" +
    "\017\uff91\025\uff91\032\uff91\033\uff91\036\uff91\042\uff91\043" +
    "\uff91\001\002\000\010\002\uffc5\003\uffc5\042\uffc5\001\002" +
    "\000\006\017\uffc2\025\uffc2\001\002\000\004\017\202\001" +
    "\002\000\010\002\uffc3\003\uffc3\042\uffc3\001\002\000\006" +
    "\017\uffdd\020\uffdd\001\002\000\020\003\uffe9\011\uffe9\012" +
    "\uffe9\016\uffe9\026\uffe9\035\uffe9\042\uffe9\001\002\000\016" +
    "\017\uffac\020\uffac\022\uffa5\033\uffa5\040\uffa5\042\uffa5\001" +
    "\002\000\012\022\035\033\uffb0\040\uffae\042\uffb0\001\002" +
    "\000\006\017\uffe2\020\220\001\002\000\006\033\215\042" +
    "\214\001\002\000\014\017\uffe6\022\uff96\033\uff96\040\uff96" +
    "\042\uff96\001\002\000\004\017\213\001\002\000\020\003" +
    "\uffe5\011\uffe5\012\uffe5\016\uffe5\026\uffe5\035\uffe5\042\uffe5" +
    "\001\002\000\006\017\uffac\020\uffac\001\002\000\004\034" +
    "\217\001\002\000\020\003\uffea\011\uffea\012\uffea\016\uffea" +
    "\026\uffea\035\uffea\042\uffea\001\002\000\006\033\uffaf\042" +
    "\uffaf\001\002\000\004\042\214\001\002\000\004\017\222" +
    "\001\002\000\020\003\uffe1\011\uffe1\012\uffe1\016\uffe1\026" +
    "\uffe1\035\uffe1\042\uffe1\001\002\000\006\017\uffde\020\uffde" +
    "\001\002\000\004\040\225\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\042\020\001\002\000\006\022\035\041\227\001\002" +
    "\000\006\033\uffad\042\uffad\001\002\000\016\017\uffab\020" +
    "\uffab\022\uffa5\033\uffa5\040\uffa5\042\uffa5\001\002\000\006" +
    "\017\uffdb\020\uffdb\001\002\000\006\017\uffe0\020\242\001" +
    "\002\000\006\033\215\042\241\001\002\000\014\017\uffe4" +
    "\022\uff96\033\uff96\040\uff96\042\uff96\001\002\000\020\003" +
    "\uffe7\011\uffe7\012\uffe7\016\uffe7\026\uffe7\035\uffe7\042\uffe7" +
    "\001\002\000\004\017\237\001\002\000\020\003\uffe3\011" +
    "\uffe3\012\uffe3\016\uffe3\026\uffe3\035\uffe3\042\uffe3\001\002" +
    "\000\020\003\uffe8\011\uffe8\012\uffe8\016\uffe8\026\uffe8\035" +
    "\uffe8\042\uffe8\001\002\000\006\017\uffab\020\uffab\001\002" +
    "\000\004\042\241\001\002\000\004\017\244\001\002\000" +
    "\020\003\uffdf\011\uffdf\012\uffdf\016\uffdf\026\uffdf\035\uffdf" +
    "\042\uffdf\001\002\000\006\017\uffdc\020\uffdc\001\002\000" +
    "\042\003\uff95\006\uff95\007\uff95\010\uff95\011\uff95\012\uff95" +
    "\013\uff95\014\uff95\015\uff95\016\uff95\026\uff95\027\uff95\030" +
    "\uff95\031\uff95\035\uff95\042\uff95\001\002\000\004\043\250" +
    "\001\002\000\022\007\uff93\010\uff93\011\uff93\012\uff93\013" +
    "\uff93\014\uff93\017\067\035\uff93\001\002\000\020\007\uffef" +
    "\010\uffef\011\uffef\012\uffef\013\uffef\014\uffef\035\uffef\001" +
    "\002\000\004\043\253\001\002\000\022\007\uff93\010\uff93" +
    "\011\uff93\012\uff93\013\uff93\014\uff93\017\067\035\uff93\001" +
    "\002\000\020\007\ufff0\010\ufff0\011\ufff0\012\ufff0\013\ufff0" +
    "\014\ufff0\035\ufff0\001\002\000\004\017\ufff8\001\002\000" +
    "\006\017\uffb1\022\257\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\260\026\014\027\024\030\022\031\013" +
    "\035\025\042\020\001\002\000\004\017\uffb2\001\002\000" +
    "\004\017\262\001\002\000\022\005\ufff7\007\ufff7\010\ufff7" +
    "\011\ufff7\012\ufff7\013\ufff7\014\ufff7\035\ufff7\001\002\000" +
    "\020\003\uff91\011\056\012\051\016\uff91\026\075\035\055" +
    "\042\uff91\001\002\000\010\003\uff91\016\127\042\uff91\001" +
    "\002\000\006\003\136\042\131\001\002\000\010\002\ufffe" +
    "\003\136\042\131\001\002\000\004\002\001\001\002" });

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

  /** reduce_goto table. */
  protected static final short[][] _reduce_table = 
    unpackFromStrings(new String[] {
    "\000\265\000\006\003\003\055\005\001\001\000\002\001" +
    "\001\000\010\012\051\014\262\024\052\001\001\000\006" +
    "\004\006\037\007\001\001\000\006\005\037\037\040\001" +
    "\001\000\002\001\001\000\006\017\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\004\056\033\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\035\001\001\000\002\001\001\000\002\001" +
    "\001\000\006\007\043\020\041\001\001\000\002\001\001" +
    "\000\002\001\001\000\010\017\255\021\254\054\026\001" +
    "\001\000\022\006\056\010\046\012\051\013\047\014\057" +
    "\022\062\023\053\024\052\001\001\000\002\001\001\000" +
    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
    "\001\001\000\016\017\205\025\232\027\231\034\230\045" +
    "\234\054\026\001\001\000\002\001\001\000\002\001\001" +
    "\000\002\001\001\000\016\017\205\025\207\026\206\033" +
    "\202\044\203\054\026\001\001\000\002\001\001\000\016" +
    "\012\051\024\075\037\076\040\072\041\073\043\077\001" +
    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
    "\000\002\001\001\000\004\011\065\001\001\000\002\001" +
    "\001\000\002\001\001\000\002\001\001\000\004\011\071" +
    "\001\001\000\002\001\001\000\006\015\124\037\125\001" +
    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
    "\000\002\001\001\000\004\041\100\001\001\000\002\001" +
    "\001\000\004\064\121\001\001\000\004\065\116\001\001" +
    "\000\004\066\104\001\001\000\012\042\112\047\107\052" +
    "\111\053\110\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\107\052\115\053\110\001\001" +
    "\000\002\001\001\000\002\001\001\000\012\042\117\047" +
    "\107\052\111\053\110\001\001\000\002\001\001\000\002" +
    "\001\001\000\012\042\122\047\107\052\111\053\110\001" +
    "\001\000\002\001\001\000\002\001\001\000\010\016\137" +
    "\030\140\046\136\001\001\000\002\001\001\000\002\001" +
    "\001\000\004\046\132\001\001\000\002\001\001\000\002" +
    "\001\001\000\004\067\133\001\001\000\002\001\001\000" +
    "\002\001\001\000\004\072\200\001\001\000\004\070\142" +
    "\001\001\000\006\030\141\046\136\001\001\000\002\001" +
    "\001\000\002\001\001\000\002\001\001\000\004\071\144" +
    "\001\001\000\012\031\150\035\145\036\147\037\146\001" +
    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
    "\000\006\032\156\047\153\001\001\000\002\001\001\000" +
    "\004\074\171\001\001\000\006\037\163\051\170\001\001" +
    "\000\006\047\107\053\167\001\001\000\004\073\157\001" +
    "\001\000\002\001\001\000\006\031\160\037\146\001\001" +
    "\000\006\032\156\047\153\001\001\000\006\037\163\051" +
    "\164\001\001\000\006\050\165\054\166\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\031\172" +
    "\037\146\001\001\000\006\032\156\047\153\001\001\000" +
    "\006\037\163\051\174\001\001\000\002\001\001\000\010" +
    "\031\150\036\177\037\146\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\075" +
    "\223\001\001\000\004\062\220\001\001\000\010\026\206" +
    "\033\202\044\215\001\001\000\004\060\211\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\033" +
    "\222\001\001\000\002\001\001\000\002\001\001\000\002" +
    "\001\001\000\002\001\001\000\006\017\225\054\026\001" +
    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
    "\000\002\001\001\000\004\063\242\001\001\000\010\027" +
    "\231\034\230\045\237\001\001\000\004\061\235\001\001" +
    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
    "\002\001\001\000\002\001\001\000\004\034\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\011\250\001\001" +
    "\000\002\001\001\000\002\001\001\000\004\011\253\001" +
    "\001\000\002\001\001\000\004\057\260\001\001\000\002" +
    "\001\001\000\004\054\035\001\001\000\002\001\001\000" +
    "\002\001\001\000\002\001\001\000\016\012\051\024\075" +
    "\037\076\040\263\041\073\043\077\001\001\000\006\015" +
    "\264\037\125\001\001\000\010\016\265\030\140\046\136" +
    "\001\001\000\006\030\141\046\136\001\001\000\002\001" +
    "\001" });

  /** Access to reduce_goto 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;}

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

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


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

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



  /* override error routines */

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

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

}

/** Cup generated class to encapsulate user supplied action code.*/
@SuppressWarnings ("unchecked") class CUP$parser$actions {


  private int aux_count = 1;

  private non_terminal mk_aux_non_term (String type) {
    String          auxId = "_aux_" + (aux_count++);
    return new non_terminal (auxId, type);
  }

  private void down () {
    rhs_stack.push (rhs_parts);
    rhs_parts = new ArrayList  ();
  }

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

  /** array for accumulating right hand side parts */
  protected List  rhs_parts = new ArrayList  ();

  private Stack > rhs_stack = new Stack > ();

  /** start a new right hand side */
  protected void new_rhs() {rhs_parts.clear (); }

  protected production_part [] rhs_part_array () {
    return rhs_parts.toArray (new production_part [rhs_parts.size ()]);
  }

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

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

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

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

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

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

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

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

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

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

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

  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 112: // empty ::= 
            {
              Object RESULT = null;

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

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

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

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

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

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

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

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

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

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 107: // robust_id ::= error 
            {
              String RESULT = null;
		
		lexer.emit_error("Illegal use of reserved word");
		RESULT="ILLEGAL";
	
              CUP$parser$result = new java_cup.runtime.Symbol(42/*robust_id*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 106: // robust_id ::= NONASSOC 
            {
              String RESULT = null;
		 RESULT = "nonassoc"; 
              CUP$parser$result = new java_cup.runtime.Symbol(42/*robust_id*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 105: // robust_id ::= RIGHT 
            {
              String RESULT = null;
		 RESULT = "right"; 
              CUP$parser$result = new java_cup.runtime.Symbol(42/*robust_id*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 104: // robust_id ::= LEFT 
            {
              String RESULT = null;
		 RESULT = "left"; 
              CUP$parser$result = new java_cup.runtime.Symbol(42/*robust_id*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 103: // robust_id ::= PRECEDENCE 
            {
              String RESULT = null;
		 RESULT = "precedence"; 
              CUP$parser$result = new java_cup.runtime.Symbol(42/*robust_id*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 102: // robust_id ::= START 
            {
              String RESULT = null;
		 RESULT = "start"; 
              CUP$parser$result = new java_cup.runtime.Symbol(42/*robust_id*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 101: // robust_id ::= WITH 
            {
              String RESULT = null;
		 RESULT = "with"; 
              CUP$parser$result = new java_cup.runtime.Symbol(42/*robust_id*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 100: // robust_id ::= SCAN 
            {
              String RESULT = null;
		 RESULT = "scan"; 
              CUP$parser$result = new java_cup.runtime.Symbol(42/*robust_id*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 99: // robust_id ::= INIT 
            {
              String RESULT = null;
		 RESULT = "init"; 
              CUP$parser$result = new java_cup.runtime.Symbol(42/*robust_id*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 98: // robust_id ::= NONTERMINAL 
            {
              String RESULT = null;
		 RESULT = "nonterminal"; 
              CUP$parser$result = new java_cup.runtime.Symbol(42/*robust_id*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 97: // robust_id ::= NON 
            {
              String RESULT = null;
		 RESULT = "non"; 
              CUP$parser$result = new java_cup.runtime.Symbol(42/*robust_id*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 96: // robust_id ::= TERMINAL 
            {
              String RESULT = null;
		 RESULT = "terminal"; 
              CUP$parser$result = new java_cup.runtime.Symbol(42/*robust_id*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 95: // robust_id ::= PARSER 
            {
              String RESULT = null;
		 RESULT = "parser"; 
              CUP$parser$result = new java_cup.runtime.Symbol(42/*robust_id*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 94: // robust_id ::= ACTION 
            {
              String RESULT = null;
		 RESULT = "action"; 
              CUP$parser$result = new java_cup.runtime.Symbol(42/*robust_id*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 93: // robust_id ::= CODE 
            {
              String RESULT = null;
		 RESULT = "code"; 
              CUP$parser$result = new java_cup.runtime.Symbol(42/*robust_id*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

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

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

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 90: // symbol_id ::= error 
            {
              String RESULT = null;
		
		lexer.emit_error("Illegal use of reserved word");
		RESULT="ILLEGAL";
	
              CUP$parser$result = new java_cup.runtime.Symbol(37/*symbol_id*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

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

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 88: // nt_id ::= error 
            {
              String RESULT = null;
		
		lexer.emit_error("Illegal use of reserved word");
		RESULT="ILLEGAL";
	
              CUP$parser$result = new java_cup.runtime.Symbol(36/*nt_id*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

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

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

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

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

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

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 84: // type_id ::= multipart_id NT$16 LT multipart_id GT 
            {
              Object RESULT = null;
              // propagate RESULT from NT$16
              if ( ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-3)).value != null )
                RESULT = (Object) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-3)).value;
		 multipart_name = multipart_name_save + "<" + multipart_name + ">"; 
              CUP$parser$result = new java_cup.runtime.Symbol(19/*type_id*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 83: // NT$16 ::= 
            {
              Object RESULT = null;
 multipart_name_save = multipart_name; multipart_name = ""; 
              CUP$parser$result = new java_cup.runtime.Symbol(59/*NT$16*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 82: // type_id ::= type_id LBRACK RBRACK 
            {
              Object RESULT = null;
		 multipart_name = multipart_name.concat("[]"); 
              CUP$parser$result = new java_cup.runtime.Symbol(19/*type_id*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-2)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

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

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

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

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

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

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

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

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

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

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 74: // prod_part ::= LBRACE NT$15 prod_part_list RBRACE opt_label 
            {
              Object RESULT = null;
              // propagate RESULT from NT$15
              if ( ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-3)).value != null )
                RESULT = (Object) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-3)).value;
		int labidleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;
		int labidright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right;
		String labid = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value;
		
            non_terminal    aux_nt = mk_aux_non_term ("java.util.List ");
	        symbol_part     sym_part = new symbol_part (aux_nt);

	        /* Create the auxiliary productions */
            rhs_parts.add (0, add_lab (sym_part, "_list_"));
            rhs_parts.add (1, new action_part ("RESULT = _list_;"));
            new production (aux_nt, rhs_part_array (), rhs_parts.size ());

            new production (aux_nt,
                new production_part [] {
                   new action_part ("RESULT=new java.util.ArrayList  ();")
                },
                1
            );

            rhs_parts = rhs_stack.pop ();
            rhs_parts.add (add_lab (sym_part, labid));
        
              CUP$parser$result = new java_cup.runtime.Symbol(24/*prod_part*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 73: // NT$15 ::= 
            {
              Object RESULT = null;
 down (); 
              CUP$parser$result = new java_cup.runtime.Symbol(58/*NT$15*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 72: // prod_part ::= LBRACK NT$14 prod_part_list RBRACK opt_label 
            {
              Object RESULT = null;
              // propagate RESULT from NT$14
              if ( ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-3)).value != null )
                RESULT = (Object) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-3)).value;
		int labidleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;
		int labidright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right;
		String labid = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value;
		
            non_terminal    aux_nt = mk_aux_non_term ("Object");
	        symbol_part     sym_part = new symbol_part (aux_nt);

	        /* Create the auxiliary productions */
            new production (aux_nt, rhs_part_array (), rhs_parts.size ());
            new production (aux_nt, null, 0);

            rhs_parts = rhs_stack.pop ();
            rhs_parts.add (add_lab (sym_part, labid));
        
              CUP$parser$result = new java_cup.runtime.Symbol(24/*prod_part*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 71: // NT$14 ::= 
            {
              Object RESULT = null;
 down (); 
              CUP$parser$result = new java_cup.runtime.Symbol(57/*NT$14*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

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

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 69: // 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.elementAt(CUP$parser$top-0)).left;
		int labidright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right;
		String labid = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value;
		 
	  /* try to look up the id */
	  production_part symb = (production_part)symbols.get(symid);

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

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

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

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

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

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

	      /* 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();
	          rhs_parts.add(add_lab(new symbol_part(start_nt),"start_val"));
	          rhs_parts.add(new symbol_part(terminal.EOF));
		  rhs_parts.add(new action_part("RESULT = start_val;"));
	          emit.start_production = 
		     new production(non_terminal.START_nt, rhs_part_array (), rhs_parts.size ());

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

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 65: // rhs ::= prod_part_list PERCENT_PREC term_id 
            {
              Object RESULT = null;
		int term_nameleft = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).left;
		int term_nameright = ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right;
		String term_name = (String)((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-0)).value;
		
	  java_cup.symbol sym = null;
	  if (lhs_nt != null) 
	    {
	      /* Find the precedence symbol */
	      if (term_name == null) {
		System.err.println("No terminal for contextual precedence");
		sym = null;
	      } else {
		sym = ((symbol_part)symbols.get(term_name)).the_symbol();
	      }
	      /* build the production */
	      production p;
	      if ((sym!=null) && (sym instanceof terminal)) {
		p = new production(lhs_nt, rhs_part_array (), rhs_parts.size (),
				   ((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_part_array (), rhs_parts.size ());
	      }

	      /* 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();
	          rhs_parts.add(add_lab(new symbol_part(start_nt),"start_val"));
	          rhs_parts.add(new symbol_part(terminal.EOF));
		  rhs_parts.add(new action_part("RESULT = start_val;"));
		  if ((sym!=null) && (sym instanceof terminal)) {
		    emit.start_production = 
		      new production(non_terminal.START_nt, rhs_part_array (),
				     rhs_parts.size (), ((terminal)sym).precedence_num(),
				     ((terminal)sym).precedence_side());
		  } else {
		    emit.start_production = 
		      new production(non_terminal.START_nt, rhs_part_array (), rhs_parts.size ());
		  }
	          new_rhs();
		}
	    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 54: // start_spec ::= START WITH nt_id NT$10 SEMI 
            {
              Object RESULT = null;
              // propagate RESULT from NT$10
              if ( ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-1)).value != null )
                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 = new java_cup.runtime.Symbol(11/*start_spec*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-4)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 20: // 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)
	    lexer.emit_error("Redundant scan code (skipping)");
	  else /* save the user code */
	    emit.scan_code = user_code;
	
              CUP$parser$result = new java_cup.runtime.Symbol(17/*scan_code*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 19: // 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)
	    lexer.emit_error("Redundant init code (skipping)");
	  else /* save the user code */
	    emit.init_code = user_code;
	
              CUP$parser$result = new java_cup.runtime.Symbol(16/*init_code*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 18: // 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)
	    lexer.emit_error("Redundant parser code (skipping)");
	  else /* save the user included code string */
	    emit.parser_code = user_code;
	
              CUP$parser$result = new java_cup.runtime.Symbol(9/*parser_code_part*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 17: // 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)
	    lexer.emit_error("Redundant action code (skipping)");
	  else /* save the user included code string */
	    emit.action_code = user_code;
	
              CUP$parser$result = new java_cup.runtime.Symbol(4/*action_code_part*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

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

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

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

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

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

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

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

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

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

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

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

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

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

              CUP$parser$result = new java_cup.runtime.Symbol(14/*import_spec*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, 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 = new java_cup.runtime.Symbol(45/*NT$2*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

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

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

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

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

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

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

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

              CUP$parser$result = new java_cup.runtime.Symbol(2/*package_spec*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-3)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, 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 = new java_cup.runtime.Symbol(44/*NT$1*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          return CUP$parser$result;

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

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

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 2: // spec ::= NT$0 package_spec import_list code_parts symbol_list precedence_list start_spec production_list 
            {
              Object RESULT = null;
              // propagate RESULT from NT$0
              if ( ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-7)).value != null )
                RESULT = (Object) ((java_cup.runtime.Symbol) CUP$parser$stack.elementAt(CUP$parser$top-7)).value;

              CUP$parser$result = new java_cup.runtime.Symbol(1/*spec*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-7)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, 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 = new java_cup.runtime.Symbol(43/*NT$0*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, 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 = new java_cup.runtime.Symbol(0/*$START*/, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-1)).left, ((java_cup.runtime.Symbol)CUP$parser$stack.elementAt(CUP$parser$top-0)).right, RESULT);
            }
          /* ACCEPT */
          CUP$parser$parser.done_parsing();
          return CUP$parser$result;

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

        }
    }
}