Adding config file for sharing.
[iot2.git] / iotjava / iotpolicy / parser / Parser.java
index cc7af92..62b750d 100644 (file)
@@ -1,8 +1,8 @@
+package iotpolicy.parser;
 
 //----------------------------------------------------
 // The following code was generated by CUP v0.11b 20160615 (GIT 4ac7450)
 //----------------------------------------------------
-package iotpolicy.parser;
 
 import java_cup.runtime.ComplexSymbolFactory;
 import java_cup.runtime.ScannerBuffer;
@@ -39,15 +39,21 @@ public class Parser extends java_cup.runtime.lr_parser {
   /** Production table. */
   protected static final short _production_table[][] = 
     unpackFromStrings(new String[] {
-    "\000\033\000\002\002\003\000\002\002\004\000\002\002" +
-    "\003\000\002\003\011\000\002\004\004\000\002\004\002" +
-    "\000\002\005\011\000\002\005\011\000\002\006\004\000" +
-    "\002\006\002\000\002\007\005\000\002\007\004\000\002" +
-    "\007\005\000\002\007\004\000\002\010\004\000\002\010" +
-    "\002\000\002\011\007\000\002\012\004\000\002\012\002" +
-    "\000\002\013\006\000\002\013\006\000\002\014\004\000" +
-    "\002\014\002\000\002\015\012\000\002\016\003\000\002" +
-    "\016\005\000\002\016\002" });
+    "\000\060\000\002\002\003\000\002\002\004\000\002\002" +
+    "\003\000\002\003\013\000\002\004\004\000\002\004\002" +
+    "\000\002\005\011\000\002\005\011\000\002\005\014\000" +
+    "\002\005\014\000\002\006\004\000\002\006\002\000\002" +
+    "\007\005\000\002\007\004\000\002\007\005\000\002\007" +
+    "\004\000\002\007\007\000\002\007\007\000\002\007\010" +
+    "\000\002\007\010\000\002\011\004\000\002\011\002\000" +
+    "\002\012\007\000\002\013\004\000\002\013\002\000\002" +
+    "\014\006\000\002\014\006\000\002\015\004\000\002\015" +
+    "\002\000\002\016\012\000\002\017\003\000\002\017\005" +
+    "\000\002\017\002\000\002\020\004\000\002\020\002\000" +
+    "\002\021\007\000\002\022\004\000\002\022\002\000\002" +
+    "\023\004\000\002\023\003\000\002\024\004\000\002\024" +
+    "\002\000\002\025\007\000\002\026\004\000\002\026\002" +
+    "\000\002\027\005\000\002\027\005\000\002\027\010" });
 
   /** Access to production table. */
   public short[][] production_table() {return _production_table;}
