Separating policy file into main policy and generated interfaces; fixing lexer, parse...
[iot2.git] / iotjava / iotpolicy / parser / Parser.java
index f06a0b98856ccbf4e52b761201c144bea5ebcd1a..cc7af92e22a8c2140c8ae37424f5e2be3efb08fb 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;
@@ -15,7 +15,6 @@ import javax.xml.transform.stream.*;
 import java_cup.runtime.XMLElement;
 
 import iotpolicy.tree.ParseNode;
-import iotpolicy.tree.ParseNodeVector;
 
 /** CUP v0.11b 20160615 (GIT 4ac7450) generated parser.
   */
@@ -40,15 +39,15 @@ public class Parser extends java_cup.runtime.lr_parser {
   /** Production table. */
   protected static final short _production_table[][] = 
     unpackFromStrings(new String[] {
-    "\000\032\000\002\002\005\000\002\002\004\000\002\003" +
-    "\010\000\002\003\002\000\002\004\004\000\002\004\002" +
-    "\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" +
-    "\011\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\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" });
 
   /** Access to production table. */
   public short[][] production_table() {return _production_table;}
@@ -56,40 +55,43 @@ public class Parser extends java_cup.runtime.lr_parser {
   /** Parse-action table. */
   protected static final short[][] _action_table = 
     unpackFromStrings(new String[] {
-    "\000\070\000\012\002\ufffe\014\005\016\ufffe\021\ufffe\001" +
-    "\002\000\010\002\ufff3\016\ufff3\021\ufff3\001\002\000\004" +
-    "\015\010\001\002\000\004\002\007\001\002\000\004\002" +
-    "\000\001\002\000\004\025\011\001\002\000\004\011\012" +
-    "\001\002\000\006\012\ufffc\014\ufffc\001\002\000\006\012" +
-    "\016\014\015\001\002\000\006\012\ufffd\014\ufffd\001\002" +
-    "\000\004\024\017\001\002\000\010\002\uffff\016\uffff\021" +
-    "\uffff\001\002\000\004\025\020\001\002\000\004\007\021" +
-    "\001\002\000\010\010\ufff9\024\ufff9\025\ufff9\001\002\000" +
-    "\010\010\025\024\026\025\023\001\002\000\004\025\032" +
-    "\001\002\000\010\010\ufffa\024\ufffa\025\ufffa\001\002\000" +
-    "\004\004\031\001\002\000\004\025\027\001\002\000\012" +
-    "\005\030\010\ufff7\024\ufff7\025\ufff7\001\002\000\010\010" +
-    "\ufff8\024\ufff8\025\ufff8\001\002\000\006\012\ufffb\014\ufffb" +
-    "\001\002\000\012\005\033\010\ufff5\024\ufff5\025\ufff5\001" +
-    "\002\000\010\010\ufff6\024\ufff6\025\ufff6\001\002\000\010" +
-    "\002\uffec\016\037\021\uffec\001\002\000\010\002\ufff4\016" +
-    "\ufff4\021\ufff4\001\002\000\006\002\001\021\057\001\002" +
-    "\000\004\025\040\001\002\000\004\006\041\001\002\000" +
-    "\004\025\042\001\002\000\004\011\043\001\002\000\010" +
-    "\012\ufff0\017\ufff0\020\ufff0\001\002\000\010\012\047\017" +
-    "\046\020\050\001\002\000\010\012\ufff1\017\ufff1\020\ufff1" +
-    "\001\002\000\004\013\054\001\002\000\010\002\ufff2\016" +
-    "\ufff2\021\ufff2\001\002\000\004\013\051\001\002\000\004" +
-    "\025\052\001\002\000\004\004\053\001\002\000\010\012" +
-    "\uffee\017\uffee\020\uffee\001\002\000\004\026\055\001\002" +
-    "\000\004\004\056\001\002\000\010\012\uffef\017\uffef\020" +
-    "\uffef\001\002\000\004\025\061\001\002\000\006\002\uffed" +
-    "\021\uffed\001\002\000\004\022\062\001\002\000\010\005" +
-    "\uffe8\023\uffe8\025\063\001\002\000\006\005\uffea\023\uffea" +
-    "\001\002\000\006\005\065\023\066\001\002\000\004\025" +
-    "\072\001\002\000\004\015\067\001\002\000\004\025\070" +
-    "\001\002\000\004\004\071\001\002\000\006\002\uffeb\021" +
-    "\uffeb\001\002\000\006\005\uffe9\023\uffe9\001\002" });
+    "\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" });
 
   /** Access to parse-action table. */
   public short[][] action_table() {return _action_table;}
