
//----------------------------------------------------
// The following code was generated by CUP v0.10k
// Fri Jan 26 10:11:19 PST 2007
//----------------------------------------------------

package code.loop.parser;

import java_cup.runtime.*;
import java.util.*;
import code.term.*;
import code.table.*;
import code.symbols.*;

/** CUP v0.10k generated parser.
  * @version Fri Jan 26 10:11:19 PST 2007
  */
public class AstParser extends java_cup.runtime.lr_parser {

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

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

  /** Production table. */
  protected static final short _production_table[][] = 
    unpackFromStrings(new String[] {
    "\000\054\000\002\003\004\000\002\002\004\000\002\004" +
    "\002\000\002\004\005\000\002\005\003\000\002\005\005" +
    "\000\002\006\003\000\002\006\003\000\002\006\003\000" +
    "\002\006\003\000\002\007\010\000\002\010\005\000\002" +
    "\010\007\000\002\010\005\000\002\011\004\000\002\011" +
    "\003\000\002\012\004\000\002\013\003\000\002\013\005" +
    "\000\002\013\005\000\002\013\003\000\002\013\005\000" +
    "\002\013\003\000\002\013\003\000\002\013\003\000\002" +
    "\013\006\000\002\013\006\000\002\013\006\000\002\014" +
    "\003\000\002\014\003\000\002\014\003\000\002\014\003" +
    "\000\002\015\007\000\002\015\004\000\002\016\003\000" +
    "\002\016\005\000\002\017\005\000\002\017\004\000\002" +
    "\020\003\000\002\020\005\000\002\021\006\000\002\021" +
    "\010\000\002\021\007\000\002\021\011" });

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

