changes + add two more benchmarks without annotations
[IRC.git] / Robust / src / Parse / java14.cup
index 16d229f3db314bdb4bac8aa5ff90bed8f331f80e..762cf7945bed458cdb33a378ec4e7e3f5caf19c6 100644 (file)
@@ -108,6 +108,7 @@ terminal ENUM;
 
 // added for disjoint reachability analysis
 terminal GENREACH;
+terminal GEN_DEF_REACH;
 
 
 // 19.2) The Syntactic Grammar
@@ -204,6 +205,7 @@ non terminal ParseNode catches, catch_clause;
 non terminal ParseNode finally;
 //non terminal ParseNode assert_statement;
 non terminal ParseNode genreach_statement;
+non terminal ParseNode gen_def_reach_statement;
 // 19.12) Expressions
 non terminal ParseNode primary, primary_no_new_array;
 non terminal ParseNode class_instance_creation_expression;
@@ -983,9 +985,7 @@ class_member_declaration ::=
        {:
        RESULT=ed; 
        :}
-//    |       interface_declaration:interfaced {: 
-//     RESULT=(new ParseNode("interface",parser.lexer.line_num)).addChild(interfaced).getRoot(); 
-//     :}
+    |       interface_declaration:interfaced {: RESULT=interfaced; :}
        |       SEMICOLON       {: RESULT=new ParseNode("empty",parser.lexer.line_num); :}
        ;
        
@@ -1181,7 +1181,7 @@ formal_parameter ::=
                pn.addChild(name);
                RESULT=pn;
        :}
-       |       annotation:an type:type variable_declarator_id:name {:
+       |       annotations:an type:type variable_declarator_id:name {:
                ParseNode pn=new ParseNode("annotation_parameter",parser.lexer.line_num);
                pn.addChild(type);
                pn.addChild(name);
@@ -1287,8 +1287,8 @@ SUPER LPAREN argument_list_opt:alo RPAREN SEMICOLON {:
        pn.addChild(alo);
        RESULT=pn;
 :}
-//     |       primary DOT THIS LPAREN argument_list_opt RPAREN SEMICOLON
-//     |       primary DOT SUPER LPAREN argument_list_opt RPAREN SEMICOLON
+       |       primary DOT THIS LPAREN argument_list_opt RPAREN SEMICOLON
+       |       primary DOT SUPER LPAREN argument_list_opt RPAREN SEMICOLON
        ;
 
 // 19.9) Interfaces
@@ -1356,7 +1356,7 @@ interface_member_declaration ::=
           RESULT=(new ParseNode("enum_declaration",parser.lexer.line_num)).addChild(ed).getRoot();
           :}
 //       |       class_declaration:class 
-//       |       interface_declaration:interface 
+       |       interface_declaration:interfaced {: RESULT=interfaced; :}
        |       SEMICOLON {: 
        RESULT=new ParseNode("empty",parser.lexer.line_num); 
        :}
@@ -1577,6 +1577,7 @@ statement_without_trailing_substatement ::=
        |       sese_statement:st {: RESULT=st; :}
        |       synchronized_statement:st {: RESULT=st; :}
        |       genreach_statement:st {: RESULT=st; :}
+       |       gen_def_reach_statement:st {: RESULT=st; :}
        |       throw_statement:st {: RESULT=st; :}
        |       try_statement:st {: RESULT=st; :}
 //     |       assert_statement
@@ -1938,23 +1939,31 @@ primary_no_new_array ::=
                pn.addChild(id);
                RESULT=pn;
        :}
-//     |       primitive_type:pt DOT CLASS {:
-//         ParseNode pn=new ParseNode("class_type",parser.lexer.line_num);
-//         pn.addChild(pt);
-//         RESULT=pn;
-//     :}
-//     |       VOID DOT CLASS
-//     |       array_type:at DOT CLASS {:
-//         ParseNode pn=new ParseNode("class_type",parser.lexer.line_num);
-//         pn.addChild(at);
-//         RESULT=pn;
-//     :}
+       |       primitive_type:pt DOT CLASS {:
+           ParseNode pn=new ParseNode("class_type",parser.lexer.line_num);
+           pn.addChild(pt);
+           RESULT=pn;
+       :}
+       |       VOID DOT CLASS {: 
+           ParseNode pn=new ParseNode("class_type",parser.lexer.line_num);
+           pn.addChild("type").addChild("void");
+           RESULT=pn;
+        :}
+       |       array_type:at DOT CLASS {:
+           ParseNode pn=new ParseNode("class_type",parser.lexer.line_num);
+           pn.addChild(at);
+           RESULT=pn;
+       :}
        |       name:name DOT CLASS {:
            ParseNode pn=new ParseNode("class_type",parser.lexer.line_num);
            pn.addChild("type").addChild("class").addChild(name);
            RESULT=pn;
        :}