@@ -55,43 +61,79 @@ public class Parser extends java_cup.runtime.lr_parser {
   /** Parse-action table. */
   protected static final short[][] _action_table = 
     unpackFromStrings(new String[] {
-    "\000\074\000\010\002\uffeb\013\006\020\uffeb\001\002\000" +
-    "\004\002\001\001\002\000\006\002\uffff\020\063\001\002" +
-    "\000\004\014\011\001\002\000\004\002\010\001\002\000" +
-    "\004\002\000\001\002\000\004\024\012\001\002\000\004" +
-    "\010\013\001\002\000\010\011\ufffc\013\ufffc\015\ufffc\001" +
-    "\002\000\010\011\ufff2\013\016\015\ufff2\001\002\000\010" +
-    "\011\ufffd\013\ufffd\015\ufffd\001\002\000\006\023\041\024" +
-    "\040\001\002\000\006\011\022\015\021\001\002\000\006" +
-    "\011\ufff3\015\ufff3\001\002\000\004\024\023\001\002\000" +
-    "\004\002\ufffe\001\002\000\004\010\024\001\002\000\010" +
-    "\011\uffef\016\uffef\017\uffef\001\002\000\010\011\030\016" +
-    "\027\017\031\001\002\000\010\011\ufff0\016\ufff0\017\ufff0" +
-    "\001\002\000\004\012\035\001\002\000\006\011\ufff1\015" +
-    "\ufff1\001\002\000\004\012\032\001\002\000\004\025\033" +
-    "\001\002\000\004\004\034\001\002\000\010\011\uffed\016" +
-    "\uffed\017\uffed\001\002\000\004\025\036\001\002\000\004" +
-    "\004\037\001\002\000\010\011\uffee\016\uffee\017\uffee\001" +
-    "\002\000\004\024\056\001\002\000\004\024\042\001\002" +
-    "\000\004\006\043\001\002\000\010\007\ufff8\023\ufff8\024" +
-    "\ufff8\001\002\000\010\007\047\023\050\024\045\001\002" +
-    "\000\004\024\054\001\002\000\010\007\ufff9\023\ufff9\024" +
-    "\ufff9\001\002\000\004\004\053\001\002\000\004\024\051" +
-    "\001\002\000\012\005\052\007\ufff6\023\ufff6\024\ufff6\001" +
-    "\002\000\010\007\ufff7\023\ufff7\024\ufff7\001\002\000\010" +
-    "\011\ufffb\013\ufffb\015\ufffb\001\002\000\012\005\055\007" +
-    "\ufff4\023\ufff4\024\ufff4\001\002\000\010\007\ufff5\023\ufff5" +
-    "\024\ufff5\001\002\000\004\006\057\001\002\000\010\007" +
-    "\ufff8\023\ufff8\024\ufff8\001\002\000\010\007\061\023\050" +
-    "\024\045\001\002\000\004\004\062\001\002\000\010\011" +
-    "\ufffa\013\ufffa\015\ufffa\001\002\000\004\024\065\001\002" +
-    "\000\006\002\uffec\020\uffec\001\002\000\004\021\066\001" +
-    "\002\000\010\005\uffe7\022\uffe7\024\070\001\002\000\006" +
-    "\005\071\022\072\001\002\000\006\005\uffe9\022\uffe9\001" +
-    "\002\000\004\024\076\001\002\000\004\014\073\001\002" +
-    "\000\004\024\074\001\002\000\004\004\075\001\002\000" +
-    "\006\002\uffea\020\uffea\001\002\000\006\005\uffe8\022\uffe8" +
-    "\001\002" });
+    "\000\161\000\010\002\uffe5\015\006\022\uffe5\001\002\000" +
+    "\004\002\001\001\002\000\006\002\uffff\022\150\001\002" +
+    "\000\004\016\011\001\002\000\004\002\010\001\002\000" +
+    "\004\002\000\001\002\000\004\030\012\001\002\000\004" +
+    "\012\013\001\002\000\014\013\ufffc\015\ufffc\017\ufffc\025" +
+    "\ufffc\026\ufffc\001\002\000\014\013\uffec\015\016\017\uffec" +
+    "\025\uffec\026\uffec\001\002\000\014\013\ufffd\015\ufffd\017" +
+    "\ufffd\025\ufffd\026\ufffd\001\002\000\006\027\076\030\075" +
+    "\001\002\000\012\013\uffdf\017\022\025\uffdf\026\uffdf\001" +
+    "\002\000\010\013\uffd8\025\042\026\uffd8\001\002\000\012" +
+    "\013\uffed\017\uffed\025\uffed\026\uffed\001\002\000\004\030" +
+    "\023\001\002\000\004\012\024\001\002\000\010\013\uffe9" +
+    "\020\uffe9\021\uffe9\001\002\000\010\013\030\020\027\021" +
+    "\031\001\002\000\010\013\uffea\020\uffea\021\uffea\001\002" +
+    "\000\004\014\035\001\002\000\012\013\uffeb\017\uffeb\025" +
+    "\uffeb\026\uffeb\001\002\000\004\014\032\001\002\000\004" +
+    "\031\033\001\002\000\004\004\034\001\002\000\010\013" +
+    "\uffe7\020\uffe7\021\uffe7\001\002\000\004\031\036\001\002" +
+    "\000\004\004\037\001\002\000\010\013\uffe8\020\uffe8\021" +
+    "\uffe8\001\002\000\006\013\054\026\053\001\002\000\010" +
+    "\013\uffe0\025\uffe0\026\uffe0\001\002\000\004\030\043\001" +
+    "\002\000\004\012\044\001\002\000\006\013\uffdc\030\uffdc" +
+    "\001\002\000\006\013\050\030\047\001\002\000\006\013" +
+    "\uffdd\030\uffdd\001\002\000\010\005\051\013\uffda\030\uffda" +
+    "\001\002\000\010\013\uffde\025\uffde\026\uffde\001\002\000" +
+    "\006\013\uffdb\030\uffdb\001\002\000\006\013\uffd9\026\uffd9" +
+    "\001\002\000\004\030\055\001\002\000\004\002\ufffe\001" +
+    "\002\000\004\012\056\001\002\000\010\013\uffd5\027\uffd5" +
+    "\030\uffd5\001\002\000\010\013\061\027\062\030\060\001" +
+    "\002\000\006\010\066\030\067\001\002\000\006\013\uffd7" +
+    "\026\uffd7\001\002\000\004\030\064\001\002\000\010\013" +
+    "\uffd6\027\uffd6\030\uffd6\001\002\000\004\004\065\001\002" +
+    "\000\010\013\uffd4\027\uffd4\030\uffd4\001\002\000\004\030" +
+    "\071\001\002\000\004\004\070\001\002\000\010\013\uffd3" +
+    "\027\uffd3\030\uffd3\001\002\000\004\011\072\001\002\000" +
+    "\004\030\073\001\002\000\004\004\074\001\002\000\010" +
+    "\013\uffd2\027\uffd2\030\uffd2\001\002\000\006\010\124\030" +
+    "\125\001\002\000\004\030\077\001\002\000\004\006\100" +
+    "\001\002\000\010\007\ufff6\027\ufff6\030\ufff6\001\002\000" +
+    "\010\007\103\027\105\030\102\001\002\000\006\010\111" +
+    "\030\112\001\002\000\004\004\110\001\002\000\010\007" +
+    "\ufff7\027\ufff7\030\ufff7\001\002\000\004\030\106\001\002" +
+    "\000\012\005\107\007\ufff4\027\ufff4\030\ufff4\001\002\000" +
+    "\010\007\ufff5\027\ufff5\030\ufff5\001\002\000\014\013\ufffb" +
+    "\015\ufffb\017\ufffb\025\ufffb\026\ufffb\001\002\000\006\027" +
+    "\115\030\114\001\002\000\012\005\113\007\ufff2\027\ufff2" +
+    "\030\ufff2\001\002\000\010\007\ufff3\027\ufff3\030\ufff3\001" +
+    "\002\000\004\011\121\001\002\000\004\011\116\001\002" +
+    "\000\004\030\117\001\002\000\012\005\120\007\ufff1\027" +
+    "\ufff1\030\ufff1\001\002\000\010\007\uffef\027\uffef\030\uffef" +
+    "\001\002\000\004\030\122\001\002\000\012\005\123\007" +
+    "\ufff0\027\ufff0\030\ufff0\001\002\000\010\007\uffee\027\uffee" +
+    "\030\uffee\001\002\000\006\027\133\030\132\001\002\000" +
+    "\004\006\126\001\002\000\010\007\ufff6\027\ufff6\030\ufff6" +
+    "\001\002\000\010\007\130\027\105\030\102\001\002\000" +
+    "\004\004\131\001\002\000\014\013\ufffa\015\ufffa\017\ufffa" +
+    "\025\ufffa\026\ufffa\001\002\000\004\011\142\001\002\000" +
+    "\004\011\134\001\002\000\004\030\135\001\002\000\004" +
+    "\006\136\001\002\000\010\007\ufff6\027\ufff6\030\ufff6\001" +
+    "\002\000\010\007\140\027\105\030\102\001\002\000\004" +
+    "\004\141\001\002\000\014\013\ufff9\015\ufff9\017\ufff9\025" +
+    "\ufff9\026\ufff9\001\002\000\004\030\143\001\002\000\004" +
+    "\006\144\001\002\000\010\007\ufff6\027\ufff6\030\ufff6\001" +
+    "\002\000\010\007\146\027\105\030\102\001\002\000\004" +
+    "\004\147\001\002\000\014\013\ufff8\015\ufff8\017\ufff8\025" +
+    "\ufff8\026\ufff8\001\002\000\004\030\152\001\002\000\006" +
+    "\002\uffe6\022\uffe6\001\002\000\004\023\153\001\002\000" +
+    "\010\005\uffe1\024\uffe1\030\155\001\002\000\006\005\156" +
+    "\024\157\001\002\000\006\005\uffe3\024\uffe3\001\002\000" +
+    "\004\030\163\001\002\000\004\016\160\001\002\000\004" +
+    "\030\161\001\002\000\004\004\162\001\002\000\006\002" +
+    "\uffe4\022\uffe4\001\002\000\006\005\uffe2\024\uffe2\001\002" +
+    "" });
 
   /** Access to parse-action table. */
   public short[][] action_table() {return _action_table;}