  /** Parse-action table. */
  protected static final short[][] _action_table = 
    unpackFromStrings(new String[] {
    "\000\120\000\024\004\005\006\014\007\025\010\015\011" +
    "\007\012\010\017\023\023\011\025\012\001\002\000\046" +
    "\002\uffe9\004\uffe9\005\uffe9\006\uffe9\007\uffe9\010\uffe9\011" +
    "\uffe9\013\uffe9\014\uffe9\015\uffe9\017\uffe9\021\uffe9\022\uffe9" +
    "\023\uffe9\024\uffe9\025\uffe9\026\uffe9\027\uffe9\001\002\000" +
    "\046\002\ufff0\004\ufff0\005\ufff0\006\ufff0\007\ufff0\010\ufff0" +
    "\011\ufff0\013\ufff0\014\ufff0\015\ufff0\017\ufff0\021\ufff0\022" +
    "\ufff0\023\ufff0\024\ufff0\025\ufff0\026\ufff0\027\ufff0\001\002" +
    "\000\014\002\uffff\005\031\015\115\017\033\027\032\001" +
    "\002\000\046\002\uffe4\004\uffe4\005\uffe4\006\uffe4\007\uffe4" +
    "\010\uffe4\011\uffe4\013\uffe4\014\uffe4\015\uffe4\017\uffe4\021" +
    "\uffe4\022\uffe4\023\uffe4\024\uffe4\025\uffe4\026\uffe4\027\uffe4" +
    "\001\002\000\024\004\005\006\014\007\025\010\015\011" +
    "\007\012\010\017\023\023\011\025\012\001\002\000\030" +
    "\004\005\005\067\006\014\007\025\010\015\011\007\012" +
    "\010\017\066\023\011\024\065\025\012\001\002\000\026" +
    "\004\005\006\014\007\025\010\015\011\007\012\010\017" +
    "\023\023\011\025\012\026\044\001\002\000\030\002\ufff8" +
    "\005\ufff8\013\ufff8\014\ufff8\015\ufff8\017\ufff8\021\ufff8\022" +
    "\ufff8\024\ufff8\026\ufff8\027\ufff8\001\002\000\046\002\uffe3" +
    "\004\uffe3\005\uffe3\006\uffe3\007\uffe3\010\uffe3\011\uffe3\013" +
    "\uffe3\014\uffe3\015\uffe3\017\uffe3\021\uffe3\022\uffe3\023\uffe3" +
    "\024\uffe3\025\uffe3\026\uffe3\027\uffe3\001\002\000\046\002" +
    "\uffe2\004\uffe2\005\uffe2\006\uffe2\007\uffe2\010\uffe2\011\uffe2" +
    "\013\uffe2\014\uffe2\015\uffe2\017\uffe2\021\uffe2\022\uffe2\023" +
    "\uffe2\024\uffe2\025\uffe2\026\uffe2\027\uffe2\001\002\000\046" +
    "\002\uffeb\004\uffeb\005\uffeb\006\uffeb\007\uffeb\010\uffeb\011" +
    "\uffeb\013\uffeb\014\uffeb\015\uffeb\017\uffeb\021\uffeb\022\uffeb" +
    "\023\uffeb\024\uffeb\025\uffeb\026\uffeb\027\uffeb\001\002\000" +
    "\030\002\ufffa\005\ufffa\013\ufffa\014\ufffa\015\ufffa\017\ufffa" +
    "\021\ufffa\022\ufffa\024\ufffa\026\ufffa\027\ufffa\001\002\000" +
    "\004\002\042\001\002\000\046\002\ufff2\004\ufff2\005\ufff2" +
    "\006\ufff2\007\ufff2\010\ufff2\011\ufff2\013\ufff2\014\ufff2\015" +
    "\ufff2\017\ufff2\021\ufff2\022\ufff2\023\ufff2\024\ufff2\025\ufff2" +
    "\026\ufff2\027\ufff2\001\002\000\046\002\ufff9\004\005\005" +
    "\ufff9\006\014\007\025\010\015\011\007\013\ufff9\014\ufff9" +
    "\015\ufff9\017\ufff9\021\ufff9\022\ufff9\023\011\024\ufff9\025" +
    "\012\026\ufff9\027\ufff9\001\002\000\024\004\005\006\014" +
    "\007\025\010\015\011\007\012\010\017\023\023\011\025" +
    "\012\001\002\000\046\002\uffed\004\uffed\005\uffed\006\uffed" +
    "\007\uffed\010\uffed\011\uffed\013\uffed\014\uffed\015\uffed\017" +
    "\uffed\021\uffed\022\uffed\023\uffed\024\uffed\025\uffed\026\uffed" +
    "\027\uffed\001\002\000\046\002\uffe5\004\uffe5\005\uffe5\006" +
    "\uffe5\007\uffe5\010\uffe5\011\uffe5\013\uffe5\014\uffe5\015\uffe5" +
    "\017\uffe5\021\uffe5\022\uffe5\023\uffe5\024\uffe5\025\uffe5\026" +
    "\uffe5\027\uffe5\001\002\000\046\002\uffea\004\uffea\005\uffea" +
    "\006\uffea\007\uffea\010\uffea\011\uffea\013\uffea\014\uffea\015" +
    "\uffea\017\uffea\021\uffea\022\uffea\023\uffea\024\uffea\025\uffea" +
    "\026\uffea\027\uffea\001\002\000\030\002\ufffb\005\ufffb\013" +
    "\ufffb\014\ufffb\015\ufffb\017\ufffb\021\ufffb\022\ufffb\024\ufffb" +
    "\026\ufffb\027\ufffb\001\002\000\030\002\ufff1\005\ufff1\013" +
    "\ufff1\014\ufff1\015\ufff1\017\ufff1\021\ufff1\022\ufff1\024\ufff1" +
    "\026\ufff1\027\ufff1\001\002\000\024\004\005\006\014\007" +
    "\025\010\015\011\007\012\010\017\023\023\011\025\012" +
    "\001\002\000\004\004\035\001\002\000\024\004\005\006" +
    "\014\007\025\010\015\011\007\012\010\017\023\023\011" +
    "\025\012\001\002\000\030\002\ufff4\005\ufff4\013\ufff4\014" +
    "\ufff4\015\ufff4\017\ufff4\021\ufff4\022\ufff4\024\ufff4\026\ufff4" +
    "\027\ufff4\001\002\000\004\027\036\001\002\000\024\004" +
    "\005\006\014\007\025\010\015\011\007\012\010\017\023" +
    "\023\011\025\012\001\002\000\030\002\ufff5\005\ufff5\013" +
    "\ufff5\014\ufff5\015\ufff5\017\ufff5\021\ufff5\022\ufff5\024\ufff5" +
    "\026\ufff5\027\ufff5\001\002\000\030\002\ufff6\005\ufff6\013" +
    "\ufff6\014\ufff6\015\ufff6\017\ufff6\021\ufff6\022\ufff6\024\ufff6" +
    "\026\ufff6\027\ufff6\001\002\000\046\002\ufff3\004\ufff3\005" +
    "\ufff3\006\ufff3\007\ufff3\010\ufff3\011\ufff3\013\ufff3\014\ufff3" +
    "\015\ufff3\017\ufff3\021\ufff3\022\ufff3\023\ufff3\024\ufff3\025" +
    "\ufff3\026\ufff3\027\ufff3\001\002\000\004\002\000\001\002" +
    "\000\016\005\031\017\033\021\050\022\047\026\uffdb\027" +
    "\032\001\002\000\046\002\uffdc\004\uffdc\005\uffdc\006\uffdc" +
    "\007\uffdc\010\uffdc\011\uffdc\013\uffdc\014\uffdc\015\uffdc\017" +
    "\uffdc\021\uffdc\022\uffdc\023\uffdc\024\uffdc\025\uffdc\026\uffdc" +
    "\027\uffdc\001\002\000\004\026\046\001\002\000\046\002" +
    "\uffdd\004\uffdd\005\uffdd\006\uffdd\007\uffdd\010\uffdd\011\uffdd" +
    "\013\uffdd\014\uffdd\015\uffdd\017\uffdd\021\uffdd\022\uffdd\023" +
    "\uffdd\024\uffdd\025\uffdd\026\uffdd\027\uffdd\001\002\000\024" +
    "\004\005\006\014\007\025\010\015\011\007\012\010\017" +
    "\023\023\011\025\012\001\002\000\026\004\005\006\014" +
    "\007\025\010\015\011\007\012\010\017\023\023\011\025" +
    "\012\026\052\001\002\000\012\005\031\017\033\026\053" +
    "\027\032\001\002\000\046\002\uffd9\004\uffd9\005\uffd9\006" +
    "\uffd9\007\uffd9\010\uffd9\011\uffd9\013\uffd9\014\uffd9\015\uffd9" +
    "\017\uffd9\021\uffd9\022\uffd9\023\uffd9\024\uffd9\025\uffd9\026" +
    "\uffd9\027\uffd9\001\002\000\046\002\uffd7\004\uffd7\005\uffd7" +
    "\006\uffd7\007\uffd7\010\uffd7\011\uffd7\013\uffd7\014\uffd7\015" +
    "\uffd7\017\uffd7\021\uffd7\022\uffd7\023\uffd7\024\uffd7\025\uffd7" +
    "\026\uffd7\027\uffd7\001\002\000\016\005\031\017\033\021" +
    "\057\022\056\026\uffdb\027\032\001\002\000\004\026\uffda" +
    "\001\002\000\024\004\005\006\014\007\025\010\015\011" +
    "\007\012\010\017\023\023\011\025\012\001\002\000\026" +
    "\004\005\006\014\007\025\010\015\011\007\012\010\017" +
    "\023\023\011\025\012\026\061\001\002\000\012\005\031" +
    "\017\033\026\062\027\032\001\002\000\046\002\uffd8\004" +
    "\uffd8\005\uffd8\006\uffd8\007\uffd8\010\uffd8\011\uffd8\013\uffd8" +
    "\014\uffd8\015\uffd8\017\uffd8\021\uffd8\022\uffd8\023\uffd8\024" +
    "\uffd8\025\uffd8\026\uffd8\027\uffd8\001\002\000\046\002\uffd6" +
    "\004\uffd6\005\uffd6\006\uffd6\007\uffd6\010\uffd6\011\uffd6\013" +
    "\uffd6\014\uffd6\015\uffd6\017\uffd6\021\uffd6\022\uffd6\023\uffd6" +
    "\024\uffd6\025\uffd6\026\uffd6\027\uffd6\001\002\000\014\005" +
    "\031\017\033\022\056\026\uffdb\027\032\001\002\000\014" +
    "\005\075\017\077\022\074\024\076\027\032\001\002\000" +
    "\046\002\uffe0\004\uffe0\005\uffe0\006\uffe0\007\uffe0\010\uffe0" +
    "\011\uffe0\013\uffe0\014\uffe0\015\uffe0\017\uffe0\021\uffe0\022" +
    "\uffe0\023\uffe0\024\uffe0\025\uffe0\026\uffe0\027\uffe0\001\002" +
    "\000\026\004\005\006\014\007\025\010\015\011\007\012" +
    "\010\017\023\023\011\024\073\025\012\001\002\000\026" +
    "\004\005\006\014\007\025\010\015\011\007\012\010\017" +
    "\023\023\011\024\071\025\012\001\002\000\012\005\031" +
    "\017\033\024\072\027\032\001\002\000\046\002\uffef\004" +
    "\uffef\005\uffef\006\uffef\007\uffef\010\uffef\011\uffef\013\uffef" +
    "\014\uffef\015\uffef\017\uffef\021\uffef\022\uffef\023\uffef\024" +
    "\uffef\025\uffef\026\uffef\027\uffef\001\002\000\046\002\uffe6" +
    "\004\uffe6\005\uffe6\006\uffe6\007\uffe6\010\uffe6\011\uffe6\013" +
    "\uffe6\014\uffe6\015\uffe6\017\uffe6\021\uffe6\022\uffe6\023\uffe6" +
    "\024\uffe6\025\uffe6\026\uffe6\027\uffe6\001\002\000\046\002" +
    "\uffee\004\uffee\005\uffee\006\uffee\007\uffee\010\uffee\011\uffee" +
    "\013\uffee\014\uffee\015\uffee\017\uffee\021\uffee\022\uffee\023" +
    "\uffee\024\uffee\025\uffee\026\uffee\027\uffee\001\002\000\024" +
    "\004\005\006\014\007\025\010\015\011\007\012\010\017" +
    "\023\023\011\025\012\001\002\000\026\004\005\006\014" +
    "\007\025\010\015\011\007\012\010\017\023\023\011\024" +
    "\101\025\012\001\002\000\046\002\uffec\004\uffec\005\uffec" +
    "\006\uffec\007\uffec\010\uffec\011\uffec\013\uffec\014\uffec\015" +
    "\uffec\017\uffec\021\uffec\022\uffec\023\uffec\024\uffec\025\uffec" +
    "\026\uffec\027\uffec\001\002\000\026\004\005\006\014\007" +
    "\025\010\015\011\007\012\010\017\023\023\011\024\100" +
    "\025\012\001\002\000\046\002\uffe7\004\uffe7\005\uffe7\006" +
    "\uffe7\007\uffe7\010\uffe7\011\uffe7\013\uffe7\014\uffe7\015\uffe7" +
    "\017\uffe7\021\uffe7\022\uffe7\023\uffe7\024\uffe7\025\uffe7\026" +
    "\uffe7\027\uffe7\001\002\000\046\002\uffe8\004\uffe8\005\uffe8" +
    "\006\uffe8\007\uffe8\010\uffe8\011\uffe8\013\uffe8\014\uffe8\015" +
    "\uffe8\017\uffe8\021\uffe8\022\uffe8\023\uffe8\024\uffe8\025\uffe8" +
    "\026\uffe8\027\uffe8\001\002\000\014\005\031\017\033\022" +
    "\105\024\uffdf\027\032\001\002\000\004\024\104\001\002" +
    "\000\046\002\uffe1\004\uffe1\005\uffe1\006\uffe1\007\uffe1\010" +
    "\uffe1\011\uffe1\013\uffe1\014\uffe1\015\uffe1\017\uffe1\021\uffe1" +
    "\022\uffe1\023\uffe1\024\uffe1\025\uffe1\026\uffe1\027\uffe1\001" +
    "\002\000\024\004\005\006\014\007\025\010\015\011\007" +
    "\012\010\017\023\023\011\025\012\001\002\000\004\024" +
    "\uffde\001\002\000\012\005\031\013\110\017\033\027\032" +
    "\001\002\000\024\004\005\006\014\007\025\010\015\011" +
    "\007\012\010\017\023\023\011\025\012\001\002\000\012" +
    "\005\031\014\112\017\033\027\032\001\002\000\024\004" +
    "\005\006\014\007\025\010\015\011\007\012\010\017\023" +
    "\023\011\025\012\001\002\000\030\002\ufff7\005\031\013" +
    "\ufff7\014\ufff7\015\ufff7\017\033\021\ufff7\022\ufff7\024\ufff7" +
    "\026\ufff7\027\032\001\002\000\004\002\001\001\002\000" +
    "\004\004\117\001\002\000\004\016\122\001\002\000\006" +
    "\016\ufffd\022\120\001\002\000\004\004\117\001\002\000" +
    "\004\016\ufffc\001\002\000\004\002\ufffe\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\120\000\030\003\017\006\005\007\026\010\016\011" +
    "\021\012\012\013\020\014\023\015\015\017\025\021\003" +
    "\001\001\000\002\001\001\000\002\001\001\000\004\004" +
    "\113\001\001\000\002\001\001\000\026\006\106\007\026" +
    "\010\016\011\021\012\012\013\020\014\023\015\015\017" +
    "\025\021\003\001\001\000\026\006\063\007\026\010\016" +
    "\011\021\012\012\013\020\014\023\015\015\017\025\021" +
    "\003\001\001\000\030\006\042\007\026\010\016\011\021" +
    "\012\012\013\020\014\023\015\015\017\025\020\044\021" +
    "\003\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\014\013\040\014\023\015\015" +
    "\017\025\021\003\001\001\000\026\006\027\007\026\010" +
    "\016\011\021\012\012\013\020\014\023\015\015\017\025" +
    "\021\003\001\001\000\002\001\001\000\002\001\001\000" +
    "\002\001\001\000\002\001\001\000\002\001\001\000\026" +
    "\006\037\007\026\010\016\011\021\012\012\013\020\014" +
    "\023\015\015\017\025\021\003\001\001\000\002\001\001" +
    "\000\026\006\033\007\026\010\016\011\021\012\012\013" +
    "\020\014\023\015\015\017\025\021\003\001\001\000\002" +
    "\001\001\000\002\001\001\000\026\006\036\007\026\010" +
    "\016\011\021\012\012\013\020\014\023\015\015\017\025" +
    "\021\003\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\030\006" +
    "\053\007\026\010\016\011\021\012\012\013\020\014\023" +
    "\015\015\017\025\020\054\021\003\001\001\000\026\006" +
    "\050\007\026\010\016\011\021\012\012\013\020\014\023" +
    "\015\015\017\025\021\003\001\001\000\002\001\001\000" +
    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
    "\001\001\000\030\006\062\007\026\010\016\011\021\012" +
    "\012\013\020\014\023\015\015\017\025\020\054\021\003" +
    "\001\001\000\026\006\057\007\026\010\016\011\021\012" +
    "\012\013\020\014\023\015\015\017\025\021\003\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\026" +
    "\006\027\007\026\010\016\011\021\012\012\013\020\014" +
    "\023\015\015\017\025\021\003\001\001\000\026\006\067" +
    "\007\026\010\016\011\021\012\012\013\020\014\023\015" +
    "\015\017\025\021\003\001\001\000\002\001\001\000\002" +
    "\001\001\000\002\001\001\000\002\001\001\000\030\006" +
    "\101\007\026\010\016\011\021\012\012\013\020\014\023" +
    "\015\015\016\102\017\025\021\003\001\001\000\026\006" +
    "\037\007\026\010\016\011\021\012\012\013\020\014\023" +
    "\015\015\017\025\021\003\001\001\000\002\001\001\000" +
    "\026\006\033\007\026\010\016\011\021\012\012\013\020" +
    "\014\023\015\015\017\025\021\003\001\001\000\002\001" +
    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
    "\000\002\001\001\000\030\006\101\007\026\010\016\011" +
    "\021\012\012\013\020\014\023\015\015\016\105\017\025" +
    "\021\003\001\001\000\002\001\001\000\002\001\001\000" +
    "\026\006\110\007\026\010\016\011\021\012\012\013\020" +
    "\014\023\015\015\017\025\021\003\001\001\000\002\001" +
    "\001\000\026\006\112\007\026\010\016\011\021\012\012" +
    "\013\020\014\023\015\015\017\025\021\003\001\001\000" +
    "\002\001\001\000\002\001\001\000\004\005\115\001\001" +
    "\000\002\001\001\000\002\001\001\000\004\005\120\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$AstParser$actions action_obj;

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

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

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

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


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



/** We can't use the usual setScanner/getScanner mechanism, because our
 lexer doesn't quite match the Lexer interface. */

Yylex jlexer;
public AstParser(Yylex jlexer) {
  super();
  this.jlexer = jlexer;
}

public void syntax_error(java_cup.runtime.Symbol current) {} // override default message

public void unrecovered_syntax_error(java_cup.runtime.Symbol current) throws ParseError {
  report_fatal_error("Parse Syntax error at charPos: "+current.left, current);
}

public void report_fatal_error(String message, java_cup.runtime.Symbol info) throws ParseError {
 done_parsing();
 throw new ParseError(message);
}


}

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




  private final AstParser parser;

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

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

      /* select the action based on the action number */
      switch (CUP$AstParser$act_num)
        {
          /*. . . . . . . . . . . . . . . . . . . .*/
          case 43: // arithseq ::= LSQBRA expr COMMA expr DOUBLEDOT expr RSQBRA 
            {
              Ast.ArithSeq RESULT = null;
		int e1left = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-5)).left;
		int e1right = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-5)).right;
		Ast.Expr e1 = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-5)).value;
		int e2left = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-3)).left;
		int e2right = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-3)).right;
		Ast.Expr e2 = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-3)).value;
		int e3left = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).left;
		int e3right = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).right;
		Ast.Expr e3 = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).value;
		 RESULT = new Ast.ArithSeq(e1, e2, e3); 
              CUP$AstParser$result = new java_cup.runtime.Symbol(15/*arithseq*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-6)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 42: // arithseq ::= LSQBRA expr DOUBLEDOT expr RSQBRA 
            {
              Ast.ArithSeq RESULT = null;
		int e1left = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-3)).left;
		int e1right = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-3)).right;
		Ast.Expr e1 = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-3)).value;
		int e3left = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).left;
		int e3right = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).right;
		Ast.Expr e3 = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).value;
		 RESULT = new Ast.ArithSeq(e1, null, e3); 
              CUP$AstParser$result = new java_cup.runtime.Symbol(15/*arithseq*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-4)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 41: // arithseq ::= LSQBRA expr COMMA expr DOUBLEDOT RSQBRA 
            {
              Ast.ArithSeq RESULT = null;
		int e1left = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-4)).left;
		int e1right = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-4)).right;
		Ast.Expr e1 = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-4)).value;
		int e2left = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).left;
		int e2right = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).right;
		Ast.Expr e2 = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).value;
		 RESULT = new Ast.ArithSeq(e1, e2, null); 
              CUP$AstParser$result = new java_cup.runtime.Symbol(15/*arithseq*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-5)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 40: // arithseq ::= LSQBRA expr DOUBLEDOT RSQBRA 
            {
              Ast.ArithSeq RESULT = null;
		int e1left = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).left;
		int e1right = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).right;
		Ast.Expr e1 = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).value;
		 RESULT = new Ast.ArithSeq(e1, null, null); 
              CUP$AstParser$result = new java_cup.runtime.Symbol(15/*arithseq*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-3)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 39: // listlisting ::= expr COMMA listlisting 
            {
              Vector RESULT = null;
		int eleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).left;
		int eright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).right;
		Ast.Expr e = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).value;
		int lleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int lright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		Vector l = (Vector)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		 
                             l.insertElementAt(e,0);
                             RESULT = l;
			    
              CUP$AstParser$result = new java_cup.runtime.Symbol(14/*listlisting*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 38: // listlisting ::= expr 
            {
              Vector RESULT = null;
		int eleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int eright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		Ast.Expr e = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		 
			     Vector v = new Vector();
                             v.add(e);
                             RESULT = v;
			    
              CUP$AstParser$result = new java_cup.runtime.Symbol(14/*listlisting*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 37: // list ::= LSQBRA RSQBRA 
            {
              Ast.List RESULT = null;
		 RESULT = new Ast.List(new Vector()); 
              CUP$AstParser$result = new java_cup.runtime.Symbol(13/*list*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 36: // list ::= LSQBRA listlisting RSQBRA 
            {
              Ast.List RESULT = null;
		int lleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).left;
		int lright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).right;
		Vector l = (Vector)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).value;
		 RESULT = new Ast.List(l); 
              CUP$AstParser$result = new java_cup.runtime.Symbol(13/*list*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 35: // tuplelisting ::= expr COMMA tuplelisting 
            {
              Vector RESULT = null;
		int eleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).left;
		int eright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).right;
		Ast.Expr e = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).value;
		int lleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int lright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		Vector l = (Vector)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		 
                             l.insertElementAt(e,0);
                             RESULT = l;
			    
              CUP$AstParser$result = new java_cup.runtime.Symbol(12/*tuplelisting*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 34: // tuplelisting ::= expr 
            {
              Vector RESULT = null;
		int eleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int eright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		Ast.Expr e = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		 
			     Vector v = new Vector();
                             v.add(e);
                             RESULT = v;
			    
              CUP$AstParser$result = new java_cup.runtime.Symbol(12/*tuplelisting*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 33: // tuple ::= LPAREN RPAREN 
            {
              Ast.Tuple RESULT = null;
		 RESULT = new Ast.Tuple(new Vector()); 
              CUP$AstParser$result = new java_cup.runtime.Symbol(11/*tuple*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 32: // tuple ::= LPAREN expr COMMA tuplelisting RPAREN 
            {
              Ast.Tuple RESULT = null;
		int eleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-3)).left;
		int eright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-3)).right;
		Ast.Expr e = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-3)).value;
		int lleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).left;
		int lright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).right;
		Vector l = (Vector)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).value;
		 
			     l.insertElementAt(e,0);
			     RESULT = new Ast.Tuple(l);
			    
              CUP$AstParser$result = new java_cup.runtime.Symbol(11/*tuple*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-4)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 31: // literal ::= FLOAT 
            {
              Ast.Literal RESULT = null;
		int fleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int fright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		Float f = (Float)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		 RESULT = new Ast.FloatLit(f.floatValue()); 
              CUP$AstParser$result = new java_cup.runtime.Symbol(10/*literal*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 30: // literal ::= STRING 
            {
              Ast.Literal RESULT = null;
		int sleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int sright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		String s = (String)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		 RESULT = new Ast.StringLit(s); 
              CUP$AstParser$result = new java_cup.runtime.Symbol(10/*literal*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 29: // literal ::= CHAR 
            {
              Ast.Literal RESULT = null;
		int cleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int cright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		Character c = (Character)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		 RESULT = new Ast.CharLit(c.charValue()); 
              CUP$AstParser$result = new java_cup.runtime.Symbol(10/*literal*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 28: // literal ::= INTEGER 
            {
              Ast.Literal RESULT = null;
		int ileft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int iright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		Integer i = (Integer)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		 RESULT = new Ast.IntLit(i.intValue()); 
              CUP$AstParser$result = new java_cup.runtime.Symbol(10/*literal*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 27: // basicexpr ::= LPAREN INFIXID expr RPAREN 
            {
              Ast.BasicExpr RESULT = null;
		int idleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).left;
		int idright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).right;
		String id = (String)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).value;
		int eleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).left;
		int eright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).right;
		Ast.Expr e = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).value;
		 
                             RESULT = new Ast.RightSection(id,e);
			    
              CUP$AstParser$result = new java_cup.runtime.Symbol(9/*basicexpr*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-3)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 26: // basicexpr ::= LPAREN expr MINUS RPAREN 
            {
              Ast.BasicExpr RESULT = null;
		int eleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).left;
		int eright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).right;
		Ast.Expr e = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).value;
		 
                             RESULT = new Ast.LeftSection(e,"-");
			    
              CUP$AstParser$result = new java_cup.runtime.Symbol(9/*basicexpr*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-3)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 25: // basicexpr ::= LPAREN expr INFIXID RPAREN 
            {
              Ast.BasicExpr RESULT = null;
		int eleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).left;
		int eright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).right;
		Ast.Expr e = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).value;
		int idleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).left;
		int idright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).right;
		String id = (String)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).value;
		 
                             RESULT = new Ast.LeftSection(e,id);
			    
              CUP$AstParser$result = new java_cup.runtime.Symbol(9/*basicexpr*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-3)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 24: // basicexpr ::= arithseq 
            {
              Ast.BasicExpr RESULT = null;
		int sleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int sright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		Ast.ArithSeq s = (Ast.ArithSeq)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		 RESULT = s; 
              CUP$AstParser$result = new java_cup.runtime.Symbol(9/*basicexpr*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 23: // basicexpr ::= list 
            {
              Ast.BasicExpr RESULT = null;
		int lleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int lright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		Ast.List l = (Ast.List)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		 RESULT = l; 
              CUP$AstParser$result = new java_cup.runtime.Symbol(9/*basicexpr*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 22: // basicexpr ::= tuple 
            {
              Ast.BasicExpr RESULT = null;
		int tleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int tright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		Ast.Tuple t = (Ast.Tuple)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		 RESULT = t; 
              CUP$AstParser$result = new java_cup.runtime.Symbol(9/*basicexpr*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 21: // basicexpr ::= LPAREN expr RPAREN 
            {
              Ast.BasicExpr RESULT = null;
		int eleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).left;
		int eright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).right;
		Ast.Expr e = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).value;
		 RESULT = new Ast.ParenExpr(e); 
              CUP$AstParser$result = new java_cup.runtime.Symbol(9/*basicexpr*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 20: // basicexpr ::= literal 
            {
              Ast.BasicExpr RESULT = null;
		int lleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int lright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		Ast.Literal l = (Ast.Literal)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		 RESULT = l; 
              CUP$AstParser$result = new java_cup.runtime.Symbol(9/*basicexpr*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 19: // basicexpr ::= LPAREN MINUS RPAREN 
            {
              Ast.BasicExpr RESULT = null;
		 RESULT = new Ast.InfixId("-"); 
              CUP$AstParser$result = new java_cup.runtime.Symbol(9/*basicexpr*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 18: // basicexpr ::= LPAREN INFIXID RPAREN 
            {
              Ast.BasicExpr RESULT = null;
		int idleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).left;
		int idright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).right;
		String id = (String)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).value;
		 RESULT = new Ast.InfixId(id); 
              CUP$AstParser$result = new java_cup.runtime.Symbol(9/*basicexpr*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 17: // basicexpr ::= PREFIXID 
            {
              Ast.BasicExpr RESULT = null;
		int idleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int idright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		String id = (String)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		 RESULT = new Ast.PrefixId(id); 
              CUP$AstParser$result = new java_cup.runtime.Symbol(9/*basicexpr*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 16: // uminus ::= MINUS expr 
            {
              Ast.Uminus RESULT = null;
		int eleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int eright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		Ast.Expr e = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		 RESULT = new Ast.Uminus(e); 
              CUP$AstParser$result = new java_cup.runtime.Symbol(8/*uminus*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 15: // functexpr ::= basicexpr 
            {
              Ast.FunctionExpr RESULT = null;
		int eleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int eright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		Ast.BasicExpr e = (Ast.BasicExpr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		 
			     Vector bv = new Vector();
			     bv.add(e);
                             RESULT = new Ast.FunctionExpr(bv);
			    
              CUP$AstParser$result = new java_cup.runtime.Symbol(7/*functexpr*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 14: // functexpr ::= functexpr basicexpr 
            {
              Ast.FunctionExpr RESULT = null;
		int fleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).left;
		int fright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).right;
		Ast.FunctionExpr f = (Ast.FunctionExpr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).value;
		int bleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int bright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		Ast.BasicExpr b = (Ast.BasicExpr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		 
			     Vector basics = f.basics;
			     basics.add(b);
                             RESULT = f;
			    
              CUP$AstParser$result = new java_cup.runtime.Symbol(7/*functexpr*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 13: // infixop ::= expr MINUS expr 
            {
              Ast.InfixOperation RESULT = null;
		int e1left = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).left;
		int e1right = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).right;
		Ast.Expr e1 = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).value;
		int e2left = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int e2right = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		Ast.Expr e2 = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		 
                             Ast.InfixOperation returnObj = null;
                             if (e1 instanceof Ast.InfixOperation)
				 returnObj = ((Ast.InfixOperation)e1).reconstruct("-",e2);
                             else
                                 returnObj = new Ast.InfixOperation(e1,"-",e2);
                             RESULT = returnObj;
			    
              CUP$AstParser$result = new java_cup.runtime.Symbol(6/*infixop*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 12: // infixop ::= expr BACKQUOTE PREFIXID BACKQUOTE expr 
            {
              Ast.InfixOperation RESULT = null;
		int e1left = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-4)).left;
		int e1right = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-4)).right;
		Ast.Expr e1 = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-4)).value;
		int idleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).left;
		int idright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).right;
		String id = (String)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).value;
		int e2left = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int e2right = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		Ast.Expr e2 = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		
                             Ast.InfixOperation returnObj = null;
                             if (e1 instanceof Ast.InfixOperation)
                                 returnObj = ((Ast.InfixOperation)e1).reconstruct(id,e2);
                             else
                                 returnObj = new Ast.InfixOperation(e1,id,e2);
                             RESULT = returnObj;
                            
              CUP$AstParser$result = new java_cup.runtime.Symbol(6/*infixop*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-4)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 11: // infixop ::= expr INFIXID expr 
            {
              Ast.InfixOperation RESULT = null;
		int e1left = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).left;
		int e1right = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).right;
		Ast.Expr e1 = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).value;
		int idleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).left;
		int idright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).right;
		String id = (String)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).value;
		int e2left = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int e2right = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		Ast.Expr e2 = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		 
                             Ast.InfixOperation returnObj = null;
                             if (e1 instanceof Ast.InfixOperation)
				 returnObj = ((Ast.InfixOperation)e1).reconstruct(id,e2);
                             else
                                 returnObj = new Ast.InfixOperation(e1,id,e2);
                             RESULT = returnObj;
			    
              CUP$AstParser$result = new java_cup.runtime.Symbol(6/*infixop*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 10: // ifexpr ::= IF expr THEN expr ELSE expr 
            {
              Ast.IfExpr RESULT = null;
		int e1left = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-4)).left;
		int e1right = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-4)).right;
		Ast.Expr e1 = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-4)).value;
		int e2left = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).left;
		int e2right = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).right;
		Ast.Expr e2 = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).value;
		int e3left = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int e3right = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		Ast.Expr e3 = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		 RESULT = new Ast.IfExpr(e1,e2,e3); 
              CUP$AstParser$result = new java_cup.runtime.Symbol(5/*ifexpr*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-5)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 9: // expr ::= uminus 
            {
              Ast.Expr RESULT = null;
		int eleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int eright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		Ast.Uminus e = (Ast.Uminus)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		 RESULT = e; 
              CUP$AstParser$result = new java_cup.runtime.Symbol(4/*expr*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 8: // expr ::= functexpr 
            {
              Ast.Expr RESULT = null;
		int eleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int eright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		Ast.FunctionExpr e = (Ast.FunctionExpr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		 RESULT = e; 
              CUP$AstParser$result = new java_cup.runtime.Symbol(4/*expr*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 7: // expr ::= infixop 
            {
              Ast.Expr RESULT = null;
		int eleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int eright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		Ast.InfixOperation e = (Ast.InfixOperation)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		 RESULT = e; 
              CUP$AstParser$result = new java_cup.runtime.Symbol(4/*expr*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 6: // expr ::= ifexpr 
            {
              Ast.Expr RESULT = null;
		int eleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int eright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		Ast.IfExpr e = (Ast.IfExpr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		 RESULT = e; 
              CUP$AstParser$result = new java_cup.runtime.Symbol(4/*expr*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 5: // variablelist ::= PREFIXID COMMA variablelist 
            {
              Vector RESULT = null;
		int idleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).left;
		int idright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).right;
		String id = (String)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).value;
		int lleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int lright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		Vector l = (Vector)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		 
                             l.insertElementAt(id,0);
                             RESULT = l;
			    
              CUP$AstParser$result = new java_cup.runtime.Symbol(3/*variablelist*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 4: // variablelist ::= PREFIXID 
            {
              Vector RESULT = null;
		int idleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int idright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		String id = (String)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		 
			     Vector v = new Vector();
                             v.add(id);
                             RESULT = v;
			    
              CUP$AstParser$result = new java_cup.runtime.Symbol(3/*variablelist*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 3: // wheretail ::= WHERE variablelist FREE 
            {
              Ast.WhereTail RESULT = null;
		int lleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).left;
		int lright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).right;
		Vector l = (Vector)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).value;
		 RESULT = new Ast.WhereTail(l); 
              CUP$AstParser$result = new java_cup.runtime.Symbol(2/*wheretail*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-2)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 2: // wheretail ::= 
            {
              Ast.WhereTail RESULT = null;
		 RESULT = new Ast.WhereTail(new Vector()); 
              CUP$AstParser$result = new java_cup.runtime.Symbol(2/*wheretail*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

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

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 0: // term ::= expr wheretail 
            {
              Ast.Term RESULT = null;
		int eleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).left;
		int eright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).right;
		Ast.Expr e = (Ast.Expr)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).value;
		int wleft = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).left;
		int wright = ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right;
		Ast.WhereTail w = (Ast.WhereTail)((java_cup.runtime.Symbol) CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).value;
		 RESULT = new Ast.Term(e, w); 
              CUP$AstParser$result = new java_cup.runtime.Symbol(1/*term*/, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-1)).left, ((java_cup.runtime.Symbol)CUP$AstParser$stack.elementAt(CUP$AstParser$top-0)).right, RESULT);
            }
          return CUP$AstParser$result;

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

        }
    }
}