@@ -97,26 +99,27 @@ public class Parser extends java_cup.runtime.lr_parser {
   /** <code>reduce_goto</code> table. */
   protected static final short[][] _reduce_table = 
     unpackFromStrings(new String[] {
-    "\000\070\000\006\002\005\003\003\001\001\000\004\010" +
-    "\033\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" +
-    "\012\001\001\000\004\005\013\001\001\000\002\001\001" +
+    "\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\002\001\001\000\002\001\001\000\002\001\001\000" +
-    "\002\001\001\000\004\006\021\001\001\000\004\007\023" +
+    "\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" +
     "\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\011\034\014\035\001\001\000\002\001\001\000\004" +
-    "\015\057\001\001\000\002\001\001\000\002\001\001\000" +
-    "\002\001\001\000\002\001\001\000\004\012\043\001\001" +
-    "\000\004\013\044\001\001\000\002\001\001\000\002\001" +
+    "\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" +
     "\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\016\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" });
+    "\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" +
+    "\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" +
+    "\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;}
@@ -166,107 +169,6 @@ public class Parser extends java_cup.runtime.lr_parser {
       // start parsing
       Parser p = new Parser(lexer,csf);
       ParseNode pn = (ParseNode) p.parse().value;
-
-      //System.out.println("INTERFACE: ");
-      System.out.println(pn);
-      ParseNodeVector pnv = pn.getChildren();
-      /*System.out.println("Children: " + pnv.size());
-      ParseNode pnIntChild = pnv.elementAt(0);
-      System.out.println("Child 1: " + pnIntChild.getLabel());
-      System.out.println("Child 1: " + pnIntChild.getLiteral());
-      System.out.println();
-
-      ParseNodeVector pnIntChildren = pnIntChild.getChildren();
-      System.out.println("Grand children: " + pnIntChildren.size());
-      ParseNode pnIntGrandChild1 = pnIntChildren.elementAt(0);
-      System.out.println("Child 1: " + pnIntGrandChild1.getLabel());
-      System.out.println("Child 1: " + pnIntGrandChild1.getLiteral());
-      System.out.println("Great grand children: " + pnIntGrandChild1.getChildren().size());
-      System.out.println();
-
-      ParseNode pnIntGrandChild2 = pnIntChildren.elementAt(1);
-      System.out.println("Child 2: " + pnIntGrandChild2.getLabel());
-      System.out.println("Child 2: " + pnIntGrandChild2.getLiteral());
-      System.out.println("Great grand children: " + pnIntGrandChild2.getChildren().size());
-      System.out.println();
-      System.out.println();*/
-
-      System.out.println("CAPABILITIES: ");
-      ParseNode pnCapabChild = pnv.elementAt(1);
-      System.out.println("Child 2: " + pnv.elementAt(1).getLabel());
-      System.out.println("Child 2: " + pnv.elementAt(1).getLiteral());
-      ParseNodeVector pnvCap = pnCapabChild.getChildren();
-      System.out.println("Grand children: " + pnvCap.size());
-      ParseNode pnCapGrandChild1 = pnvCap.elementAt(0);
-      System.out.println("Child 1: " + pnCapGrandChild1.getLabel());
-      System.out.println("Child 1: " + pnCapGrandChild1.getLiteral());
-      ParseNodeVector pnvCap2 = pnCapGrandChild1.getChildren();
-      System.out.println("Great grand children: " + pnvCap2.size());
-      ParseNode pnCapGreatGrandChild1 = pnvCap2.elementAt(0);
-      System.out.println("Great grand Child 1: " + pnCapGreatGrandChild1.getLabel());
-      System.out.println("Great grand Child 1: " + pnCapGreatGrandChild1.getLiteral());
-      ParseNode pnCapGreatGrandChild2 = pnvCap2.elementAt(1);
-      System.out.println("Great grand Child 2: " + pnCapGreatGrandChild2.getLabel());
-      System.out.println("Great grand Child 2: " + pnCapGreatGrandChild2.getLiteral());
-      ParseNode pnCapGreatGrandChild3 = pnvCap2.elementAt(2);
-      System.out.println("Great grand Child 3: " + pnCapGreatGrandChild3.getLabel());
-      System.out.println("Great grand Child 3: " + pnCapGreatGrandChild3.getLiteral());
-      ParseNodeVector pnvCap3 = pnCapGreatGrandChild3.getChildren();
-      System.out.println("Great great grand children: " + pnvCap3.size());
-      ParseNode pnCapGreatGreatGrandChild1 = pnvCap3.elementAt(0);
-      System.out.println("Great great grand Child 1: " + pnCapGreatGreatGrandChild1.getLabel());
-      System.out.println("Great great grand Child 1: " + pnCapGreatGreatGrandChild1.getLiteral());
-      ParseNodeVector pnvDesc = pnCapGreatGreatGrandChild1.getChildren();
-      System.out.println("Great great great grand children: " + pnvDesc.size());
-      ParseNode pnDesc = pnvDesc.elementAt(0);
-      System.out.println("Description: " + pnDesc.getLabel());
-      System.out.println("Description: " + pnDesc.getLiteral());
-
-
-      ParseNode pnCapGreatGreatGrandChild2 = pnvCap3.elementAt(1);
-      System.out.println("Great great grand Child 2: " + pnCapGreatGreatGrandChild2.getLabel());
-      System.out.println("Great great grand Child 2: " + pnCapGreatGreatGrandChild2.getLiteral());
-      ParseNode pnCapGreatGreatGrandChild3 = pnvCap3.elementAt(2);
-      System.out.println("Great great grand Child 3: " + pnCapGreatGreatGrandChild3.getLabel());
-      System.out.println("Great great grand Child 3: " + pnCapGreatGreatGrandChild3.getLiteral());
-      ParseNode pnCapGreatGreatGrandChild4 = pnvCap3.elementAt(3);
-      System.out.println("Great great grand Child 4: " + pnCapGreatGreatGrandChild4.getLabel());
-      System.out.println("Great great grand Child 4: " + pnCapGreatGreatGrandChild4.getLiteral());
-
-      System.out.println();
-
-      /*System.out.println("REQUIRES: ");
-      ParseNode pnReqChild = pnv.elementAt(2);
-      System.out.println("Child 3: " + pnv.elementAt(2).getLabel());
-      System.out.println("Child 3: " + pnv.elementAt(2).getLiteral());
-      ParseNodeVector pnvReq = pnReqChild.getChildren();
-      System.out.println("Grand children: " + pnvReq.size());
-      ParseNode pnReqGrandChild = pnvReq.elementAt(0);
-      System.out.println("Grand Child 1: " + pnReqGrandChild.getLabel());
-      System.out.println("Grand Child 1: " + pnReqGrandChild.getLiteral());
-      ParseNodeVector pnvReqGrand = pnReqGrandChild.getChildren();
-      System.out.println("Grand children: " + pnvReqGrand.size());
-      ParseNode pnReqGreatGrandChild = pnvReqGrand.elementAt(0);
-      System.out.println("Great grand Child 1: " + pnReqGreatGrandChild.getLabel());
-      System.out.println("Great grand Child 1: " + pnReqGreatGrandChild.getLiteral());
-      ParseNode pnReqGreatGrandChild2 = pnvReqGrand.elementAt(1);
-      System.out.println("Great grand Child 2: " + pnReqGreatGrandChild2.getLabel());
-      System.out.println("Great grand Child 2: " + pnReqGreatGrandChild2.getLiteral());
-      ParseNodeVector pnvCapList = pnReqGreatGrandChild2.getChildren();
-      System.out.println("Grand children: " + pnvCapList.size());
-      ParseNode pnReqGreatGreatGrandChild2 = pnvCapList.elementAt(0);
-      System.out.println("Great great grand Child 2: " + pnReqGreatGreatGrandChild2.getLabel());
-      System.out.println("Great great grand Child 2: " + pnReqGreatGreatGrandChild2.getLiteral());
-
-      ParseNode pnReqGreatGrandChild3 = pnvReqGrand.elementAt(2);
-      System.out.println("Great grand Child 3: " + pnReqGreatGrandChild3.getLabel());
-      System.out.println("Great grand Child 3: " + pnReqGreatGrandChild3.getLiteral());
-
-
-      //ParseNodeVector pnvReqGreatGrand = pnReqGreatGrandChild2.getChildren();
-      //System.out.println("Grand children: " + pnvReqGreatGrand.size());
-      System.out.println();*/
-
   }
 
 
@@ -295,26 +197,18 @@ class CUP$Parser$actions {
       switch (CUP$Parser$act_num)
         {
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 0: // policy ::= intface capablist reqlist 
+          case 0: // policy ::= intface 
             {
               ParseNode RESULT =null;
-               int inleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
-               int inright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).right;
-               ParseNode in = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-2)).value;
-               int capleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
-               int capright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
-               ParseNode cap = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
-               int rlleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).left;
-               int rlright = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).right;
-               ParseNode rl = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.peek()).value;
+               int inleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).left;
+               int inright = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).right;
+               ParseNode in = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.peek()).value;
                
                ParseNode pn = new ParseNode("policy");
                pn.addChild(in);