@@ -99,27 +141,46 @@ public class Parser extends java_cup.runtime.lr_parser {
   /** <code>reduce_goto</code> table. */
   protected static final short[][] _reduce_table = 
     unpackFromStrings(new String[] {
-    "\000\074\000\010\002\006\003\003\014\004\001\001\000" +
-    "\002\001\001\000\004\015\063\001\001\000\002\001\001" +
+    "\000\161\000\010\002\006\003\003\015\004\001\001\000" +
+    "\002\001\001\000\004\016\150\001\001\000\002\001\001" +
     "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
     "\002\001\001\000\004\004\013\001\001\000\006\005\014" +
-    "\010\016\001\001\000\002\001\001\000\002\001\001\000" +
-    "\004\011\017\001\001\000\002\001\001\000\002\001\001" +
-    "\000\002\001\001\000\002\001\001\000\004\012\024\001" +
-    "\001\000\004\013\025\001\001\000\002\001\001\000\002" +
+    "\011\016\001\001\000\002\001\001\000\002\001\001\000" +
+    "\006\012\020\020\017\001\001\000\006\021\040\024\037" +
     "\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" +
+    "\001\000\004\013\024\001\001\000\004\014\025\001\001" +
     "\000\002\001\001\000\002\001\001\000\002\001\001\000" +
-    "\002\001\001\000\002\001\001\000\004\006\043\001\001" +
-    "\000\004\007\045\001\001\000\002\001\001\000\002\001" +
-    "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
+    "\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\025\051\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\004\022\044\001\001\000" +
+    "\004\023\045\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\006\057\001\001" +
-    "\000\004\007\045\001\001\000\002\001\001\000\002\001" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\004" +
+    "\026\056\001\001\000\004\027\062\001\001\000\002\001" +
     "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
-    "\000\004\016\066\001\001\000\002\001\001\000\002\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\006\100" +
+    "\001\001\000\004\007\103\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\002\001\001\000\002\001\001\000\002\001" +
     "\001\000\002\001\001\000\002\001\001\000\002\001\001" +
-    "\000\002\001\001\000\002\001\001\000\002\001\001" });
+    "\000\002\001\001\000\002\001\001\000\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\006" +
+    "\126\001\001\000\004\007\103\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\006\136\001\001" +
+    "\000\004\007\103\001\001\000\002\001\001\000\002\001" +
+    "\001\000\002\001\001\000\002\001\001\000\004\006\144" +
+    "\001\001\000\004\007\103\001\001\000\002\001\001\000" +
+    "\002\001\001\000\002\001\001\000\002\001\001\000\002" +
+    "\001\001\000\004\017\153\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" });
 
   /** Access to <code>reduce_goto</code> table. */
   public short[][] reduce_table() {return _reduce_table;}