-//     |       name DOT THIS
+       |       name:name DOT THIS {: 
+           ParseNode pn=new ParseNode("parentclass",parser.lexer.line_num);
+           pn.addChild("name").addChild(name);
+           RESULT=pn;
+       :}
        ;
 class_instance_creation_expression ::=
        NEWFLAG class_or_interface_type:type LPAREN argument_list_opt:args RPAREN flag_list_opt:feo {: 
@@ -2015,16 +2024,41 @@ class_instance_creation_expression ::=
                pn.addChild("decl").addChild("classbody").addChild(body);
                RESULT=pn;
        :}
-//     |       primary DOT NEW IDENTIFIER
-//                     LPAREN argument_list_opt RPAREN {: 
-//             
-//     :}
-//     |       primary DOT NEW IDENTIFIER
-//                     LPAREN argument_list_opt RPAREN class_body
-//     |       name DOT NEW IDENTIFIER
-//                     LPAREN argument_list_opt RPAREN
-//     |       name DOT NEW IDENTIFIER
-//                     LPAREN argument_list_opt RPAREN class_body
+       |       primary: base DOT NEW class_or_interface_type:type
+                       LPAREN argument_list_opt:args RPAREN {: 
+               ParseNode pn=new ParseNode("createobject",parser.lexer.line_num);
+               pn.addChild(type);
+               pn.addChild(args);
+               pn.addChild( "base" ).addChild( base );
+               RESULT=pn;
+               
+       :}
+       |       primary: base DOT NEW class_or_interface_type:type
+                       LPAREN argument_list_opt:args RPAREN class_body:body {:
+               ParseNode pn=new ParseNode("createobjectcls",parser.lexer.line_num);          
+               pn.addChild(type);
+               pn.addChild(args);
+               pn.addChild( "base" ).addChild( base );
+               pn.addChild("decl").addChild("classbody").addChild(body);
+               RESULT=pn;
+       :}
+       |       name:id DOT NEW class_or_interface_type:type
+                       LPAREN argument_list_opt:args RPAREN {:
+               ParseNode pn=new ParseNode("createobject",parser.lexer.line_num);
+               pn.addChild(type);
+               pn.addChild(args);
+               pn.addChild( "id" ).addChild( id );
+               RESULT=pn;
+       :}
+       |       name:id DOT NEW class_or_interface_type:type
+                       LPAREN argument_list_opt:args RPAREN class_body:body {:
+               ParseNode pn=new ParseNode("createobjectcls",parser.lexer.line_num);          
+               pn.addChild(type);
+               pn.addChild(args);
+               pn.addChild("decl").addChild("classbody").addChild(body);
+               pn.addChild( "id" ).addChild( id );
+               RESULT=pn;
+       :}
        ;
 cons_argument_list_opt ::=
        {: RESULT=new ParseNode("empty",parser.lexer.line_num); :}
@@ -2170,8 +2204,17 @@ field_access ::=
                pn.addChild("field").addChild(id);
                RESULT=pn;
     :}
-//     |       SUPER DOT IDENTIFIER
-//     |       name DOT SUPER DOT IDENTIFIER
+       |       SUPER DOT IDENTIFIER:id {: 
+               ParseNode pn=new ParseNode("superfieldaccess",parser.lexer.line_num);
+               pn.addChild("field").addChild(id);
+               RESULT=pn;
+    :}
+       |       name:name DOT SUPER DOT IDENTIFIER:id {: 
+               ParseNode pn=new ParseNode("supernamefieldaccess",parser.lexer.line_num);
+               pn.addChild("base").addChild(name);
+               pn.addChild("field").addChild(id);
+               RESULT=pn;
+    :}
        ;
 method_invocation ::=
                name:name LPAREN argument_list_opt:args RPAREN {: 
@@ -2539,3 +2582,10 @@ genreach_statement ::=
                pn.addChild("graphName").addChild(graphName);
                RESULT=pn; :}
        ;
+
+gen_def_reach_statement ::=
+               GEN_DEF_REACH IDENTIFIER:outputName SEMICOLON {: 
+               ParseNode pn=new ParseNode("gen_def_reach",parser.lexer.line_num);
+               pn.addChild("outputName").addChild(outputName);
+               RESULT=pn; :}
+       ;