-               pn.addChild(cap);
-               pn.addChild(rl);
                RESULT = pn;
        
-              CUP$Parser$result = parser.getSymbolFactory().newSymbol("policy",0, ((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("policy",0, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
             }
           return CUP$Parser$result;
 
@@ -333,34 +227,42 @@ class CUP$Parser$actions {
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 2: // intface ::= PUBLIC INTERFACE IDENT BEGIN methlist END 
+          case 2: // policy ::= reqlist 
             {
               ParseNode RESULT =null;
-               int idintleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
-               int idintright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).right;
-               Object idint = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-3)).value;
-               int mlleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
-               int mlright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
-               ParseNode ml = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
+               int rlleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).left;
+               int rlright = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).right;
+               ParseNode rl = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.peek()).value;
                
-               ParseNode pn = new ParseNode("interface");
-               pn.addChild("intface_ident").setLiteral(idint);
-               pn.addChild(ml);
+               ParseNode pn = new ParseNode("policy");
+               pn.addChild(rl);
                RESULT = pn;
        
-              CUP$Parser$result = parser.getSymbolFactory().newSymbol("intface",1, ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-5)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+              CUP$Parser$result = parser.getSymbolFactory().newSymbol("policy",0, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
             }
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 3: // intface ::= 
+          case 3: // intface ::= PUBLIC INTERFACE IDENT BEGIN methlist capablist 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;
                
                ParseNode pn = new ParseNode("interface");
