
//----------------------------------------------------
// The following code was generated by CUP v0.10k
// Tue Feb 11 17:07:18 PST 2014
//----------------------------------------------------

package GenRGenS.master;

import java_cup.runtime.*;
import java.util.*;
import GenRGenS.utility.*;
import GenRGenS.master.distributions.*;
import GenRGenS.*;
import java.io.*;
import java.lang.reflect.*;

/** CUP v0.10k generated parser.
  * @version Tue Feb 11 17:07:18 PST 2014
  */
public class ParseMaster extends java_cup.runtime.lr_parser {

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

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

  /** Production table. */
  protected static final short _production_table[][] = 
    unpackFromStrings(new String[] {
    "\000\047\000\002\002\004\000\002\003\006\000\002\004" +
    "\005\000\002\005\005\000\002\005\005\000\002\005\002" +
    "\000\002\006\005\000\002\007\004\000\002\007\002\000" +
    "\002\010\003\000\002\011\011\000\002\011\011\000\002" +
    "\011\002\000\002\012\005\000\002\012\005\000\002\012" +
    "\005\000\002\012\005\000\002\012\005\000\002\012\005" +
    "\000\002\012\010\000\002\012\010\000\002\012\006\000" +
    "\002\012\006\000\002\012\006\000\002\012\006\000\002" +
    "\012\010\000\002\012\010\000\002\012\003\000\002\012" +
    "\003\000\002\012\010\000\002\012\010\000\002\012\010" +
    "\000\002\012\006\000\002\012\010\000\002\012\006\000" +
    "\002\012\003\000\002\012\003\000\002\012\010\000\002" +
    "\012\003" });

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