@@ -243,26 +304,34 @@ class CUP$Parser$actions {
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 3: // intface ::= PUBLIC INTERFACE IDENT BEGIN methlist capablist END 
+          case 3: // intface ::= PUBLIC INTERFACE IDENT BEGIN methlist capablist enumdeclist structdeclist END 
             {
               ParseNode RESULT =null;
-               int idintleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).left;
-               int idintright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).right;
-               Object idint = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-4)).value;
-               int mlleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
-               int mlright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
-               ParseNode ml = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
-               int clleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
-               int clright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
-               ParseNode cl = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
+               int idintleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-6)).left;
+               int idintright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-6)).right;
+               Object idint = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-6)).value;
+               int mlleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).left;
+               int mlright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).right;
+               ParseNode ml = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-4)).value;
+               int clleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
+               int clright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).right;
+               ParseNode cl = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-3)).value;
+               int elleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
+               int elright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
+               ParseNode el = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
+               int slleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
+               int slright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
+               ParseNode sl = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
                
                ParseNode pn = new ParseNode("interface");
                pn.addChild("intface_ident").setLiteral(idint);
                pn.addChild(ml);
                pn.addChild(cl);
+               pn.addChild(el);
+               pn.addChild(sl);
                RESULT = pn;
        
-              CUP$Parser$result = parser.getSymbolFactory().newSymbol("intface",1, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-6)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("intface",1, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-8)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
             }
           return CUP$Parser$result;
 