+               pn.addChild("intface_ident").setLiteral(idint);
+               pn.addChild(ml);
+               pn.addChild(cl);
                RESULT = pn;
        
-              CUP$Parser$result = parser.getSymbolFactory().newSymbol("intface",1, ((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-6)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
             }
           return CUP$Parser$result;
 
@@ -419,7 +321,31 @@ class CUP$Parser$actions {
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 7: // paramlist ::= paramlist param 
+          case 7: // meth ::= PUBLIC IDENT IDENT LPAR paramlist RPAR SEMICOLON 
+            {
+              ParseNode RESULT =null;
+               int clsmethleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-5)).left;
+               int clsmethright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-5)).right;
+               Object clsmeth = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-5)).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(clsmeth);
+               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-6)), ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
+            }
+          return CUP$Parser$result;
+
+          /*. . . . . . . . . . . . . . . . . . . .*/
+          case 8: // paramlist ::= paramlist param 
             {
               ParseNode RESULT =null;
                int plleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
@@ -437,7 +363,7 @@ class CUP$Parser$actions {
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 8: // paramlist ::= 
+          case 9: // paramlist ::= 
             {
               ParseNode RESULT =null;
                
@@ -449,7 +375,7 @@ class CUP$Parser$actions {
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 9: // param ::= TYPE IDENT COMMA 
+          case 10: // param ::= TYPE IDENT COMMA 
             {
               ParseNode RESULT =null;
                int typeprmleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
@@ -469,7 +395,7 @@ class CUP$Parser$actions {
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 10: // param ::= TYPE IDENT 
+          case 11: // param ::= TYPE IDENT 
             {
               ParseNode RESULT =null;
                int typeprmleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
@@ -489,7 +415,7 @@ class CUP$Parser$actions {
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 11: // param ::= IDENT IDENT COMMA 
+          case 12: // param ::= IDENT IDENT COMMA 
             {
               ParseNode RESULT =null;
                int clsprmleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
@@ -509,7 +435,7 @@ class CUP$Parser$actions {
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 12: // param ::= IDENT IDENT 
+          case 13: // param ::= IDENT IDENT 
             {
               ParseNode RESULT =null;
                int clsprmleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
@@ -529,25 +455,25 @@ class CUP$Parser$actions {
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 13: // capablist ::= capablist capab 
+          case 14: // capablist ::= capablist capab 
             {
               ParseNode RESULT =null;
-               int clistleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
-               int clistright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
-               ParseNode clist = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).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 capleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).left;
                int capright = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).right;
                ParseNode cap = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.peek()).value;
                
-               clist.addChild(cap);
-               RESULT = clist;
+               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);
             }
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 14: // capablist ::= 
+          case 15: // capablist ::= 
             {
               ParseNode RESULT =null;
                
@@ -559,12 +485,9 @@ class CUP$Parser$actions {
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 15: // capab ::= CAPABILITY IDENT DOT IDENT BEGIN capabcont END 
+          case 16: // capab ::= CAPABILITY IDENT BEGIN capabcont END 
             {
               ParseNode RESULT =null;
-               int idintleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-5)).left;
-               int idintright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-5)).right;
-               Object idint = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-5)).value;
                int idcapleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
                int idcapright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).right;
                Object idcap = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-3)).value;
@@ -573,17 +496,16 @@ class CUP$Parser$actions {
                ParseNode ccont = (ParseNode)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
                
                ParseNode pn = new ParseNode("capability");
-               pn.addChild("intface_ident").setLiteral(idint);
                pn.addChild("capab_ident").setLiteral(idcap);
                pn.addChild(ccont);
                RESULT = pn;
        
-              CUP$Parser$result = parser.getSymbolFactory().newSymbol("capab",7, ((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("capab",7, ((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 16: // capabcont ::= capabcont cont 
+          case 17: // capabcont ::= capabcont cont 
             {
               ParseNode RESULT =null;
                int ccontleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
@@ -601,7 +523,7 @@ class CUP$Parser$actions {
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 17: // capabcont ::= 
+          case 18: // capabcont ::= 
             {
               ParseNode RESULT =null;
                
@@ -613,18 +535,18 @@ class CUP$Parser$actions {
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 18: // cont ::= DESCRIPTION ASSIGN STRINGCONST SEMICOLON 
+          case 19: // cont ::= DESCRIPTION ASSIGN STRINGCONST SEMICOLON 
             {
               ParseNode RESULT =null;
                int dscleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
                int dscright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).right;
                Object dsc = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-3)).value;
-               int strleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
-               int strright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
-               Object str = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
+               int strdscleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
+               int strdscright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
+               Object strdsc = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
                
                ParseNode pn = new ParseNode("capab_content");
-               pn.addChild("capab_desc").setLiteral(str);
+               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);
@@ -632,18 +554,18 @@ class CUP$Parser$actions {
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 19: // cont ::= METHOD ASSIGN IDENT SEMICOLON 
+          case 20: // cont ::= METHOD ASSIGN STRINGCONST SEMICOLON 
             {
               ParseNode RESULT =null;
                int mtdleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).left;
                int mtdright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-3)).right;
                Object mtd = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-3)).value;
-               int idmethleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
-               int idmethright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
-               Object idmeth = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
+               int strmethleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
+               int strmethright = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).right;
+               Object strmeth = (Object)((java_cup.runtime.Symbol) CUP$Parser$stack.elementAt(CUP$Parser$top-1)).value;
                
                ParseNode pn = new ParseNode("capab_content");
-               pn.addChild("capab_ident").setLiteral(idmeth);
+               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);
@@ -651,7 +573,7 @@ class CUP$Parser$actions {
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 20: // reqlist ::= reqlist require 
+          case 21: // reqlist ::= reqlist require 
             {
               ParseNode RESULT =null;
                int rlleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-1)).left;
@@ -669,11 +591,11 @@ class CUP$Parser$actions {
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 21: // reqlist ::= 
+          case 22: // reqlist ::= 
             {
               ParseNode RESULT =null;
                
-               ParseNode pn = new ParseNode("requires_list");
+               ParseNode pn = new ParseNode("reqlist");
                RESULT = pn;
        
               CUP$Parser$result = parser.getSymbolFactory().newSymbol("reqlist",10, ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()), RESULT);
@@ -681,7 +603,7 @@ class CUP$Parser$actions {
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 22: // require ::= REQUIRES IDENT WITH capintlist AS INTERFACE IDENT SEMICOLON 
+          case 23: // 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;
@@ -705,7 +627,7 @@ class CUP$Parser$actions {
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 23: // capintlist ::= IDENT 
+          case 24: // capintlist ::= IDENT 
             {
               ParseNode RESULT =null;
                int idcapleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.peek()).left;
@@ -721,7 +643,7 @@ class CUP$Parser$actions {
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 24: // capintlist ::= capintlist COMMA IDENT 
+          case 25: // capintlist ::= capintlist COMMA IDENT 
             {
               ParseNode RESULT =null;
                int cilleft = ((java_cup.runtime.Symbol)CUP$Parser$stack.elementAt(CUP$Parser$top-2)).left;
@@ -739,7 +661,7 @@ class CUP$Parser$actions {
           return CUP$Parser$result;
 
           /*. . . . . . . . . . . . . . . . . . . .*/
-          case 25: // capintlist ::= 
+          case 26: // capintlist ::= 
             {
               ParseNode RESULT =null;