  /** Parse-action table. */
  protected static final short[][] _action_table = 
    unpackFromStrings(new String[] {
    "\000\167\000\004\004\006\001\002\000\004\002\171\001" +
    "\002\000\006\005\012\022\ufffc\001\002\000\004\010\007" +
    "\001\002\000\004\021\010\001\002\000\006\005\uffff\022" +
    "\uffff\001\002\000\004\022\017\001\002\000\004\010\013" +
    "\001\002\000\006\006\015\007\014\001\002\000\004\022" +
    "\ufffd\001\002\000\004\022\ufffe\001\002\000\006\002\ufff9" +
    "\023\022\001\002\000\004\010\020\001\002\000\004\055" +
    "\021\001\002\000\006\002\ufffb\023\ufffb\001\002\000\010" +
    "\002\ufff5\054\ufff5\055\ufff5\001\002\000\004\002\000\001" +
    "\002\000\010\002\ufff8\054\027\055\026\001\002\000\004" +
    "\002\ufffa\001\002\000\004\012\164\001\002\000\004\012" +
    "\030\001\002\000\004\055\031\001\002\000\004\044\032" +
    "\001\002\000\004\010\033\001\002\000\046\024\045\025" +
    "\043\026\046\027\054\030\042\031\036\037\040\041\037" +
    "\042\041\043\051\044\055\046\044\047\052\050\053\051" +
    "\056\052\050\053\035\054\034\001\002\000\026\002\uffdb" +
    "\032\uffdb\033\uffdb\034\uffdb\035\uffdb\036\uffdb\040\uffdb\045" +
    "\uffdb\054\uffdb\055\uffdb\001\002\000\026\002\uffdd\032\uffdd" +
    "\033\uffdd\034\uffdd\035\uffdd\036\uffdd\040\uffdd\045\uffdd\054" +
    "\uffdd\055\uffdd\001\002\000\004\037\157\001\002\000\004" +
    "\037\154\001\002\000\046\024\045\025\043\026\046\027" +
    "\054\030\042\031\036\037\040\041\037\042\041\043\051" +
    "\044\055\046\044\047\052\050\053\051\056\052\050\053" +
    "\035\054\034\001\002\000\004\037\147\001\002\000\004" +
    "\037\141\001\002\000\004\037\134\001\002\000\004\037" +
    "\131\001\002\000\004\037\124\001\002\000\004\037\116" +
    "\001\002\000\022\002\ufff7\032\064\033\065\034\067\035" +
    "\066\036\070\054\ufff7\055\ufff7\001\002\000\026\002\uffde" +
    "\032\uffde\033\uffde\034\uffde\035\uffde\036\uffde\040\uffde\045" +
    "\uffde\054\uffde\055\uffde\001\002\000\026\002\uffe6\032\uffe6" +
    "\033\uffe6\034\uffe6\035\uffe6\036\uffe6\040\uffe6\045\uffe6\054" +
    "\uffe6\055\uffe6\001\002\000\004\037\111\001\002\000\004" +
    "\037\104\001\002\000\004\037\076\001\002\000\026\002" +
    "\uffe5\032\uffe5\033\uffe5\034\uffe5\035\uffe5\036\uffe5\040\uffe5" +
    "\045\uffe5\054\uffe5\055\uffe5\001\002\000\004\037\057\001" +
    "\002\000\004\054\060\001\002\000\004\045\061\001\002" +
    "\000\046\024\045\025\043\026\046\027\054\030\042\031" +
    "\036\037\040\041\037\042\041\043\051\044\055\046\044" +
    "\047\052\050\053\051\056\052\050\053\035\054\034\001" +
    "\002\000\016\032\064\033\065\034\067\035\066\036\070" +
    "\040\063\001\002\000\026\002\uffdc\032\uffdc\033\uffdc\034" +
    "\uffdc\035\uffdc\036\uffdc\040\uffdc\045\uffdc\054\uffdc\055\uffdc" +
    "\001\002\000\046\024\045\025\043\026\046\027\054\030" +
    "\042\031\036\037\040\041\037\042\041\043\051\044\055" +
    "\046\044\047\052\050\053\051\056\052\050\053\035\054" +
    "\034\001\002\000\046\024\045\025\043\026\046\027\054" +
    "\030\042\031\036\037\040\041\037\042\041\043\051\044" +
    "\055\046\044\047\052\050\053\051\056\052\050\053\035" +
    "\054\034\001\002\000\046\024\045\025\043\026\046\027" +
    "\054\030\042\031\036\037\040\041\037\042\041\043\051" +
    "\044\055\046\044\047\052\050\053\051\056\052\050\053" +
    "\035\054\034\001\002\000\046\024\045\025\043\026\046" +
    "\027\054\030\042\031\036\037\040\041\037\042\041\043" +
    "\051\044\055\046\044\047\052\050\053\051\056\052\050" +
    "\053\035\054\034\001\002\000\046\024\045\025\043\026" +
    "\046\027\054\030\042\031\036\037\040\041\037\042\041" +
    "\043\051\044\055\046\044\047\052\050\053\051\056\052" +
    "\050\053\035\054\034\001\002\000\026\002\ufff0\032\ufff0" +
    "\033\ufff0\034\ufff0\035\ufff0\036\ufff0\040\ufff0\045\ufff0\054" +
    "\ufff0\055\ufff0\001\002\000\026\002\ufff2\032\ufff2\033\ufff2" +
    "\034\ufff2\035\ufff2\036\070\040\ufff2\045\ufff2\054\ufff2\055" +
    "\ufff2\001\002\000\026\002\ufff1\032\ufff1\033\ufff1\034\ufff1" +
    "\035\ufff1\036\070\040\ufff1\045\ufff1\054\ufff1\055\ufff1\001" +
    "\002\000\026\002\ufff3\032\ufff3\033\ufff3\034\067\035\066" +
    "\036\070\040\ufff3\045\ufff3\054\ufff3\055\ufff3\001\002\000" +
    "\026\002\ufff4\032\ufff4\033\ufff4\034\067\035\066\036\070" +
    "\040\ufff4\045\ufff4\054\ufff4\055\ufff4\001\002\000\046\024" +
    "\045\025\043\026\046\027\054\030\042\031\036\037\040" +
    "\041\037\042\041\043\051\044\055\046\044\047\052\050" +
    "\053\051\056\052\050\053\035\054\034\001\002\000\020" +
    "\032\064\033\065\034\067\035\066\036\070\040\100\045" +
    "\101\001\002\000\026\002\uffdf\032\uffdf\033\uffdf\034\uffdf" +
    "\035\uffdf\036\uffdf\040\uffdf\045\uffdf\054\uffdf\055\uffdf\001" +
    "\002\000\046\024\045\025\043\026\046\027\054\030\042" +
    "\031\036\037\040\041\037\042\041\043\051\044\055\046" +
    "\044\047\052\050\053\051\056\052\050\053\035\054\034" +
    "\001\002\000\016\032\064\033\065\034\067\035\066\036" +
    "\070\040\103\001\002\000\026\002\uffe0\032\uffe0\033\uffe0" +
    "\034\uffe0\035\uffe0\036\uffe0\040\uffe0\045\uffe0\054\uffe0\055" +
    "\uffe0\001\002\000\046\024\045\025\043\026\046\027\054" +
    "\030\042\031\036\037\040\041\037\042\041\043\051\044" +
    "\055\046\044\047\052\050\053\051\056\052\050\053\035" +
    "\054\034\001\002\000\016\032\064\033\065\034\067\035" +
    "\066\036\070\045\106\001\002\000\046\024\045\025\043" +
    "\026\046\027\054\030\042\031\036\037\040\041\037\042" +
    "\041\043\051\044\055\046\044\047\052\050\053\051\056" +
    "\052\050\053\035\054\034\001\002\000\016\032\064\033" +
    "\065\034\067\035\066\036\070\040\110\001\002\000\026" +
    "\002\uffe7\032\uffe7\033\uffe7\034\uffe7\035\uffe7\036\uffe7\040" +
    "\uffe7\045\uffe7\054\uffe7\055\uffe7\001\002\000\046\024\045" +
    "\025\043\026\046\027\054\030\042\031\036\037\040\041" +
    "\037\042\041\043\051\044\055\046\044\047\052\050\053" +
    "\051\056\052\050\053\035\054\034\001\002\000\016\032" +
    "\064\033\065\034\067\035\066\036\070\045\113\001\002" +
    "\000\046\024\045\025\043\026\046\027\054\030\042\031" +
    "\036\037\040\041\037\042\041\043\051\044\055\046\044" +
    "\047\052\050\053\051\056\052\050\053\035\054\034\001" +
    "\002\000\016\032\064\033\065\034\067\035\066\036\070" +
    "\040\115\001\002\000\026\002\uffe8\032\uffe8\033\uffe8\034" +
    "\uffe8\035\uffe8\036\uffe8\040\uffe8\045\uffe8\054\uffe8\055\uffe8" +
    "\001\002\000\046\024\045\025\043\026\046\027\054\030" +
    "\042\031\036\037\040\041\037\042\041\043\051\044\055" +
    "\046\044\047\052\050\053\051\056\052\050\053\035\054" +
    "\034\001\002\000\020\032\064\033\065\034\067\035\066" +
    "\036\070\040\120\045\121\001\002\000\026\002\uffe1\032" +
    "\uffe1\033\uffe1\034\uffe1\035\uffe1\036\uffe1\040\uffe1\045\uffe1" +
    "\054\uffe1\055\uffe1\001\002\000\046\024\045\025\043\026" +
    "\046\027\054\030\042\031\036\037\040\041\037\042\041" +
    "\043\051\044\055\046\044\047\052\050\053\051\056\052" +
    "\050\053\035\054\034\001\002\000\016\032\064\033\065" +
    "\034\067\035\066\036\070\040\123\001\002\000\026\002" +
    "\uffe2\032\uffe2\033\uffe2\034\uffe2\035\uffe2\036\uffe2\040\uffe2" +
    "\045\uffe2\054\uffe2\055\uffe2\001\002\000\046\024\045\025" +
    "\043\026\046\027\054\030\042\031\036\037\040\041\037" +
    "\042\041\043\051\044\055\046\044\047\052\050\053\051" +
    "\056\052\050\053\035\054\034\001\002\000\016\032\064" +
    "\033\065\034\067\035\066\036\070\045\126\001\002\000" +
    "\046\024\045\025\043\026\046\027\054\030\042\031\036" +
    "\037\040\041\037\042\041\043\051\044\055\046\044\047" +
    "\052\050\053\051\056\052\050\053\035\054\034\001\002" +
    "\000\016\032\064\033\065\034\067\035\066\036\070\040" +
    "\130\001\002\000\026\002\uffe3\032\uffe3\033\uffe3\034\uffe3" +
    "\035\uffe3\036\uffe3\040\uffe3\045\uffe3\054\uffe3\055\uffe3\001" +
    "\002\000\046\024\045\025\043\026\046\027\054\030\042" +
    "\031\036\037\040\041\037\042\041\043\051\044\055\046" +
    "\044\047\052\050\053\051\056\052\050\053\035\054\034" +
    "\001\002\000\016\032\064\033\065\034\067\035\066\036" +
    "\070\040\133\001\002\000\026\002\uffea\032\uffea\033\uffea" +
    "\034\uffea\035\uffea\036\uffea\040\uffea\045\uffea\054\uffea\055" +
    "\uffea\001\002\000\046\024\045\025\043\026\046\027\054" +
    "\030\042\031\036\037\040\041\037\042\041\043\051\044" +
    "\055\046\044\047\052\050\053\051\056\052\050\053\035" +
    "\054\034\001\002\000\016\032\064\033\065\034\067\035" +
    "\066\036\070\045\136\001\002\000\046\024\045\025\043" +
    "\026\046\027\054\030\042\031\036\037\040\041\037\042" +
    "\041\043\051\044\055\046\044\047\052\050\053\051\056" +
    "\052\050\053\035\054\034\001\002\000\016\032\064\033" +
    "\065\034\067\035\066\036\070\040\140\001\002\000\026" +
    "\002\uffe4\032\uffe4\033\uffe4\034\uffe4\035\uffe4\036\uffe4\040" +
    "\uffe4\045\uffe4\054\uffe4\055\uffe4\001\002\000\046\024\045" +
    "\025\043\026\046\027\054\030\042\031\036\037\040\041" +
    "\037\042\041\043\051\044\055\046\044\047\052\050\053" +
    "\051\056\052\050\053\035\054\034\001\002\000\020\032" +
    "\064\033\065\034\067\035\066\036\070\040\143\045\144" +
    "\001\002\000\026\002\uffec\032\uffec\033\uffec\034\uffec\035" +
    "\uffec\036\uffec\040\uffec\045\uffec\054\uffec\055\uffec\001\002" +
    "\000\046\024\045\025\043\026\046\027\054\030\042\031" +
    "\036\037\040\041\037\042\041\043\051\044\055\046\044" +
    "\047\052\050\053\051\056\052\050\053\035\054\034\001" +
    "\002\000\016\032\064\033\065\034\067\035\066\036\070" +
    "\040\146\001\002\000\026\002\uffed\032\uffed\033\uffed\034" +
    "\uffed\035\uffed\036\uffed\040\uffed\045\uffed\054\uffed\055\uffed" +
    "\001\002\000\046\024\045\025\043\026\046\027\054\030" +
    "\042\031\036\037\040\041\037\042\041\043\051\044\055" +
    "\046\044\047\052\050\053\051\056\052\050\053\035\054" +
    "\034\001\002\000\016\032\064\033\065\034\067\035\066" +
    "\036\070\040\151\001\002\000\026\002\uffe9\032\uffe9\033" +
    "\uffe9\034\uffe9\035\uffe9\036\uffe9\040\uffe9\045\uffe9\054\uffe9" +
    "\055\uffe9\001\002\000\016\032\064\033\065\034\067\035" +
    "\066\036\070\040\153\001\002\000\026\002\uffef\032\uffef" +
    "\033\uffef\034\uffef\035\uffef\036\uffef\040\uffef\045\uffef\054" +
    "\uffef\055\uffef\001\002\000\046\024\045\025\043\026\046" +
    "\027\054\030\042\031\036\037\040\041\037\042\041\043" +
    "\051\044\055\046\044\047\052\050\053\051\056\052\050" +
    "\053\035\054\034\001\002\000\016\032\064\033\065\034" +
    "\067\035\066\036\070\040\156\001\002\000\026\002\uffeb" +
    "\032\uffeb\033\uffeb\034\uffeb\035\uffeb\036\uffeb\040\uffeb\045" +
    "\uffeb\054\uffeb\055\uffeb\001\002\000\046\024\045\025\043" +
    "\026\046\027\054\030\042\031\036\037\040\041\037\042" +
    "\041\043\051\044\055\046\044\047\052\050\053\051\056" +
    "\052\050\053\035\054\034\001\002\000\016\032\064\033" +
    "\065\034\067\035\066\036\070\045\161\001\002\000\046" +
    "\024\045\025\043\026\046\027\054\030\042\031\036\037" +
    "\040\041\037\042\041\043\051\044\055\046\044\047\052" +
    "\050\053\051\056\052\050\053\035\054\034\001\002\000" +
    "\016\032\064\033\065\034\067\035\066\036\070\040\163" +
    "\001\002\000\026\002\uffee\032\uffee\033\uffee\034\uffee\035" +
    "\uffee\036\uffee\040\uffee\045\uffee\054\uffee\055\uffee\001\002" +
    "\000\004\055\165\001\002\000\004\044\166\001\002\000" +
    "\004\010\167\001\002\000\046\024\045\025\043\026\046" +
    "\027\054\030\042\031\036\037\040\041\037\042\041\043" +
    "\051\044\055\046\044\047\052\050\053\051\056\052\050" +
    "\053\035\054\034\001\002\000\022\002\ufff6\032\064\033" +
    "\065\034\067\035\066\036\070\054\ufff6\055\ufff6\001\002" +
    "\000\004\002\001\001\002" });

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

