
//----------------------------------------------------
// The following code was generated by CUP v0.10k
// Sun Mar 28 15:40:22 CEST 2021
//----------------------------------------------------

package org.acplt.oncrpc.apps.jrpcgen;

import org.acplt.oncrpc.apps.jrpcgen.cup_runtime.*;
import java.util.Vector;

/** CUP v0.10k generated parser.
  * @version Sun Mar 28 15:40:22 CEST 2021
  */
public class JrpcgenParser extends lr_parser {

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

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

  /** Production table. */
  protected static final short _production_table[][] = 
    unpackFromStrings(new String[] {
    "\000\115\000\002\002\004\000\002\003\003\000\002\035" +
    "\003\000\002\035\002\000\002\004\004\000\002\004\005" +
    "\000\002\005\003\000\002\005\003\000\002\005\003\000" +
    "\002\005\003\000\002\005\003\000\002\005\003\000\002" +
    "\006\007\000\002\007\010\000\002\010\003\000\002\010" +
    "\005\000\002\011\004\000\002\011\006\000\002\012\010" +
    "\000\002\013\014\000\002\014\003\000\002\014\004\000" +
    "\002\015\005\000\002\015\007\000\002\015\006\000\002" +
    "\016\005\000\002\017\012\000\002\020\003\000\002\020" +
    "\004\000\002\021\012\000\002\022\003\000\002\022\004" +
    "\000\002\023\013\000\002\024\003\000\002\024\003\000" +
    "\002\025\003\000\002\025\004\000\002\025\005\000\002" +
    "\025\006\000\002\026\003\000\002\026\003\000\002\027" +
    "\003\000\002\027\003\000\002\030\003\000\002\030\003" +
    "\000\002\030\004\000\002\030\003\000\002\030\003\000" +
    "\002\030\003\000\002\030\003\000\002\030\003\000\002" +
    "\030\004\000\002\030\004\000\002\030\004\000\002\031" +
    "\005\000\002\031\006\000\002\032\007\000\002\032\007" +
    "\000\002\032\006\000\002\032\007\000\002\032\006\000" +
    "\002\032\004\000\002\032\007\000\002\032\007\000\002" +
    "\032\006\000\002\032\005\000\002\032\003\000\002\033" +
    "\004\000\002\033\003\000\002\033\003\000\002\033\003" +
    "\000\002\033\004\000\002\033\003\000\002\033\003\000" +
    "\002\033\004\000\002\034\003\000\002\034\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\240\000\020\021\ufffe\023\ufffe\024\ufffe\042\ufffe\045" +
    "\ufffe\046\ufffe\052\007\001\002\000\016\021\013\023\026" +
    "\024\023\042\012\045\020\046\017\001\002\000\022\002" +
    "\000\021\ufffe\023\ufffe\024\ufffe\042\ufffe\045\ufffe\046\ufffe" +
    "\052\007\001\002\000\004\002\010\001\002\000\052\021" +
    "\uffff\023\uffff\024\uffff\030\uffff\031\uffff\032\uffff\033\uffff" +
    "\034\uffff\035\uffff\036\uffff\037\uffff\040\uffff\041\uffff\042" +
    "\uffff\043\uffff\044\uffff\045\uffff\046\uffff\047\uffff\051\uffff" +
    "\001\002\000\004\002\001\001\002\000\016\021\013\023" +
    "\026\024\023\042\012\045\020\046\017\001\002\000\004" +
    "\051\226\001\002\000\004\051\157\001\002\000\022\002" +
    "\ufff9\021\ufff9\023\ufff9\024\ufff9\042\ufff9\045\ufff9\046\ufff9" +
    "\052\ufff9\001\002\000\022\002\ufffc\021\ufffc\023\ufffc\024" +
    "\ufffc\042\ufffc\045\ufffc\046\ufffc\052\ufffc\001\002\000\022" +
    "\002\ufffb\021\ufffb\023\ufffb\024\ufffb\042\ufffb\045\ufffb\046" +
    "\ufffb\052\ufffb\001\002\000\004\051\133\001\002\000\004" +
    "\051\120\001\002\000\022\002\ufff7\021\ufff7\023\ufff7\024" +
    "\ufff7\042\ufff7\045\ufff7\046\ufff7\052\ufff7\001\002\000\022" +
    "\002\ufffa\021\ufffa\023\ufffa\024\ufffa\042\ufffa\045\ufffa\046" +
    "\ufffa\052\ufffa\001\002\000\044\030\056\031\042\032\052" +
    "\033\041\034\036\035\047\036\046\037\057\040\053\041" +
    "\054\042\051\043\055\044\045\045\040\046\050\047\044" +
    "\051\043\001\002\000\022\002\ufff6\021\ufff6\023\ufff6\024" +
    "\ufff6\042\ufff6\045\ufff6\046\ufff6\052\ufff6\001\002\000\022" +
    "\002\ufff8\021\ufff8\023\ufff8\024\ufff8\042\ufff8\045\ufff8\046" +
    "\ufff8\052\ufff8\001\002\000\004\051\027\001\002\000\004" +
    "\007\030\001\002\000\006\050\031\051\032\001\002\000" +
    "\016\004\uffb6\005\uffb6\006\uffb6\014\uffb6\016\uffb6\020\uffb6" +
    "\001\002\000\016\004\uffb5\005\uffb5\006\uffb5\014\uffb5\016" +
    "\uffb5\020\uffb5\001\002\000\004\004\034\001\002\000\022" +
    "\002\ufff5\021\ufff5\023\ufff5\024\ufff5\042\ufff5\045\ufff5\046" +
    "\ufff5\052\ufff5\001\002\000\004\004\117\001\002\000\014" +
    "\005\uffb9\010\uffb9\012\uffb9\033\116\051\uffb9\001\002\000" +
    "\006\010\104\051\105\001\002\000\004\051\103\001\002" +
    "\000\012\005\uffbb\010\uffbb\012\uffbb\051\uffbb\001\002\000" +
    "\012\005\uffbc\010\uffbc\012\uffbc\051\uffbc\001\002\000\012" +
    "\005\uffd6\010\uffd6\012\uffd6\051\uffd6\001\002\000\024\005" +
    "\uffd2\010\uffd2\012\uffd2\031\042\032\052\033\041\034\036" +
    "\035\047\051\uffd2\001\002\000\004\051\075\001\002\000" +
    "\012\005\uffd1\010\uffd1\012\uffd1\051\uffd1\001\002\000\014" +
    "\005\uffb8\010\uffb8\012\uffb8\033\074\051\uffb8\001\002\000" +
    "\004\051\073\001\002\000\004\051\072\001\002\000\014" +
    "\005\uffbd\010\uffbd\012\uffbd\033\071\051\uffbd\001\002\000" +
    "\012\005\uffcf\010\uffcf\012\uffcf\051\uffcf\001\002\000\012" +
    "\005\uffd5\010\uffd5\012\uffd5\051\uffd5\001\002\000\004\051" +
    "\061\001\002\000\006\004\uffbf\012\uffbf\001\002\000\012" +
    "\005\uffd0\010\uffd0\012\uffd0\051\uffd0\001\002\000\012\005" +
    "\uffd3\010\uffd3\012\uffd3\051\uffd3\001\002\000\006\015\063" +
    "\017\062\001\002\000\010\020\066\050\031\051\032\001" +
    "\002\000\006\050\031\051\032\001\002\000\004\016\065" +
    "\001\002\000\006\004\uffc9\012\uffc9\001\002\000\006\004" +
    "\uffc7\012\uffc7\001\002\000\004\020\070\001\002\000\006" +
    "\004\uffc8\012\uffc8\001\002\000\012\005\uffbe\010\uffbe\012" +
    "\uffbe\051\uffbe\001\002\000\012\005\uffce\010\uffce\012\uffce" +
    "\051\uffce\001\002\000\012\005\uffcc\010\uffcc\012\uffcc\051" +
    "\uffcc\001\002\000\012\005\uffb7\010\uffb7\012\uffb7\051\uffb7" +
    "\001\002\000\004\017\076\001\002\000\010\020\077\050" +
    "\031\051\032\001\002\000\006\004\uffc5\012\uffc5\001\002" +
    "\000\004\020\101\001\002\000\006\004\uffc6\012\uffc6\001" +
    "\002\000\012\005\uffd4\010\uffd4\012\uffd4\051\uffd4\001\002" +
    "\000\012\005\uffcd\010\uffcd\012\uffcd\051\uffcd\001\002\000" +
    "\004\051\115\001\002\000\012\004\uffc4\012\uffc4\015\107" +
    "\017\106\001\002\000\010\020\112\050\031\051\032\001" +
    "\002\000\006\050\031\051\032\001\002\000\004\016\111" +
    "\001\002\000\006\004\uffc3\012\uffc3\001\002\000\006\004" +
    "\uffc1\012\uffc1\001\002\000\004\020\114\001\002\000\006" +
    "\004\uffc2\012\uffc2\001\002\000\006\004\uffc0\012\uffc0\001" +
    "\002\000\012\005\uffba\010\uffba\012\uffba\051\uffba\001\002" +
    "\000\022\002\uffe8\021\uffe8\023\uffe8\024\uffe8\042\uffe8\045" +
    "\uffe8\046\uffe8\052\uffe8\001\002\000\004\013\121\001\002" +
    "\000\046\030\ufffe\031\ufffe\032\ufffe\033\ufffe\034\ufffe\035" +
    "\ufffe\036\ufffe\037\ufffe\040\ufffe\041\ufffe\042\ufffe\043\ufffe" +
    "\044\ufffe\045\ufffe\046\ufffe\047\ufffe\051\ufffe\052\007\001" +
    "\002\000\044\030\056\031\042\032\052\033\041\034\036" +
    "\035\047\036\046\037\057\040\053\041\054\042\051\043" +
    "\055\044\045\045\040\046\050\047\044\051\043\001\002" +
    "\000\050\014\125\030\ufffe\031\ufffe\032\ufffe\033\ufffe\034" +
    "\ufffe\035\ufffe\036\ufffe\037\ufffe\040\ufffe\041\ufffe\042\ufffe" +
    "\043\ufffe\044\ufffe\045\ufffe\046\ufffe\047\ufffe\051\ufffe\052" +
    "\007\001\002\000\044\030\056\031\042\032\052\033\041" +
    "\034\036\035\047\036\046\037\057\040\053\041\054\042" +
    "\051\043\055\044\045\045\040\046\050\047\044\051\043" +
    "\001\002\000\004\004\126\001\002\000\022\002\uffef\021" +
    "\uffef\023\uffef\024\uffef\042\uffef\045\uffef\046\uffef\052\uffef" +
    "\001\002\000\004\004\130\001\002\000\050\014\uffca\030" +
    "\uffca\031\uffca\032\uffca\033\uffca\034\uffca\035\uffca\036\uffca" +
    "\037\uffca\040\uffca\041\uffca\042\uffca\043\uffca\044\uffca\045" +
    "\uffca\046\uffca\047\uffca\051\uffca\052\uffca\001\002\000\004" +
    "\004\132\001\002\000\050\014\uffcb\030\uffcb\031\uffcb\032" +
    "\uffcb\033\uffcb\034\uffcb\035\uffcb\036\uffcb\037\uffcb\040\uffcb" +
    "\041\uffcb\042\uffcb\043\uffcb\044\uffcb\045\uffcb\046\uffcb\047" +
    "\uffcb\051\uffcb\052\uffcb\001\002\000\004\025\134\001\002" +
    "\000\004\011\135\001\002\000\044\030\056\031\042\032" +
    "\052\033\041\034\036\035\047\036\046\037\057\040\053" +
    "\041\054\042\051\043\055\044\045\045\040\046\050\047" +
    "\044\051\043\001\002\000\004\012\137\001\002\000\004" +
    "\013\140\001\002\000\006\026\144\027\141\001\002\000" +
    "\004\006\154\001\002\000\010\014\uffed\026\uffed\027\uffed" +
    "\001\002\000\010\014\152\026\144\027\141\001\002\000" +
    "\006\050\031\051\032\001\002\000\004\006\146\001\002" +
    "\000\052\014\uffeb\026\uffeb\027\uffeb\030\056\031\042\032" +
    "\052\033\041\034\036\035\047\036\046\037\057\040\053" +
    "\041\054\042\051\043\055\044\045\045\040\046\050\047" +
    "\044\051\043\001\002\000\004\004\150\001\002\000\010" +
    "\014\uffea\026\uffea\027\uffea\001\002\000\010\014\uffec\026" +
    "\uffec\027\uffec\001\002\000\004\004\153\001\002\000\022" +
    "\002\uffee\021\uffee\023\uffee\024\uffee\042\uffee\045\uffee\046" +
    "\uffee\052\uffee\001\002\000\044\030\056\031\042\032\052" +
    "\033\041\034\036\035\047\036\046\037\057\040\053\041" +
    "\054\042\051\043\055\044\045\045\040\046\050\047\044" +
    "\051\043\001\002\000\004\004\156\001\002\000\010\014" +
    "\uffe9\026\uffe9\027\uffe9\001\002\000\004\013\160\001\002" +
    "\000\004\022\162\001\002\000\006\014\uffe6\022\uffe6\001" +
    "\002\000\004\051\171\001\002\000\006\014\165\022\162" +
    "\001\002\000\006\014\uffe5\022\uffe5\001\002\000\004\007" +
    "\166\001\002\000\006\050\031\051\032\001\002\000\004" +
    "\004\170\001\002\000\022\002\uffe7\021\uffe7\023\uffe7\024" +
    "\uffe7\042\uffe7\045\uffe7\046\uffe7\052\uffe7\001\002\000\004" +
    "\013\172\001\002\000\044\030\ufffe\031\ufffe\032\ufffe\033" +
    "\ufffe\034\ufffe\035\ufffe\036\ufffe\037\ufffe\040\ufffe\041\ufffe" +
    "\042\ufffe\044\ufffe\045\ufffe\046\ufffe\047\ufffe\051\ufffe\052" +
    "\007\001\002\000\046\014\uffe3\030\uffe3\031\uffe3\032\uffe3" +
    "\033\uffe3\034\uffe3\035\uffe3\036\uffe3\037\uffe3\040\uffe3\041" +
    "\uffe3\042\uffe3\044\uffe3\045\uffe3\046\uffe3\047\uffe3\051\uffe3" +
    "\052\uffe3\001\002\000\042\030\207\031\042\032\052\033" +
    "\041\034\036\035\047\036\046\037\057\040\053\041\054" +
    "\042\051\044\204\045\040\046\050\047\044\051\043\001" +
    "\002\000\046\014\177\030\ufffe\031\ufffe\032\ufffe\033\ufffe" +
    "\034\ufffe\035\ufffe\036\ufffe\037\ufffe\040\ufffe\041\ufffe\042" +
    "\ufffe\044\ufffe\045\ufffe\046\ufffe\047\ufffe\051\ufffe\052\007" +
    "\001\002\000\046\014\uffe2\030\uffe2\031\uffe2\032\uffe2\033" +
    "\uffe2\034\uffe2\035\uffe2\036\uffe2\037\uffe2\040\uffe2\041\uffe2" +
    "\042\uffe2\044\uffe2\045\uffe2\046\uffe2\047\uffe2\051\uffe2\052" +
    "\uffe2\001\002\000\004\007\200\001\002\000\006\050\031" +
    "\051\032\001\002\000\004\004\202\001\002\000\006\014" +
    "\uffe4\022\uffe4\001\002\000\010\005\uffd7\012\uffd7\051\uffd7" +
    "\001\002\000\010\005\uffd8\012\uffd8\051\uffd8\001\002\000" +
    "\004\051\210\001\002\000\004\051\uffd9\001\002\000\004" +
    "\051\uffda\001\002\000\004\011\211\001\002\000\042\030" +
    "\214\031\042\032\052\033\041\034\036\035\047\036\046" +
    "\037\057\040\053\041\054\042\051\044\204\045\040\046" +
    "\050\047\044\051\043\001\002\000\010\005\uffde\012\uffde" +
    "\051\225\001\002\000\006\005\uffdf\012\uffdf\001\002\000" +
    "\006\005\uffe0\012\uffe0\001\002\000\006\005\216\012\217" +
    "\001\002\000\040\031\042\032\052\033\041\034\036\035" +
    "\047\036\046\037\057\040\053\041\054\042\051\044\204" +
    "\045\040\046\050\047\044\051\043\001\002\000\004\007" +
    "\220\001\002\000\006\050\031\051\032\001\002\000\004" +
    "\004\222\001\002\000\046\014\uffe1\030\uffe1\031\uffe1\032" +
    "\uffe1\033\uffe1\034\uffe1\035\uffe1\036\uffe1\037\uffe1\040\uffe1" +
    "\041\uffe1\042\uffe1\044\uffe1\045\uffe1\046\uffe1\047\uffe1\051" +
    "\uffe1\052\uffe1\001\002\000\010\005\uffdc\012\uffdc\051\224" +
    "\001\002\000\006\005\uffdb\012\uffdb\001\002\000\006\005" +
    "\uffdd\012\uffdd\001\002\000\004\013\227\001\002\000\006" +
    "\051\ufffe\052\007\001\002\000\006\005\ufff3\014\ufff3\001" +
    "\002\000\006\005\236\014\237\001\002\000\004\051\233" +
    "\001\002\000\010\005\ufff1\007\234\014\ufff1\001\002\000" +
    "\006\050\031\051\032\001\002\000\006\005\ufff0\014\ufff0" +
    "\001\002\000\006\051\ufffe\052\007\001\002\000\004\004" +
    "\240\001\002\000\022\002\ufff4\021\ufff4\023\ufff4\024\ufff4" +
    "\042\ufff4\045\ufff4\046\ufff4\052\ufff4\001\002\000\006\005" +
    "\ufff2\014\ufff2\001\002\000\022\002\ufffd\021\ufffd\023\ufffd" +
    "\024\ufffd\042\ufffd\045\ufffd\046\ufffd\052\ufffd\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\240\000\010\003\005\004\004\035\003\001\001\000" +
    "\020\005\241\006\015\007\021\012\013\013\024\016\020" +
    "\017\023\001\001\000\004\035\010\001\001\000\002\001" +
    "\001\000\002\001\001\000\002\001\001\000\020\005\014" +
    "\006\015\007\021\012\013\013\024\016\020\017\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\002\001\001\000\010" +
    "\030\036\032\034\033\057\001\001\000\002\001\001\000" +
    "\002\001\001\000\002\001\001\000\002\001\001\000\004" +
    "\034\032\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\033\101" +
    "\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\034\066\001\001\000\004\034\063\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\034\077\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\034" +
    "\112\001\001\000\004\034\107\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\006\031\122\035\121\001" +
    "\001\000\010\030\036\032\130\033\057\001\001\000\004" +
    "\035\123\001\001\000\010\030\036\032\126\033\057\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\010\030\036\032\135" +
    "\033\057\001\001\000\002\001\001\000\002\001\001\000" +
    "\006\014\142\015\141\001\001\000\002\001\001\000\002" +
    "\001\001\000\004\015\150\001\001\000\004\034\144\001" +
    "\001\000\002\001\001\000\010\030\036\032\146\033\057" +
    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
    "\001\000\002\001\001\000\002\001\001\000\010\030\036" +
    "\032\154\033\057\001\001\000\002\001\001\000\002\001" +
    "\001\000\002\001\001\000\006\020\162\021\160\001\001" +
    "\000\002\001\001\000\002\001\001\000\004\021\163\001" +
    "\001\000\002\001\001\000\002\001\001\000\004\034\166" +
    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
    "\001\000\010\022\174\023\172\035\173\001\001\000\002" +
    "\001\001\000\012\026\204\027\205\030\202\033\057\001" +
    "\001\000\006\023\175\035\173\001\001\000\002\001\001" +
    "\000\002\001\001\000\004\034\200\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\014\024\214\025\212\027\211\030\202" +
    "\033\057\001\001\000\002\001\001\000\002\001\001\000" +
    "\002\001\001\000\002\001\001\000\010\027\222\030\202" +
    "\033\057\001\001\000\002\001\001\000\004\034\220\001" +
    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
    "\010\010\230\011\227\035\231\001\001\000\002\001\001" +
    "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
    "\004\034\234\001\001\000\002\001\001\000\006\011\240" +
    "\035\231\001\001\000\002\001\001\000\002\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$JrpcgenParser$actions action_obj;

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

  /** Invoke a user supplied parse action. */
  public Symbol do_action(
    int                        act_num,
    lr_parser parser,
    java.util.Stack            stack,
    int                        top)
    throws java.lang.Exception
  {
    /* call code in generated class */
    return action_obj.CUP$JrpcgenParser$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;}




	JrpcgenModule module;
	
	public void setModule(JrpcgenModule module) {
		this.module = module;
	}
	
    public void report_error(String message, Object info) {
        StringBuilder msg = new StringBuilder("jrpcgen: error");
        if (info instanceof Symbol) {
            Symbol s = (Symbol) info;
            msg.append(" in line ").append(s.left);
        }
        msg.append(": ").append(message);
        System.out.println(msg);
        throw(new JrpcgenParserException());
    }

    public void report_error(String message, int line) {
    	String msg = "jrpcgen: error in line " + line + ": " + message;
        System.out.println(msg);
        throw(new JrpcgenParserException());
    }

    public void syntax_error(Symbol cur_token) {
        String msg = "jrpcgen: syntax error in line " + cur_token.left;
        System.out.println(msg);
        throw(new JrpcgenParserException());
    }

    public void report_fatal_error(String message, Object info) {
        report_error(message, info);
        throw(new RuntimeException("Fatal Syntax Error"));
    }


}

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

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

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

      /* select the action based on the action number */
      switch (CUP$JrpcgenParser$act_num)
        {
          /*. . . . . . . . . . . . . . . . . . . .*/
          case 76: // value ::= IDENTIFIER 
            {
              String RESULT = null;
		int idleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int idright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		String id = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		 RESULT = id; 
              CUP$JrpcgenParser$result = new Symbol(26/*value*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 75: // value ::= INTEGER_LITERAL 
            {
              String RESULT = null;
		int litleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int litright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		String lit = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		 RESULT = lit; 
              CUP$JrpcgenParser$result = new Symbol(26/*value*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 74: // int_types ::= HYPER INT 
            {
              String RESULT = null;
		 RESULT = JrpcgenBaseType.HYPER.getDefinitionName(); 
              CUP$JrpcgenParser$result = new Symbol(25/*int_types*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 73: // int_types ::= HYPER 
            {
              String RESULT = null;
		 RESULT = JrpcgenBaseType.HYPER.getDefinitionName(); 
              CUP$JrpcgenParser$result = new Symbol(25/*int_types*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 72: // int_types ::= LONG 
            {
              String RESULT = null;
		 RESULT = JrpcgenBaseType.INT.getDefinitionName(); 
              CUP$JrpcgenParser$result = new Symbol(25/*int_types*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 71: // int_types ::= LONG INT 
            {
              String RESULT = null;
		 RESULT = JrpcgenBaseType.INT.getDefinitionName(); 
              CUP$JrpcgenParser$result = new Symbol(25/*int_types*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 70: // int_types ::= INT 
            {
              String RESULT = null;
		 RESULT = JrpcgenBaseType.INT.getDefinitionName(); 
              CUP$JrpcgenParser$result = new Symbol(25/*int_types*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 69: // int_types ::= CHAR 
            {
              String RESULT = null;
		 RESULT = JrpcgenBaseType.CHAR.getDefinitionName(); 
              CUP$JrpcgenParser$result = new Symbol(25/*int_types*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 68: // int_types ::= SHORT 
            {
              String RESULT = null;
		 RESULT = JrpcgenBaseType.SHORT.getDefinitionName(); 
              CUP$JrpcgenParser$result = new Symbol(25/*int_types*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 67: // int_types ::= SHORT INT 
            {
              String RESULT = null;
		 RESULT = JrpcgenBaseType.SHORT.getDefinitionName(); 
              CUP$JrpcgenParser$result = new Symbol(25/*int_types*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 66: // declaration ::= VOID 
            {
              JrpcgenDeclaration RESULT = null;
		
                RESULT = parser.module.newVoidDeclaration();
            
              CUP$JrpcgenParser$result = new Symbol(24/*declaration*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 65: // declaration ::= type_specifier STAR IDENTIFIER 
            {
              JrpcgenDeclaration RESULT = null;
		int typeleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).left;
		int typeright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).right;
		String type = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).value;
		int idleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int idright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		String id = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		
                RESULT = parser.module.newIndirectionDeclaration(id, type);
            
              CUP$JrpcgenParser$result = new Symbol(24/*declaration*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 64: // declaration ::= type_specifier IDENTIFIER LANGLE RANGLE 
            {
              JrpcgenDeclaration RESULT = null;
		int typeleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).left;
		int typeright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).right;
		String type = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).value;
		int idleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).left;
		int idright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).right;
		String id = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).value;
		
                RESULT = parser.module.newDynamicVectorDeclaration(id, type, null);
            
              CUP$JrpcgenParser$result = new Symbol(24/*declaration*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 63: // declaration ::= type_specifier IDENTIFIER LANGLE value RANGLE 
            {
              JrpcgenDeclaration RESULT = null;
		int typeleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).left;
		int typeright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).right;
		String type = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).value;
		int idleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).left;
		int idright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).right;
		String id = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).value;
		int sizeleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left;
		int sizeright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).right;
		String size = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).value;
		
                RESULT = parser.module.newDynamicVectorDeclaration(id, type, size);
            
              CUP$JrpcgenParser$result = new Symbol(24/*declaration*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 62: // declaration ::= type_specifier IDENTIFIER LBRACKET value RBRACKET 
            {
              JrpcgenDeclaration RESULT = null;
		int typeleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).left;
		int typeright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).right;
		String type = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).value;
		int idleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).left;
		int idright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).right;
		String id = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).value;
		int sizeleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left;
		int sizeright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).right;
		String size = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).value;
		
               RESULT = parser.module.newFixedVectorDeclaration(id, type, size);
            
              CUP$JrpcgenParser$result = new Symbol(24/*declaration*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 61: // declaration ::= type_specifier IDENTIFIER 
            {
              JrpcgenDeclaration RESULT = null;
		int typeleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left;
		int typeright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).right;
		String type = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).value;
		int idleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int idright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		String id = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		
               RESULT = parser.module.newScalarDeclaration(id, type);
            
              CUP$JrpcgenParser$result = new Symbol(24/*declaration*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 60: // declaration ::= STRING IDENTIFIER LANGLE RANGLE 
            {
              JrpcgenDeclaration RESULT = null;
		int idleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).left;
		int idright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).right;
		String id = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).value;
		
                RESULT = parser.module.newStringDeclaration(id, null);
            
              CUP$JrpcgenParser$result = new Symbol(24/*declaration*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 59: // declaration ::= STRING IDENTIFIER LANGLE value RANGLE 
            {
              JrpcgenDeclaration RESULT = null;
		int idleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).left;
		int idright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).right;
		String id = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).value;
		int sizeleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left;
		int sizeright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).right;
		String size = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).value;
		
                RESULT = parser.module.newStringDeclaration(id, size);
            
              CUP$JrpcgenParser$result = new Symbol(24/*declaration*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 58: // declaration ::= OPAQUE IDENTIFIER LANGLE RANGLE 
            {
              JrpcgenDeclaration RESULT = null;
		int idleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).left;
		int idright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).right;
		String id = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).value;
		
                // Note: we use the pseudo-type "opaque" here to distinguish
                // real byte arrays from fake byte (char) arrays.
                RESULT = parser.module.newOpaqueDeclaration(id, null);
            
              CUP$JrpcgenParser$result = new Symbol(24/*declaration*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 57: // declaration ::= OPAQUE IDENTIFIER LANGLE value RANGLE 
            {
              JrpcgenDeclaration RESULT = null;
		int idleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).left;
		int idright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).right;
		String id = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).value;
		int sizeleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left;
		int sizeright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).right;
		String size = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).value;
		
                // Note: we use the pseudo-type "opaque" here to distinguish
                // real byte arrays from fake byte (char) arrays.
                RESULT = parser.module.newOpaqueDeclaration(id, size);
            
              CUP$JrpcgenParser$result = new Symbol(24/*declaration*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 56: // declaration ::= OPAQUE IDENTIFIER LBRACKET value RBRACKET 
            {
              JrpcgenDeclaration RESULT = null;
		int idleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).left;
		int idright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).right;
		String id = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).value;
		int sizeleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left;
		int sizeright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).right;
		String size = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).value;
		
                // Note: we use the pseudo-type "opaque" here to distinguish
                // real byte arrays from fake byte (char) arrays.
                RESULT = parser.module.newFixedOpaqueDeclaration(id, size);
            
              CUP$JrpcgenParser$result = new Symbol(24/*declaration*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 55: // declarations ::= declarations javadoc declaration SEMICOLON 
            {
              JrpcgenDeclaration.Table RESULT = null;
		int declsleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).left;
		int declsright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).right;
		JrpcgenDeclaration.Table decls = (JrpcgenDeclaration.Table)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).value;
		int jdocleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).left;
		int jdocright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).right;
		String jdoc = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).value;
		int declleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left;
		int declright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).right;
		JrpcgenDeclaration decl = (JrpcgenDeclaration)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).value;
		
               decl.setDocumentation(jdoc);
               
               if (! decls.addItem(decl)) {
                   parser.report_error("struct identifier \"" + decl.getIdentifier() + "\" already defined", declleft);
               }
               RESULT = decls;
            
              CUP$JrpcgenParser$result = new Symbol(23/*declarations*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 54: // declarations ::= javadoc declaration SEMICOLON 
            {
              JrpcgenDeclaration.Table RESULT = null;
		int jdocleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).left;
		int jdocright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).right;
		String jdoc = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).value;
		int declleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left;
		int declright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).right;
		JrpcgenDeclaration decl = (JrpcgenDeclaration)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).value;
		
               decl.setDocumentation(jdoc);
               RESULT = new JrpcgenDeclaration.Table();
               RESULT.putItem(decl);
            
              CUP$JrpcgenParser$result = new Symbol(23/*declarations*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 53: // type_specifier ::= UNION IDENTIFIER 
            {
              String RESULT = null;
		int idleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int idright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		String id = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		 RESULT = id; 
              CUP$JrpcgenParser$result = new Symbol(22/*type_specifier*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 52: // type_specifier ::= STRUCT IDENTIFIER 
            {
              String RESULT = null;
		int idleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int idright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		String id = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		 RESULT = id; 
              CUP$JrpcgenParser$result = new Symbol(22/*type_specifier*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 51: // type_specifier ::= ENUM IDENTIFIER 
            {
              String RESULT = null;
		int idleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int idright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		String id = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		 RESULT = id; 
              CUP$JrpcgenParser$result = new Symbol(22/*type_specifier*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 50: // type_specifier ::= QUADRUPLE 
            {
              String RESULT = null;
		 RESULT = JrpcgenBaseType.DOUBLE.getDefinitionName(); 
              CUP$JrpcgenParser$result = new Symbol(22/*type_specifier*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 49: // type_specifier ::= DOUBLE 
            {
              String RESULT = null;
		 RESULT = JrpcgenBaseType.DOUBLE.getDefinitionName(); 
              CUP$JrpcgenParser$result = new Symbol(22/*type_specifier*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 48: // type_specifier ::= FLOAT 
            {
              String RESULT = null;
		 RESULT = JrpcgenBaseType.FLOAT.getDefinitionName(); 
              CUP$JrpcgenParser$result = new Symbol(22/*type_specifier*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 47: // type_specifier ::= UNSIGNED 
            {
              String RESULT = null;
		 RESULT = JrpcgenBaseType.INT.getDefinitionName(); 
              CUP$JrpcgenParser$result = new Symbol(22/*type_specifier*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 46: // type_specifier ::= int_types 
            {
              String RESULT = null;
		int typeleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int typeright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		String type = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		 RESULT = type; 
              CUP$JrpcgenParser$result = new Symbol(22/*type_specifier*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 45: // type_specifier ::= UNSIGNED int_types 
            {
              String RESULT = null;
		int typeleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int typeright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		String type = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		 RESULT = type; 
              CUP$JrpcgenParser$result = new Symbol(22/*type_specifier*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 44: // type_specifier ::= BOOL 
            {
              String RESULT = null;
		 RESULT = JrpcgenBaseType.BOOL.getDefinitionName(); 
              CUP$JrpcgenParser$result = new Symbol(22/*type_specifier*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 43: // type_specifier ::= IDENTIFIER 
            {
              String RESULT = null;
		int idleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int idright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		String id = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		 RESULT = id; 
              CUP$JrpcgenParser$result = new Symbol(22/*type_specifier*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 42: // type_specifier_incl_string ::= type_specifier 
            {
              String RESULT = null;
		int typeleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int typeright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		String type = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		 RESULT = type; 
              CUP$JrpcgenParser$result = new Symbol(21/*type_specifier_incl_string*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 41: // type_specifier_incl_string ::= STRING 
            {
              String RESULT = null;
		 RESULT = JrpcgenBaseType.STRING.getDefinitionName(); 
              CUP$JrpcgenParser$result = new Symbol(21/*type_specifier_incl_string*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 40: // type_specifier_incl_specials ::= type_specifier_incl_string 
            {
              String RESULT = null;
		int typeleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int typeright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		String type = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		 RESULT = type; 
              CUP$JrpcgenParser$result = new Symbol(20/*type_specifier_incl_specials*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 39: // type_specifier_incl_specials ::= VOID 
            {
              String RESULT = null;
		 RESULT = JrpcgenBaseType.VOID.getDefinitionName(); 
              CUP$JrpcgenParser$result = new Symbol(20/*type_specifier_incl_specials*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 38: // argument_list_no_void ::= argument_list COMMA type_specifier_incl_string IDENTIFIER 
            {
              JrpcgenParamInfo.Table RESULT = null;
		int argsleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).left;
		int argsright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).right;
		JrpcgenParamInfo.Table args = (JrpcgenParamInfo.Table)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).value;
		int paramTypeleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left;
		int paramTyperight = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).right;
		String paramType = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).value;
		int paramNameleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int paramNameright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		String paramName = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		
               if (! args.addItem(parser.module.newParamInfo(paramType, paramName))) {
                   parser.report_error("parameter identifier \"" + paramName + "\" already defined", paramNameleft);
               }
               
               RESULT = args;
            
              CUP$JrpcgenParser$result = new Symbol(19/*argument_list_no_void*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 37: // argument_list_no_void ::= argument_list COMMA type_specifier_incl_string 
            {
              JrpcgenParamInfo.Table RESULT = null;
		int argsleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).left;
		int argsright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).right;
		JrpcgenParamInfo.Table args = (JrpcgenParamInfo.Table)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).value;
		int paramTypeleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int paramTyperight = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		String paramType = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		            
               String paramName = "arg".concat(String.valueOf(args.size() + 1));
               
               if (! args.addItem(parser.module.newParamInfo(paramType, paramName))) {
                   parser.report_error("parameter identifier \"" + paramName + "\" already defined", paramTypeleft);
               }
               
               RESULT = args;
            
              CUP$JrpcgenParser$result = new Symbol(19/*argument_list_no_void*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 36: // argument_list_no_void ::= type_specifier_incl_string IDENTIFIER 
            {
              JrpcgenParamInfo.Table RESULT = null;
		int paramTypeleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left;
		int paramTyperight = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).right;
		String paramType = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).value;
		int paramNameleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int paramNameright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		String paramName = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		
               RESULT = new JrpcgenParamInfo.Table();
               RESULT.putItem(parser.module.newParamInfo(paramType, paramName));
            
              CUP$JrpcgenParser$result = new Symbol(19/*argument_list_no_void*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 35: // argument_list_no_void ::= type_specifier_incl_string 
            {
              JrpcgenParamInfo.Table RESULT = null;
		int paramTypeleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int paramTyperight = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		String paramType = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		
               RESULT = new JrpcgenParamInfo.Table();
               RESULT.putItem(parser.module.newParamInfo(paramType, "arg1"));
            
              CUP$JrpcgenParser$result = new Symbol(19/*argument_list_no_void*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 34: // argument_list ::= argument_list_no_void 
            {
              JrpcgenParamInfo.Table RESULT = null;
		int argsleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int argsright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		JrpcgenParamInfo.Table args = (JrpcgenParamInfo.Table)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		
               RESULT = args; // just pass through
            
              CUP$JrpcgenParser$result = new Symbol(18/*argument_list*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 33: // argument_list ::= VOID 
            {
              JrpcgenParamInfo.Table RESULT = null;
		
               RESULT = null; // special case, allows fast tests
            
              CUP$JrpcgenParser$result = new Symbol(18/*argument_list*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 32: // procedure_def ::= javadoc type_specifier_incl_specials IDENTIFIER LPAREN argument_list RPAREN EQUAL value SEMICOLON 
            {
              JrpcgenProcedureInfo RESULT = null;
		int jdocleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-8)).left;
		int jdocright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-8)).right;
		String jdoc = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-8)).value;
		int resultTypeleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-7)).left;
		int resultTyperight = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-7)).right;
		String resultType = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-7)).value;
		int procIdleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-6)).left;
		int procIdright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-6)).right;
		String procId = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-6)).value;
		int argsleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).left;
		int argsright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).right;
		JrpcgenParamInfo.Table args = (JrpcgenParamInfo.Table)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).value;
		int procNumberleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left;
		int procNumberright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).right;
		String procNumber = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).value;
		
               RESULT = parser.module.newProcedureInfo(jdoc, procId, procNumber, resultType, args);
               //
               // NOTE: we can not add the identifier for the procedure number
               // to the list of global identifiers yet, as we do not know the
               // version number. This has to be fixed after the embracing
               // version definition was parsed in toto.
               //
            
              CUP$JrpcgenParser$result = new Symbol(17/*procedure_def*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-8)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 31: // procedure_defs ::= procedure_defs procedure_def 
            {
              JrpcgenProcedureInfo.Table RESULT = null;
		int procsleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left;
		int procsright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).right;
		JrpcgenProcedureInfo.Table procs = (JrpcgenProcedureInfo.Table)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).value;
		int procleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int procright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		JrpcgenProcedureInfo proc = (JrpcgenProcedureInfo)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		
                //
                // Within a program version procedure names have to be unique.
                // Global uniqueness is required to the constants defined later
                // by concatenating the procedure name by the version number.
                //
                // As the version number is unknown at this stage, the procedure
                // name is checked against the so far given procedure names, ensuring
                // unique procedure names within a program version.
                //
                if (! procs.addItem(proc)) {
                 	parser.report_error("procedure identifier \"" + proc.procedureId + "\" already defined", procleft);
                }
                                
                RESULT = procs;
            
              CUP$JrpcgenParser$result = new Symbol(16/*procedure_defs*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 30: // procedure_defs ::= procedure_def 
            {
              JrpcgenProcedureInfo.Table RESULT = null;
		int procleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int procright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		JrpcgenProcedureInfo proc = (JrpcgenProcedureInfo)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		
            	JrpcgenProcedureInfo.Table procedures = new JrpcgenProcedureInfo.Table();
            	
            	procedures.putItem(proc);
                RESULT = procedures;
            
              CUP$JrpcgenParser$result = new Symbol(16/*procedure_defs*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 29: // version_def ::= VERSION IDENTIFIER LBRACE procedure_defs RBRACE EQUAL value SEMICOLON 
            {
              JrpcgenVersionInfo RESULT = null;
		int versIdleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-6)).left;
		int versIdright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-6)).right;
		String versId = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-6)).value;
		int procsleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).left;
		int procsright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).right;
		JrpcgenProcedureInfo.Table procs = (JrpcgenProcedureInfo.Table)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).value;
		int versNumberleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left;
		int versNumberright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).right;
		String versNumber = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).value;
		            
               //
               // Some work has to be done here.
               // First create a new version info instance. If the version number
               // is globally unique, an instance is returned and an attempt has been
               // made to resolve the version number.
               //
               JrpcgenProcedureInfo conflictingProcedureInfo;
               
               RESULT = parser.module.newVersionInfo(versId, versNumber, procs);
               
               if (RESULT == null) {
                   parser.report_error("version identifier \"" + versId + "\" already defined", versIdleft);
               }
               
               if (RESULT.resolvedVersionNumber == null) {
                   parser.report_error("Can not resolve version identifier \"" +
                                      versId + "\" to integer literal", versNumberleft);
               }
               
               conflictingProcedureInfo = RESULT.completeProcedureInfos();
               
               if (conflictingProcedureInfo != null) {
                   parser.report_error("procedure identifier \"" + conflictingProcedureInfo.procedureId + "\" already defined", 0);
               }
            
              CUP$JrpcgenParser$result = new Symbol(15/*version_def*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-7)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 28: // version_defs ::= version_defs version_def 
            {
              JrpcgenVersionInfo.Table RESULT = null;
		int versionsleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left;
		int versionsright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).right;
		JrpcgenVersionInfo.Table versions = (JrpcgenVersionInfo.Table)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).value;
		int versionleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int versionright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		JrpcgenVersionInfo version = (JrpcgenVersionInfo)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		
                if (! versions.addItem(version)) {
                	parser.report_error("version identifier \"" + version.versionId + "\" already defined", versionleft);
                }                
                
                RESULT = versions;
            
              CUP$JrpcgenParser$result = new Symbol(14/*version_defs*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 27: // version_defs ::= version_def 
            {
              JrpcgenVersionInfo.Table RESULT = null;
		int versionleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int versionright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		JrpcgenVersionInfo version = (JrpcgenVersionInfo)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		            
                JrpcgenVersionInfo.Table versions = new JrpcgenVersionInfo.Table();
                
                //
                // This is the first version. The returned boolean
                // is expected to be 'true' in any case.
                //
                versions.putItem(version);
                RESULT = versions;
            
              CUP$JrpcgenParser$result = new Symbol(14/*version_defs*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 26: // program_def ::= PROGRAM IDENTIFIER LBRACE version_defs RBRACE EQUAL value SEMICOLON 
            {
              JrpcgenProgramInfo RESULT = null;
		int progIdleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-6)).left;
		int progIdright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-6)).right;
		String progId = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-6)).value;
		int versionsleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).left;
		int versionsright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).right;
		JrpcgenVersionInfo.Table versions = (JrpcgenVersionInfo.Table)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).value;
		int progNumberleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left;
		int progNumberright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).right;
		String progNumber = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).value;
		
               RESULT = parser.module.addProgramInfo(progId, progNumber, versions);
               
               if (RESULT == null) {
                   parser.report_error("program identifier \"" + progId + "\" already defined", progIdleft);
               }
            
              CUP$JrpcgenParser$result = new Symbol(13/*program_def*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-7)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 25: // typedef_def ::= TYPEDEF declaration SEMICOLON 
            {
              JrpcgenTypedefinition RESULT = null;
		int declleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left;
		int declright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).right;
		JrpcgenDeclaration decl = (JrpcgenDeclaration)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).value;
		
               RESULT = parser.module.addTypedefinition(decl);
               
               if (RESULT == null) {
                   parser.report_error("typedef identifier \"" + decl.getIdentifier() + "\" already defined", declleft);
               }
            
              CUP$JrpcgenParser$result = new Symbol(12/*typedef_def*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 24: // union_case ::= DEFAULT COLON declaration SEMICOLON 
            {
              JrpcgenUnionArm RESULT = null;
		int elementleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left;
		int elementright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).right;
		JrpcgenDeclaration element = (JrpcgenDeclaration)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).value;
		
               RESULT = new JrpcgenUnionArm(null, element);
            
              CUP$JrpcgenParser$result = new Symbol(11/*union_case*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 23: // union_case ::= CASE value COLON declaration SEMICOLON 
            {
              JrpcgenUnionArm RESULT = null;
		int valleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).left;
		int valright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).right;
		String val = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).value;
		int elementleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left;
		int elementright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).right;
		JrpcgenDeclaration element = (JrpcgenDeclaration)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).value;
		
               RESULT = new JrpcgenUnionArm(val, element);
            
              CUP$JrpcgenParser$result = new Symbol(11/*union_case*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 22: // union_case ::= CASE value COLON 
            {
              JrpcgenUnionArm RESULT = null;
		int valleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left;
		int valright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).right;
		String val = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).value;
		
               RESULT = new JrpcgenUnionArm(val, null);
            
              CUP$JrpcgenParser$result = new Symbol(11/*union_case*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 21: // union_cases ::= union_cases union_case 
            {
              Vector RESULT = null;
		int armsleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left;
		int armsright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).right;
		Vector arms = (Vector)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).value;
		int armleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int armright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		JrpcgenUnionArm arm = (JrpcgenUnionArm)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		
                arms.addElement(arm);
                RESULT = arms;
            
              CUP$JrpcgenParser$result = new Symbol(10/*union_cases*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 20: // union_cases ::= union_case 
            {
              Vector RESULT = null;
		int armleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int armright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		JrpcgenUnionArm arm = (JrpcgenUnionArm)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		
                RESULT = new Vector<JrpcgenUnionArm>();
                RESULT.addElement(arm);
            
              CUP$JrpcgenParser$result = new Symbol(10/*union_cases*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 19: // union_def ::= UNION IDENTIFIER SWITCH LPAREN declaration RPAREN LBRACE union_cases RBRACE SEMICOLON 
            {
              JrpcgenDocumentable RESULT = null;
		int idleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-8)).left;
		int idright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-8)).right;
		String id = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-8)).value;
		int discrimleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-5)).left;
		int discrimright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-5)).right;
		JrpcgenDeclaration discrim = (JrpcgenDeclaration)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-5)).value;
		int elementsleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).left;
		int elementsright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).right;
		Vector elements = (Vector)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).value;
		
               RESULT = parser.module.addUnion(id, discrim, elements);
               
               if (RESULT == null) {
                   parser.report_error("union identifier \"" + id + "\" already defined", idleft);
               }
            
              CUP$JrpcgenParser$result = new Symbol(9/*union_def*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-9)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 18: // struct_def ::= STRUCT IDENTIFIER LBRACE declarations RBRACE SEMICOLON 
            {
              JrpcgenStruct RESULT = null;
		int idleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).left;
		int idright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).right;
		String id = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).value;
		int elementsleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).left;
		int elementsright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).right;
		JrpcgenDeclaration.Table elements = (JrpcgenDeclaration.Table)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).value;
		
               RESULT = parser.module.addStruct(id, elements);
               
               if (RESULT == null) {
                   parser.report_error("struct identifier \"" + id + "\" already defined", idleft);
               }
            
              CUP$JrpcgenParser$result = new Symbol(8/*struct_def*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-5)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 17: // enum_element ::= javadoc IDENTIFIER EQUAL value 
            {
              JrpcgenConst RESULT = null;
		int jdocleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).left;
		int jdocright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).right;
		String jdoc = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).value;
		int idleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).left;
		int idright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).right;
		String id = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).value;
		int valleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int valright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		String val = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		            
               RESULT = parser.module.addEnumerationElement(id, val);
               
               if (RESULT == null) {
                   parser.report_error("identifier \"" + id + "\" already defined", idleft);
               }
               
               RESULT.setDocumentation(jdoc);
            
              CUP$JrpcgenParser$result = new Symbol(7/*enum_element*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 16: // enum_element ::= javadoc IDENTIFIER 
            {
              JrpcgenConst RESULT = null;
		int jdocleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left;
		int jdocright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).right;
		String jdoc = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).value;
		int idleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int idright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		String id = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		
               //
               // We don't know yet the value, so we don't specify one. The
               // value will be fixed up when the production for the complete
               // enumeration triggers.
               //
               RESULT = parser.module.addEnumerationElement(id, null);
               
               if (RESULT == null) {
                   parser.report_error("identifier \"" + id + "\" already defined", idleft);
               }
               
               RESULT.setDocumentation(jdoc);
            
              CUP$JrpcgenParser$result = new Symbol(7/*enum_element*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 15: // enum_elements ::= enum_elements COMMA enum_element 
            {
              JrpcgenConst.Table RESULT = null;
		int elementsleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).left;
		int elementsright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).right;
		JrpcgenConst.Table elements = (JrpcgenConst.Table)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).value;
		int elleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int elright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		JrpcgenConst el = (JrpcgenConst)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		
               //
               // If no specific value has been assigned to this element of
               // an enumeration, increment value of previous element and
               // assign the new value to this element. BTW -- we let the
               // Java compiler do the calculation, so references to
               // other constants by name are valid.
               //
               if ( el.getValue() == null ) {
                   el.setValue(elements.getLastItem().getValue().concat("+1"));
               }
               elements.putItem(el);
               RESULT = elements;
            
              CUP$JrpcgenParser$result = new Symbol(6/*enum_elements*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 14: // enum_elements ::= enum_element 
            {
              JrpcgenConst.Table RESULT = null;
		int elleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int elright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		JrpcgenConst el = (JrpcgenConst)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		
               //
               // If no specific value has been assigned to this element of
               // an enumeration, assign zero by default.
               //
               if ( el.getValue() == null ) {
                   el.setValue("0");
               }
               RESULT = new JrpcgenConst.Table();
               RESULT.putItem(el);
            
              CUP$JrpcgenParser$result = new Symbol(6/*enum_elements*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 13: // enum_def ::= ENUM IDENTIFIER LBRACE enum_elements RBRACE SEMICOLON 
            {
              JrpcgenDocumentable RESULT = null;
		int idleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).left;
		int idright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).right;
		String id = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).value;
		int elementsleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).left;
		int elementsright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).right;
		JrpcgenConst.Table elements = (JrpcgenConst.Table)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).value;
		
               //
               // Create teh new enumeration and bind the
               // elements to the new enumeration.
               //
               RESULT = parser.module.addEnumeration(id, elements);

               if (RESULT == null) {
                   parser.report_error("enum identifier \"" + id + "\" already defined", idleft);
               }
            
              CUP$JrpcgenParser$result = new Symbol(5/*enum_def*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-5)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 12: // constant_def ::= CONST IDENTIFIER EQUAL value SEMICOLON 
            {
              JrpcgenDocumentable RESULT = null;
		int idleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).left;
		int idright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).right;
		String id = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-3)).value;
		int valueleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left;
		int valueright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).right;
		String value = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).value;
		           
               RESULT = parser.module.addConstant(id, value);
               
               if (RESULT == null) {
               		parser.report_error("const identifier \"" + id + "\" already defined", idleft);
               }
            
              CUP$JrpcgenParser$result = new Symbol(4/*constant_def*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-4)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 11: // definition ::= program_def 
            {
              JrpcgenDocumentable RESULT = null;
		int pdefleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int pdefright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		JrpcgenProgramInfo pdef = (JrpcgenProgramInfo)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		 RESULT=pdef; 
              CUP$JrpcgenParser$result = new Symbol(3/*definition*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 10: // definition ::= typedef_def 
            {
              JrpcgenDocumentable RESULT = null;
		int jdocleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int jdocright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		JrpcgenTypedefinition jdoc = (JrpcgenTypedefinition)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		 RESULT=jdoc; 
              CUP$JrpcgenParser$result = new Symbol(3/*definition*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 9: // definition ::= union_def 
            {
              JrpcgenDocumentable RESULT = null;
		int jdocleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int jdocright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		JrpcgenDocumentable jdoc = (JrpcgenDocumentable)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		 RESULT=jdoc; 
              CUP$JrpcgenParser$result = new Symbol(3/*definition*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 8: // definition ::= struct_def 
            {
              JrpcgenDocumentable RESULT = null;
		int jdocleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int jdocright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		JrpcgenStruct jdoc = (JrpcgenStruct)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		 RESULT=jdoc; 
              CUP$JrpcgenParser$result = new Symbol(3/*definition*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 7: // definition ::= enum_def 
            {
              JrpcgenDocumentable RESULT = null;
		int jdocleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int jdocright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		JrpcgenDocumentable jdoc = (JrpcgenDocumentable)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		 RESULT=jdoc; 
              CUP$JrpcgenParser$result = new Symbol(3/*definition*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 6: // definition ::= constant_def 
            {
              JrpcgenDocumentable RESULT = null;
		int jdocleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int jdocright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		JrpcgenDocumentable jdoc = (JrpcgenDocumentable)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		 RESULT=jdoc; 
              CUP$JrpcgenParser$result = new Symbol(3/*definition*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 5: // definitions ::= definitions javadoc definition 
            {
              Object RESULT = null;
		int jdocleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left;
		int jdocright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).right;
		String jdoc = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).value;
		int defleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int defright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		JrpcgenDocumentable def = (JrpcgenDocumentable)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		  /* add documentation */
        		def.setDocumentation(jdoc); 
        	
              CUP$JrpcgenParser$result = new Symbol(2/*definitions*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-2)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 4: // definitions ::= javadoc definition 
            {
              Object RESULT = null;
		int jdocleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left;
		int jdocright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).right;
		String jdoc = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).value;
		int defleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int defright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		JrpcgenDocumentable def = (JrpcgenDocumentable)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		  /* add documentation */
        		def.setDocumentation(jdoc); 
        	
              CUP$JrpcgenParser$result = new Symbol(2/*definitions*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-1)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 3: // javadoc ::= 
            {
              String RESULT = null;
		 RESULT = "/** TODO */"; 
              CUP$JrpcgenParser$result = new Symbol(27/*javadoc*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 2: // javadoc ::= JAVA_DOC_COMMENT 
            {
              String RESULT = null;
		int jdocleft = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left;
		int jdocright = ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right;
		String jdoc = (String)((Symbol) CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).value;
		 RESULT = jdoc; 
              CUP$JrpcgenParser$result = new Symbol(27/*javadoc*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 1: // compilation_unit ::= definitions 
            {
              Object RESULT = null;

              CUP$JrpcgenParser$result = new Symbol(1/*compilation_unit*/, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).left, ((Symbol)CUP$JrpcgenParser$stack.elementAt(CUP$JrpcgenParser$top-0)).right, RESULT);
            }
          return CUP$JrpcgenParser$result;

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

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

        }
    }
}