@@ -345,7 +414,61 @@ class CUP$Parser$actions {
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 8: // paramlist ::= paramlist param 
+          case 8: // meth ::= PUBLIC IDENT LANG TYPE RANG IDENT LPAR paramlist RPAR SEMICOLON 
+            {
+              ParseNode RESULT =null;
+               int clsmethleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-8)).left;
+               int clsmethright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-8)).right;
+               Object clsmeth = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-8)).value;
+               int typegenleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-6)).left;
+               int typegenright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-6)).right;
+               Object typegen = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-6)).value;
+               int idmethleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).left;
+               int idmethright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).right;
+               Object idmeth = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-4)).value;
+               int plleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
+               int plright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
+               ParseNode pl = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
+               
+               ParseNode pn = new ParseNode("method");
+               pn.addChild("method_class").setLiteral((String)clsmeth + "<" + typegen + ">");
+               pn.addChild("method_ident").setLiteral(idmeth);
+               pn.addChild(pl);
+               RESULT = pn;
+       
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("meth",3, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-9)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+            }
+          return CUP$Parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 9: // meth ::= PUBLIC IDENT LANG IDENT RANG IDENT LPAR paramlist RPAR SEMICOLON 
+            {
+              ParseNode RESULT =null;
+               int clsmethleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-8)).left;
+               int clsmethright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-8)).right;
+               Object clsmeth = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-8)).value;
+               int clsgenleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-6)).left;
+               int clsgenright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-6)).right;
+               Object clsgen = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-6)).value;
+               int idmethleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).left;
+               int idmethright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).right;
+               Object idmeth = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-4)).value;
+               int plleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
+               int plright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
+               ParseNode pl = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
+               
+               ParseNode pn = new ParseNode("method");
+               pn.addChild("method_class").setLiteral((String)clsmeth + "<" + clsgen + ">");
+               pn.addChild("method_ident").setLiteral(idmeth);
+               pn.addChild(pl);
+               RESULT = pn;
+       
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("meth",3, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-9)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+            }
+          return CUP$Parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 10: // paramlist ::= paramlist param 
             {
               ParseNode RESULT =null;
                int plleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
@@ -363,7 +486,7 @@ class CUP$Parser$actions {
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 9: // paramlist ::= 
+          case 11: // paramlist ::= 
             {
               ParseNode RESULT =null;
                
@@ -375,7 +498,7 @@ class CUP$Parser$actions {
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 10: // param ::= TYPE IDENT COMMA 
+          case 12: // param ::= TYPE IDENT COMMA 
             {
               ParseNode RESULT =null;
                int typeprmleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
@@ -395,7 +518,7 @@ class CUP$Parser$actions {
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 11: // param ::= TYPE IDENT 
+          case 13: // param ::= TYPE IDENT 
             {
               ParseNode RESULT =null;
                int typeprmleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
@@ -415,7 +538,7 @@ class CUP$Parser$actions {
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 12: // param ::= IDENT IDENT COMMA 
+          case 14: // param ::= IDENT IDENT COMMA 
             {
               ParseNode RESULT =null;
                int clsprmleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
@@ -435,7 +558,7 @@ class CUP$Parser$actions {
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 13: // param ::= IDENT IDENT 
+          case 15: // param ::= IDENT IDENT 
             {
               ParseNode RESULT =null;
                int clsprmleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
@@ -455,7 +578,99 @@ class CUP$Parser$actions {
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 14: // capablist ::= capablist capab 
+          case 16: // param ::= IDENT LANG TYPE RANG IDENT 
+            {
+              ParseNode RESULT =null;
+               int clsprmleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).left;
+               int clsprmright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).right;
+               Object clsprm = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-4)).value;
+               int typegenleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
+               int typegenright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
+               Object typegen = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
+               int idprmleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).left;
+               int idprmright = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).right;
+               Object idprm = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.peek()).value;
+               
+               ParseNode pn = new ParseNode("param");
+               pn.addChild("param_class").setLiteral((String)clsprm + "<" + typegen + ">");
+               pn.addChild("param_ident").setLiteral(idprm);
+               RESULT = pn;
+       
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("param",5, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+            }
+          return CUP$Parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 17: // param ::= IDENT LANG IDENT RANG IDENT 
+            {
+              ParseNode RESULT =null;
+               int clsprmleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).left;
+               int clsprmright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)).right;
+               Object clsprm = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-4)).value;
+               int clsgenleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
+               int clsgenright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
+               Object clsgen = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
+               int idprmleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).left;
+               int idprmright = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).right;
+               Object idprm = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.peek()).value;
+               
+               ParseNode pn = new ParseNode("param");
+               pn.addChild("param_class").setLiteral((String)clsprm + "<" + clsgen + ">");
+               pn.addChild("param_ident").setLiteral(idprm);
+               RESULT = pn;
+       
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("param",5, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+            }
+          return CUP$Parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 18: // param ::= IDENT LANG TYPE RANG IDENT COMMA 
+            {
+              ParseNode RESULT =null;
+               int clsprmleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-5)).left;
+               int clsprmright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-5)).right;
+               Object clsprm = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-5)).value;
+               int typegenleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
+               int typegenright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).right;
+               Object typegen = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-3)).value;
+               int idprmleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
+               int idprmright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
+               Object idprm = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
+               
+               ParseNode pn = new ParseNode("param");
+               pn.addChild("param_class").setLiteral((String)clsprm + "<" + typegen + ">");
+               pn.addChild("param_ident").setLiteral(idprm);
+               RESULT = pn;
+       
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("param",5, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-5)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+            }
+          return CUP$Parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 19: // param ::= IDENT LANG IDENT RANG IDENT COMMA 
+            {
+              ParseNode RESULT =null;
+               int clsprmleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-5)).left;
+               int clsprmright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-5)).right;
+               Object clsprm = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-5)).value;
+               int clsgenleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
+               int clsgenright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).right;
+               Object clsgen = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-3)).value;
+               int idprmleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
+               int idprmright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
+               Object idprm = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
+               
+               ParseNode pn = new ParseNode("param");
+               pn.addChild("param_class").setLiteral((String)clsprm + "<" + clsgen + ">");
+               pn.addChild("param_ident").setLiteral(idprm);
+               RESULT = pn;
+       
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("param",5, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-5)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+            }
+          return CUP$Parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 20: // capablist ::= capablist capab 
             {
               ParseNode RESULT =null;
                int clleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
@@ -468,24 +683,24 @@ class CUP$Parser$actions {
                cl.addChild(cap);
                RESULT = cl;
        
-              CUP$Parser$result = parser.getSymbolFactory().newSymbol("capablist",6, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("capablist",7, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
             }
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 15: // capablist ::= 
+          case 21: // capablist ::= 
             {
               ParseNode RESULT =null;
                
                ParseNode pn = new ParseNode("capab_list");
                RESULT = pn;
        
-              CUP$Parser$result = parser.getSymbolFactory().newSymbol("capablist",6, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("capablist",7, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
             }
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 16: // capab ::= CAPABILITY IDENT BEGIN capabcont END 
+          case 22: // capab ::= CAPABILITY IDENT BEGIN capabcont END 
             {
               ParseNode RESULT =null;
                int idcapleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
@@ -500,12 +715,12 @@ class CUP$Parser$actions {
                pn.addChild(ccont);
                RESULT = pn;
        
-              CUP$Parser$result = parser.getSymbolFactory().newSymbol("capab",7, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("capab",8, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
             }
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 17: // capabcont ::= capabcont cont 
+          case 23: // capabcont ::= capabcont cont 
             {
               ParseNode RESULT =null;
                int ccontleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
@@ -518,24 +733,24 @@ class CUP$Parser$actions {
                ccont.addChild(cnt);
                RESULT = ccont;
        
-              CUP$Parser$result = parser.getSymbolFactory().newSymbol("capabcont",8, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("capabcont",9, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
             }
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 18: // capabcont ::= 
+          case 24: // capabcont ::= 
             {
               ParseNode RESULT =null;
                
                ParseNode pn = new ParseNode("capab_content");
                RESULT = pn;
        
-              CUP$Parser$result = parser.getSymbolFactory().newSymbol("capabcont",8, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("capabcont",9, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
             }
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 19: // cont ::= DESCRIPTION ASSIGN STRINGCONST SEMICOLON 
+          case 25: // cont ::= DESCRIPTION ASSIGN STRINGCONST SEMICOLON 
             {
               ParseNode RESULT =null;
                int dscleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
@@ -549,12 +764,12 @@ class CUP$Parser$actions {
                pn.addChild("capab_desc").setLiteral(strdsc);
                RESULT = pn;
        
-              CUP$Parser$result = parser.getSymbolFactory().newSymbol("cont",9, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("cont",10, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
             }
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 20: // cont ::= METHOD ASSIGN STRINGCONST SEMICOLON 
+          case 26: // cont ::= METHOD ASSIGN STRINGCONST SEMICOLON 
             {
               ParseNode RESULT =null;
                int mtdleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
@@ -568,12 +783,12 @@ class CUP$Parser$actions {
                pn.addChild("capab_meth").setLiteral(strmeth);
                RESULT = pn;
        
-              CUP$Parser$result = parser.getSymbolFactory().newSymbol("cont",9, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("cont",10, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
             }
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 21: // reqlist ::= reqlist require 
+          case 27: // reqlist ::= reqlist require 
             {
               ParseNode RESULT =null;
                int rlleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
@@ -586,24 +801,24 @@ class CUP$Parser$actions {
                rl.addChild(req);
                RESULT = rl;
        
-              CUP$Parser$result = parser.getSymbolFactory().newSymbol("reqlist",10, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("reqlist",11, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
             }
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 22: // reqlist ::= 
+          case 28: // reqlist ::= 
             {
               ParseNode RESULT =null;
                
                ParseNode pn = new ParseNode("reqlist");
                RESULT = pn;
        
-              CUP$Parser$result = parser.getSymbolFactory().newSymbol("reqlist",10, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("reqlist",11, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
             }
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 23: // require ::= REQUIRES IDENT WITH capintlist AS INTERFACE IDENT SEMICOLON 
+          case 29: // require ::= REQUIRES IDENT WITH capintlist AS INTERFACE IDENT SEMICOLON 
             {
               ParseNode RESULT =null;
                int idintleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-6)).left;
@@ -622,12 +837,12 @@ class CUP$Parser$actions {
                pn.addChild("new_intface_ident").setLiteral(idnewint);
                RESULT = pn;
        
-              CUP$Parser$result = parser.getSymbolFactory().newSymbol("require",11, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-7)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("require",12, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-7)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
             }
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 24: // capintlist ::= IDENT 
+          case 30: // capintlist ::= IDENT 
             {
               ParseNode RESULT =null;
                int idcapleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).left;
@@ -638,12 +853,12 @@ class CUP$Parser$actions {
                pn.addChild("capab_ident").setLiteral(idcap);
                RESULT = pn;
        
-              CUP$Parser$result = parser.getSymbolFactory().newSymbol("capintlist",12, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("capintlist",13, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
             }
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 25: // capintlist ::= capintlist COMMA IDENT 
+          case 31: // capintlist ::= capintlist COMMA IDENT 
             {
               ParseNode RESULT =null;
                int cilleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
@@ -656,19 +871,274 @@ class CUP$Parser$actions {
                cil.addChild("capab_ident").setLiteral(idcap);
                RESULT = cil;
        
-              CUP$Parser$result = parser.getSymbolFactory().newSymbol("capintlist",12, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("capintlist",13, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
             }
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 26: // capintlist ::= 
+          case 32: // capintlist ::= 
             {
               ParseNode RESULT =null;
                
                ParseNode pn = new ParseNode("capab_ident_list");
                RESULT = pn;
        
-              CUP$Parser$result = parser.getSymbolFactory().newSymbol("capintlist",12, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("capintlist",13, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+            }
+          return CUP$Parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 33: // enumdeclist ::= enumdeclist enumdec 
+            {
+              ParseNode RESULT =null;
+               int elleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
+               int elright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
+               ParseNode el = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
+               int edleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).left;
+               int edright = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).right;
+               ParseNode ed = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.peek()).value;
+               
+               el.addChild(ed);
+               RESULT = el;
+       
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("enumdeclist",14, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+            }
+          return CUP$Parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 34: // enumdeclist ::= 
+            {
+              ParseNode RESULT =null;
+               
+               ParseNode pn = new ParseNode("enum_dec_list");
+               RESULT = pn;
+       
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("enumdeclist",14, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+            }
+          return CUP$Parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 35: // enumdec ::= ENUM IDENT BEGIN enumlist END 
+            {
+              ParseNode RESULT =null;
+               int idenumdecleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
+               int idenumdecright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).right;
+               Object idenumdec = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-3)).value;
+               int elleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
+               int elright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
+               ParseNode el = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
+               
+               ParseNode pn = new ParseNode("enum_dec");
+               pn.addChild("enum_dec_ident").setLiteral(idenumdec);
+               pn.addChild(el);
+               RESULT = pn;
+       
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("enumdec",15, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+            }
+          return CUP$Parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 36: // enumlist ::= enumlist enummem 
+            {
+              ParseNode RESULT =null;
+               int elleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
+               int elright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
+               ParseNode el = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
+               int eleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).left;
+               int eright = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).right;
+               ParseNode e = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.peek()).value;
+               
+               el.addChild(e);
+               RESULT = el;
+       
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("enumlist",16, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+            }
+          return CUP$Parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 37: // enumlist ::= 
+            {
+              ParseNode RESULT =null;
+               
+               ParseNode pn = new ParseNode("enum_list");
+               RESULT = pn;
+       
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("enumlist",16, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+            }
+          return CUP$Parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 38: // enummem ::= IDENT COMMA 
+            {
+              ParseNode RESULT =null;
+               int idenumleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
+               int idenumright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
+               Object idenum = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
+               
+               ParseNode pn = new ParseNode("enum_mem");
+               pn.addChild("enum_ident").setLiteral(idenum);
+               RESULT = pn;
+       
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("enummem",17, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+            }
+          return CUP$Parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 39: // enummem ::= IDENT 
+            {
+              ParseNode RESULT =null;
+               int idenumleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).left;
+               int idenumright = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).right;
+               Object idenum = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.peek()).value;
+               
+               ParseNode pn = new ParseNode("enum_mem");
+               pn.addChild("enum_ident").setLiteral(idenum);
+               RESULT = pn;
+       
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("enummem",17, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+            }
+          return CUP$Parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 40: // structdeclist ::= structdeclist structdec 
+            {
+              ParseNode RESULT =null;
+               int slleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
+               int slright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
+               ParseNode sl = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
+               int sdleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).left;
+               int sdright = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).right;
+               ParseNode sd = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.peek()).value;
+               
+               sl.addChild(sd);
+               RESULT = sl;
+       
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("structdeclist",18, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+            }
+          return CUP$Parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 41: // structdeclist ::= 
+            {
+              ParseNode RESULT =null;
+               
+               ParseNode pn = new ParseNode("struct_dec_list");
+               RESULT = pn;
+       
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("structdeclist",18, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+            }
+          return CUP$Parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 42: // structdec ::= STRUCT IDENT BEGIN structlist END 
+            {
+              ParseNode RESULT =null;
+               int idstructdecleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
+               int idstructdecright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).right;
+               Object idstructdec = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-3)).value;
+               int slleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
+               int slright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
+               ParseNode sl = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
+               
+               ParseNode pn = new ParseNode("struct_dec");
+               pn.addChild("struct_dec_ident").setLiteral(idstructdec);
+               pn.addChild(sl);
+               RESULT = pn;
+       
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("structdec",19, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-4)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+            }
+          return CUP$Parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 43: // structlist ::= structlist structmem 
+            {
+              ParseNode RESULT =null;
+               int slleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
+               int slright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
+               ParseNode sl = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
+               int sleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).left;
+               int sright = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).right;
+               ParseNode s = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.peek()).value;
+               
+               sl.addChild(s);
+               RESULT = sl;
+       
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("structlist",20, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+            }
+          return CUP$Parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 44: // structlist ::= 
+            {
+              ParseNode RESULT =null;
+               
+               ParseNode pn = new ParseNode("struct_list");
+               RESULT = pn;
+       
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("structlist",20, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+            }
+          return CUP$Parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 45: // structmem ::= TYPE IDENT SEMICOLON 
+            {
+              ParseNode RESULT =null;
+               int typestrleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
+               int typestrright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
+               Object typestr = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
+               int idstrleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
+               int idstrright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
+               Object idstr = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
+               
+               ParseNode pn = new ParseNode("struct_mem");
+               pn.addChild("struct_type").setLiteral(typestr);
+               pn.addChild("struct_ident").setLiteral(idstr);
+               RESULT = pn;
+       
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("structmem",21, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+            }
+          return CUP$Parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 46: // structmem ::= IDENT IDENT SEMICOLON 
+            {
+              ParseNode RESULT =null;
+               int clsstrleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
+               int clsstrright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
+               Object clsstr = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
+               int idstrleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
+               int idstrright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
+               Object idstr = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
+               
+               ParseNode pn = new ParseNode("struct_mem");
+               pn.addChild("struct_class").setLiteral(clsstr);
+               pn.addChild("struct_ident").setLiteral(idstr);
+               RESULT = pn;
+       
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("structmem",21, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+            }
+          return CUP$Parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 47: // structmem ::= IDENT LANG IDENT RANG IDENT SEMICOLON 
+            {
+              ParseNode RESULT =null;
+               int clsstrleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-5)).left;
+               int clsstrright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-5)).right;
+               Object clsstr = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-5)).value;
+               int clsgenleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
+               int clsgenright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).right;
+               Object clsgen = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-3)).value;
+               int idstrleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
+               int idstrright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
+               Object idstr = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
+               
+               ParseNode pn = new ParseNode("struct_mem");
+               pn.addChild("struct_class").setLiteral((String)clsstr + "<" + clsgen + ">");
+               pn.addChild("struct_ident").setLiteral(idstr);
+               RESULT = pn;
+       
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("structmem",21, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-5)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
             }
           return CUP$Parser$result;