  /** <code>reduce_goto</code> table. */
  protected static final short[][] _reduce_table = 
    unpackFromStrings(new String[] {
    "\000\167\000\006\003\003\004\004\001\001\000\002\001" +
    "\001\000\004\005\010\001\001\000\002\001\001\000\002" +
    "\001\001\000\002\001\001\000\004\006\015\001\001\000" +
    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
    "\001\001\000\004\007\022\001\001\000\002\001\001\000" +
    "\002\001\001\000\002\001\001\000\006\010\024\011\023" +
    "\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\012\046\001" +
    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
    "\000\002\001\001\000\004\012\151\001\001\000\002\001" +
    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
    "\001\000\002\001\001\000\002\001\001\000\004\012\061" +
    "\001\001\000\002\001\001\000\002\001\001\000\004\012" +
    "\074\001\001\000\004\012\073\001\001\000\004\012\072" +
    "\001\001\000\004\012\071\001\001\000\004\012\070\001" +
    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
    "\000\002\001\001\000\002\001\001\000\004\012\076\001" +
    "\001\000\002\001\001\000\002\001\001\000\004\012\101" +
    "\001\001\000\002\001\001\000\002\001\001\000\004\012" +
    "\104\001\001\000\002\001\001\000\004\012\106\001\001" +
    "\000\002\001\001\000\002\001\001\000\004\012\111\001" +
    "\001\000\002\001\001\000\004\012\113\001\001\000\002" +
    "\001\001\000\002\001\001\000\004\012\116\001\001\000" +
    "\002\001\001\000\002\001\001\000\004\012\121\001\001" +
    "\000\002\001\001\000\002\001\001\000\004\012\124\001" +
    "\001\000\002\001\001\000\004\012\126\001\001\000\002" +
    "\001\001\000\002\001\001\000\004\012\131\001\001\000" +
    "\002\001\001\000\002\001\001\000\004\012\134\001\001" +
    "\000\002\001\001\000\004\012\136\001\001\000\002\001" +
    "\001\000\002\001\001\000\004\012\141\001\001\000\002" +
    "\001\001\000\002\001\001\000\004\012\144\001\001\000" +
    "\002\001\001\000\002\001\001\000\004\012\147\001\001" +
    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
    "\002\001\001\000\004\012\154\001\001\000\002\001\001" +
    "\000\002\001\001\000\004\012\157\001\001\000\002\001" +
    "\001\000\004\012\161\001\001\000\002\001\001\000\002" +
    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
    "\001\000\004\012\167\001\001\000\002\001\001\000\002" +
    "\001\001" });

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

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

  /** Action encapsulation object initializer. */
  protected void init_actions()
    {
      action_obj = new CUP$ParseMaster$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$ParseMaster$do_action(act_num, parser, stack, top);
  }

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

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

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




  private boolean _parseError = false;

  public boolean isParseError()
  { return _parseError; }

  public Hashtable getSymbol2Generator()
  {
    return action_obj.getSymbol2Generator();
  }

  public Hashtable getSymbol2DistributionLaw()
  {
    return action_obj.getSymbol2DistributionLaw();
  }

  public Generator getMainGenerator()
  {
    return action_obj.getMainGenerator();
  }

  public boolean isWords()
  {
    return action_obj.isWords();
  }

  public void report_error(String message, Object info)
  {
    _parseError = true;
    if (info instanceof Symbol)
    {
      Symbol cur_token = (Symbol) info;
      int[] coord_left = ((GenRGenSScanner) getScanner()).getRelativePos(cur_token.left);
      int[] coord_right = ((GenRGenSScanner) getScanner()).getRelativePos(cur_token.right);
      if (coord_left[0] == coord_right[0])
      {
        GenRGenS.err.println("Syntax Error at line "+coord_right[0]+" chars "+ coord_left[1] +"-" + coord_right[1]);
      }
      else
      {
        GenRGenS.err.println("Syntax Error from line "+coord_left[0]+" char "+ coord_left[1] + " to line "+coord_right[0]+" char " + coord_right[1]);
      }
    }
    else
    {
      if (info instanceof String)
      {

        int[] coord_left = ((GenRGenSScanner) getScanner()).getRelativePos(cur_token.left);
        int[] coord_right = ((GenRGenSScanner) getScanner()).getRelativePos(cur_token.right);
        if (coord_left[0] == coord_right[0])
        {
          GenRGenS.err.println("At line "+coord_right[0]+" chars "+ coord_left[1] +"-" + coord_right[1] +" : " + message);
        }
        else
        {
          GenRGenS.err.println("From line "+coord_left[0]+" char "+ coord_left[1] + " to line "+coord_right[0]+" char " + coord_right[1] +" : " + message);
        }
      }
      else
      {
         GenRGenS.err.println(message);
      }
    }
  }
  public void report_fatal_error(String message, Object info) throws java.lang.Exception
  {
    _parseError = true;
    report_error(message,info);
    if (info instanceof Symbol)
    {
      Symbol cur_token = (Symbol) info;
      int[] coord_left = ((GenRGenSScanner) getScanner()).getRelativePos(cur_token.left);
      int[] coord_right = ((GenRGenSScanner) getScanner()).getRelativePos(cur_token.right);
      if (coord_left[0] == coord_right[0])
      {
        GenRGenS.err.println("Couldn't repair and continue parse at line "+coord_right[0]+".");
      }
      else
      {
        GenRGenS.err.println("Couldn't repair and continue parse at line "+coord_right[0]+".");
      }
    }
    else
    {
      Symbol current_token = cur_token;
      int[] coord_right = ((GenRGenSScanner) getScanner()).getRelativePos(current_token.right);
        GenRGenS.err.println("Couldn't repair and continue parse at line "+ coord_right[0]+".");
    }
    throw new Exception("Can't recover from previous error(s)");
  }


}

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


  
  private Generator MainGenerator = null;
  private Hashtable Symbol2Generator = new Hashtable(7);
  private Hashtable Symbol2DistributionLaw = new Hashtable(7);
  private boolean words = false;
  
  public boolean isWords()
  {
    return words;
  }
  
  public Generator getMainGenerator()
  {
    return MainGenerator;
  }
  
  public void setMainFile(String path)
  {
    try
    {
      path = Master.masterFileDir+File.separator+path;
      if (GenRGenS.verbose)
      {
        GenRGenS.err.println("Parsing file : \""+path+"\" ...");
      }
      FileReader fr = new FileReader(path);
      String type = Linker.getDescriptionFileHeader(fr);
      File f = new File(path);
      Class GeneratorClass = Linker.getGeneratorClassFromType(type);
      if (GeneratorClass != null)
      {
        Generator gen = null;
        if (GenRGenS.verbose)
        {
          GenRGenS.err.println("  Searching a generator for type : \""+type+"\" ...");
        }
        try
        {
          Object[] args = new Object[1];
          Constructor[] tab = GeneratorClass.getConstructors() ;
          boolean found = false;
          for (int i = 0; (i<tab.length)/*&&(!found)*/;i++)
          { 
            Constructor c = tab[i];
            Class[] argsTypes = c.getParameterTypes();
          
            if (argsTypes.length == 1)
            {
              Class param = argsTypes[0];
              if (param.isAssignableFrom(f.getClass()))
              {
                found = true;
                args[0] = f;
                gen = (Generator) c.newInstance(args);
              }
            }
          }
          if (!found) 
          {
            parser.done_parsing();
            parser.report_error("While parsing\""+path+"\" :\n  No constructor for type \""+type+"\".",null);
          }
        }
        catch(InvocationTargetException in)
        {
          parser.done_parsing();
          parser.report_error("While parsing\""+path+"\" :\n  "+in.getTargetException(),null);
        }
        if (gen != null)
        {
          MainGenerator = gen;
        }
      }
    }
    catch(FileNotFoundException e2)
    {
      parser.done_parsing();
      parser.report_error("File \""+path+"\" not found.",null);
    }
    catch(GeneratorCreationException e3)
    {
      parser.done_parsing();
      parser.report_error("While parsing\""+path+"\" :\n  "+e3.toString(),null);
    }
    catch(IOException e4)
    {
      parser.done_parsing();
      parser.report_error("While parsing\""+path+"\" :\n  I\\O Error !",null);
    }
    catch(IllegalAccessException e5)
    {
      parser.done_parsing();
      parser.report_error("Illegal Class Access.",null);
    }
    catch(InstantiationException e6)
    {
      parser.done_parsing();
      parser.report_error(e6.toString(),null);
    }
  }
  
  public void link(String nt,String path,DistributionLaw d)
  {
    try
    {
      if (MainGenerator != null)
      {
        if (!MainGenerator.isTerminalSymbol(nt))
        {
          parser.done_parsing();
          parser.report_error("No symbol named \""+nt+"\" in the main file !",null);
        }
      }
      
      path = Master.masterFileDir+File.separator+path;
      if (GenRGenS.verbose)
      {
        GenRGenS.err.println("Parsing file : \""+path+"\" ...");
      }
      FileReader fr = new FileReader(path);
      String type = Linker.getDescriptionFileHeader(fr);
      File f = new File(path);
      Class GeneratorClass = Linker.getGeneratorClassFromType(type);
      if (GeneratorClass != null)
      {
        Generator gen = null;
        if (GenRGenS.verbose)
        {
          GenRGenS.err.println("  Searching a generator for type : \""+type+"\" ...");
        }
        try
        {
          Object[] args = new Object[1];
          Constructor[] tab = GeneratorClass.getConstructors() ;
          boolean found = false;
          for (int i = 0; (i<tab.length)/*&&(!found)*/;i++)
          { 
            Constructor c = tab[i];
            Class[] argsTypes = c.getParameterTypes();
          
            if (argsTypes.length == 1)
            {
              Class param = argsTypes[0];
              if (param.isAssignableFrom(f.getClass()))
              {
                found = true;
                args[0] = f;
                gen = (Generator) c.newInstance(args);
              }
            }
          }
          if (!found) 
          {
            parser.done_parsing();
            parser.report_error("While parsing\""+path+"\" :\n  No constructor for type \""+type+"\".",null);
          }
        }
        catch(InvocationTargetException in)
        {
          parser.done_parsing();
          parser.report_error("While parsing\""+path+"\" :\n  "+in.getTargetException(),null);
        }
        if (gen != null)
        {
          if (GenRGenS.verbose)
          {
            GenRGenS.err.println("Generator built for symbol \""+nt+"\" from file \""+path+"\"");
          }
          if (Symbol2Generator.containsKey(nt))
          {
            parser.done_parsing();
            parser.report_error("Attempt to assign 2 different generators to symbol \""+nt+"\" !",null);
          }
          else
          {
            Symbol2Generator.put(nt,gen);
            try
            {
              Symbol2DistributionLaw.put(nt,d);
            }
            catch(Exception e)
            { 
              parser.done_parsing();
              parser.report_error(e.toString(),null);
            }
          }
        }
      }
    }
    catch(FileNotFoundException e2)
    {
      parser.done_parsing();
      parser.report_error("File \""+path+"\" not found.",null);
    }
    catch(GeneratorCreationException e3)
    {
      parser.done_parsing();
      parser.report_error("While parsing\""+path+"\" :\n  "+e3.toString(),null);
    }
    catch(IOException e4)
    {
      parser.done_parsing();
      parser.report_error("While parsing\""+path+"\" :\n  I\\O Error !",null);
    }
    catch(IllegalAccessException e5)
    {
      parser.done_parsing();
      parser.report_error("Illegal Class Access.",null);
    }
    catch(InstantiationException e6)
    {
      parser.done_parsing();
      parser.report_error(e6.toString(),null);
    }
    
  }

  public Hashtable getSymbol2Generator()
  {
    return Symbol2Generator;
  }

  public Hashtable getSymbol2DistributionLaw()
  {
    return Symbol2DistributionLaw;
  }


  private final ParseMaster parser;

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

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

      /* select the action based on the action number */
      switch (CUP$ParseMaster$act_num)
        {
          /*. . . . . . . . . . . . . . . . . . . .*/
          case 38: // Law ::= IDENT 
            {
              DistributionLaw RESULT = null;
		int ileft = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).left;
		int iright = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right;
		String i = (String)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).value;
		
												  if(i.toLowerCase().equals("n"))
												  {
												    RESULT = new SequenceLength();
												  }
												  else
												  {
  											    VarDecl t = VarDecl.getVar(i);
  											    if(t == null)
												    {
                              parser.done_parsing();
                              parser.report_error("Unknown variable/function \""+i+"\" !\nThis variable's first use should precede its first use.",null);
												    }
												    else
												    {
												      RESULT = new Var(t);
												    }
												  }
												
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(8/*Law*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 37: // Law ::= VAR LPAREN IDENT VIRG Law RPAREN 
            {
              DistributionLaw RESULT = null;
		int sleft = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).left;
		int sright = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).right;
		String s = (String)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).value;
		int lleft = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).left;
		int lright = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).right;
		DistributionLaw l = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).value;
		
  											  VarDecl target = VarDecl.getVar(s);
  											  if(target != null)
												  {
                            parser.done_parsing();
                            parser.report_error("Attempt to declare twice a variable named \""+s+"\" detected.",null);
												  }
												  else
												  {
												    RESULT = new VarDecl(s,l);
												  }
												
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(8/*Law*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-5)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 36: // Law ::= REEL 
            {
              DistributionLaw RESULT = null;
		int fleft = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).left;
		int fright = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right;
		Double f = (Double)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).value;
		
												  RESULT = new ConstantDouble(f.doubleValue());
												
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(8/*Law*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 35: // Law ::= ENTIER 
            {
              DistributionLaw RESULT = null;
		int nleft = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).left;
		int nright = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right;
		Long n = (Long)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).value;
		
												  RESULT = new ConstantLong(n.longValue());
												
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(8/*Law*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 34: // Law ::= UNIFORM LPAREN Law RPAREN 
            {
              DistributionLaw RESULT = null;
		int toleft = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).left;
		int toright = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).right;
		DistributionLaw to = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).value;
		
												  RESULT = new Uniform(new ConstantDouble(0.0),to);
												
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(8/*Law*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 33: // Law ::= UNIFORM LPAREN Law VIRG Law RPAREN 
            {
              DistributionLaw RESULT = null;
		int fromleft = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).left;
		int fromright = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).right;
		DistributionLaw from = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).value;
		int toleft = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).left;
		int toright = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).right;
		DistributionLaw to = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).value;
		
												  RESULT = new Uniform(from,to);
												
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(8/*Law*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-5)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 32: // Law ::= RANDOM LPAREN Law RPAREN 
            {
              DistributionLaw RESULT = null;
		int toleft = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).left;
		int toright = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).right;
		DistributionLaw to = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).value;
		
												  RESULT = new Uniform(new ConstantDouble(0.0),to);
												
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(8/*Law*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 31: // Law ::= RANDOM LPAREN Law VIRG Law RPAREN 
            {
              DistributionLaw RESULT = null;
		int fromleft = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).left;
		int fromright = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).right;
		DistributionLaw from = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).value;
		int toleft = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).left;
		int toright = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).right;
		DistributionLaw to = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).value;
		
												  RESULT = new Uniform(from,to);
												
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(8/*Law*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-5)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 30: // Law ::= GAUSSIAN LPAREN Law VIRG Law RPAREN 
            {
              DistributionLaw RESULT = null;
		int meanleft = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).left;
		int meanright = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).right;
		DistributionLaw mean = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).value;
		int standardDevleft = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).left;
		int standardDevright = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).right;
		DistributionLaw standardDev = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).value;
		
												  RESULT = new Gaussian(mean,standardDev);
												
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(8/*Law*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-5)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 29: // Law ::= NORMAL LPAREN Law VIRG Law RPAREN 
            {
              DistributionLaw RESULT = null;
		int meanleft = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).left;
		int meanright = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).right;
		DistributionLaw mean = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).value;
		int standardDevleft = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).left;
		int standardDevright = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).right;
		DistributionLaw standardDev = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).value;
		
												  RESULT = new Gaussian(mean,standardDev);
												
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(8/*Law*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-5)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 28: // Law ::= SIZE 
            {
              DistributionLaw RESULT = null;
		
												  RESULT = new SequenceLength();
												
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(8/*Law*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 27: // Law ::= LENGTH 
            {
              DistributionLaw RESULT = null;
		
												  RESULT = new SequenceLength();
												
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(8/*Law*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 26: // Law ::= MAX LPAREN Law VIRG Law RPAREN 
            {
              DistributionLaw RESULT = null;
		int e1left = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).left;
		int e1right = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).right;
		DistributionLaw e1 = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).value;
		int e2left = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).left;
		int e2right = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).right;
		DistributionLaw e2 = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).value;
		
												  RESULT = new Max(e1,e2);
												
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(8/*Law*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-5)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 25: // Law ::= MIN LPAREN Law VIRG Law RPAREN 
            {
              DistributionLaw RESULT = null;
		int e1left = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).left;
		int e1right = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).right;
		DistributionLaw e1 = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).value;
		int e2left = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).left;
		int e2right = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).right;
		DistributionLaw e2 = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).value;
		
												  RESULT = new Min(e1,e2);
												
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(8/*Law*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-5)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 24: // Law ::= CEIL LPAREN Law RPAREN 
            {
              DistributionLaw RESULT = null;
		int eleft = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).left;
		int eright = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).right;
		DistributionLaw e = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).value;
		
												  RESULT = new Ceil(e);
												
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(8/*Law*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 23: // Law ::= ROUND LPAREN Law RPAREN 
            {
              DistributionLaw RESULT = null;
		int eleft = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).left;
		int eright = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).right;
		DistributionLaw e = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).value;
		
												  RESULT = new Round(e);
												
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(8/*Law*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 22: // Law ::= FLOOR LPAREN Law RPAREN 
            {
              DistributionLaw RESULT = null;
		int eleft = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).left;
		int eright = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).right;
		DistributionLaw e = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).value;
		
												  RESULT = new Floor(e);
												
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(8/*Law*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 21: // Law ::= LOG LPAREN Law RPAREN 
            {
              DistributionLaw RESULT = null;
		int e1left = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).left;
		int e1right = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).right;
		DistributionLaw e1 = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).value;
		
												  RESULT = new Log(new ConstantLong(2),e1);
												
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(8/*Law*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 20: // Law ::= LOG LPAREN Law VIRG Law RPAREN 
            {
              DistributionLaw RESULT = null;
		int e1left = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).left;
		int e1right = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).right;
		DistributionLaw e1 = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).value;
		int e2left = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).left;
		int e2right = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).right;
		DistributionLaw e2 = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).value;
		
												  RESULT = new Log(e1,e2);
												
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(8/*Law*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-5)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 19: // Law ::= POW LPAREN Law VIRG Law RPAREN 
            {
              DistributionLaw RESULT = null;
		int e1left = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).left;
		int e1right = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).right;
		DistributionLaw e1 = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).value;
		int e2left = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).left;
		int e2right = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).right;
		DistributionLaw e2 = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).value;
		
												  RESULT = new Pow(e1,e2);
												
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(8/*Law*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-5)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 18: // Law ::= LPAREN Law RPAREN 
            {
              DistributionLaw RESULT = null;
		int e1left = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).left;
		int e1right = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).right;
		DistributionLaw e1 = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).value;
		
												  RESULT = e1;
												
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(8/*Law*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-2)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 17: // Law ::= Law CIRC Law 
            {
              DistributionLaw RESULT = null;
		int e1left = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-2)).left;
		int e1right = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-2)).right;
		DistributionLaw e1 = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-2)).value;
		int e2left = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).left;
		int e2right = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right;
		DistributionLaw e2 = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).value;
		
												  RESULT = new Pow(e1,e2);
												
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(8/*Law*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-2)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 16: // Law ::= Law DIVIDED Law 
            {
              DistributionLaw RESULT = null;
		int e1left = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-2)).left;
		int e1right = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-2)).right;
		DistributionLaw e1 = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-2)).value;
		int e2left = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).left;
		int e2right = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right;
		DistributionLaw e2 = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).value;
		
												  RESULT = new Division(e1,e2);
												
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(8/*Law*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-2)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 15: // Law ::= Law TIMES Law 
            {
              DistributionLaw RESULT = null;
		int e1left = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-2)).left;
		int e1right = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-2)).right;
		DistributionLaw e1 = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-2)).value;
		int e2left = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).left;
		int e2right = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right;
		DistributionLaw e2 = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).value;
		
												  RESULT = new Product(e1,e2);
												
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(8/*Law*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-2)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 14: // Law ::= Law MINUS Law 
            {
              DistributionLaw RESULT = null;
		int e1left = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-2)).left;
		int e1right = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-2)).right;
		DistributionLaw e1 = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-2)).value;
		int e2left = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).left;
		int e2right = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right;
		DistributionLaw e2 = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).value;
		
												  RESULT = new Substraction(e1,e2);
												
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(8/*Law*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-2)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 13: // Law ::= Law PLUS Law 
            {
              DistributionLaw RESULT = null;
		int e1left = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-2)).left;
		int e1right = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-2)).right;
		DistributionLaw e1 = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-2)).value;
		int e2left = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).left;
		int e2right = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right;
		DistributionLaw e2 = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).value;
		
												  RESULT = new Addition(e1,e2);
												
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(8/*Law*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-2)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 12: // Substitution ::= 
            {
              Object RESULT = null;
		 
                                                  
                                                
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(7/*Substitution*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 11: // Substitution ::= Substitution STRING DBLPOINT STRING SIZE EQUALS Law 
            {
              Object RESULT = null;
		int ntleft = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-5)).left;
		int ntright = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-5)).right;
		String nt = (String)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-5)).value;
		int pathleft = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).left;
		int pathright = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).right;
		String path = (String)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).value;
		int e1left = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).left;
		int e1right = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right;
		DistributionLaw e1 = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).value;
		 
                                                  link(nt,path,e1);
                                                
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(7/*Substitution*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-6)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 10: // Substitution ::= Substitution IDENT DBLPOINT STRING SIZE EQUALS Law 
            {
              Object RESULT = null;
		int ntleft = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-5)).left;
		int ntright = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-5)).right;
		String nt = (String)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-5)).value;
		int pathleft = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).left;
		int pathright = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).right;
		String path = (String)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).value;
		int e1left = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).left;
		int e1right = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right;
		DistributionLaw e1 = (DistributionLaw)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).value;
		 
                                                  link(nt,path,e1);
                                                
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(7/*Substitution*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-6)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 9: // SubstitutionsDeclaration ::= Substitution 
            {
              Object RESULT = null;
		
                                                
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(6/*SubstitutionsDeclaration*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 8: // WhereDeclaration ::= 
            {
              Object RESULT = null;
		
                                                
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(5/*WhereDeclaration*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 7: // WhereDeclaration ::= WHERE SubstitutionsDeclaration 
            {
              Object RESULT = null;
		
                                                
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(5/*WhereDeclaration*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-1)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 6: // MainFileDeclaration ::= MAINFILE EQUALS STRING 
            {
              Object RESULT = null;
		int sleft = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).left;
		int sright = ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right;
		String s = (String)((java_cup.runtime.Symbol) CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).value;
		 setMainFile(s); 
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(4/*MainFileDeclaration*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-2)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 5: // SymbolsDeclaration ::= 
            {
              Object RESULT = null;
		 words = true; 
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(3/*SymbolsDeclaration*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 4: // SymbolsDeclaration ::= SYMBOLS EQUALS LETTERS 
            {
              Object RESULT = null;
		 words = false;
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(3/*SymbolsDeclaration*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-2)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 3: // SymbolsDeclaration ::= SYMBOLS EQUALS WORDS 
            {
              Object RESULT = null;
		 words = true; 
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(3/*SymbolsDeclaration*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-2)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 2: // TypeDeclaration ::= TYPE EQUALS MASTER 
            {
              Object RESULT = null;
		 
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(2/*TypeDeclaration*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-2)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 1: // MasterDescription ::= TypeDeclaration SymbolsDeclaration MainFileDeclaration WhereDeclaration 
            {
              Object RESULT = null;
		 
              CUP$ParseMaster$result = new java_cup.runtime.Symbol(1/*MasterDescription*/, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-3)).left, ((java_cup.runtime.Symbol)CUP$ParseMaster$stack.elementAt(CUP$ParseMaster$top-0)).right, RESULT);
            }
          return CUP$ParseMaster$result;

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

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

        }
    }
}

