X-Git-Url: http://plrg.eecs.uci.edu/git/?p=IRC.git;a=blobdiff_plain;f=Robust%2FJavaGrammar%2FParse%2Fjava10.cup;fp=Robust%2FJavaGrammar%2FParse%2Fjava10.cup;h=879210e3bcd3dbe91705d523ef32238d747b138b;hp=0000000000000000000000000000000000000000;hb=e7cbc88a1d4990e3426081fd52d658780aef4c68;hpb=6252e70d2488b82f1848be20647246e5c1bd45d1 diff --git a/Robust/JavaGrammar/Parse/java10.cup b/Robust/JavaGrammar/Parse/java10.cup new file mode 100644 index 00000000..879210e3 --- /dev/null +++ b/Robust/JavaGrammar/Parse/java10.cup @@ -0,0 +1,825 @@ +package Parse; + +import java_cup.runtime.*; + +/* Java 1.0 parser for CUP. + * Copyright (C) 1998 C. Scott Ananian + * This program is released under the terms of the GPL; see the file + * COPYING for more details. There is NO WARRANTY on this code. + */ + +parser code {: + Lexer lexer; + + public Grm10(Lexer l) { + this(); + lexer=l; + } + + public void syntax_error(java_cup.runtime.Symbol current) { + report_error("Syntax error (" + current.sym + ")", current); + } + public void report_error(String message, java_cup.runtime.Symbol info) { + lexer.errorMsg(message, info); + } +:}; + +scan with {: return lexer.nextToken(); :}; + +terminal BOOLEAN; // primitive_type +terminal BYTE, SHORT, INT, LONG, CHAR; // integral_type +terminal FLOAT, DOUBLE; // floating_point_type +terminal LBRACK, RBRACK; // array_type +terminal java.lang.String IDENTIFIER; // name +terminal DOT; // qualified_name +terminal SEMICOLON, MULT, COMMA, LBRACE, RBRACE, EQ, LPAREN, RPAREN, COLON; +terminal PACKAGE; // package_declaration +terminal IMPORT; // import_declaration +terminal PUBLIC, PROTECTED, PRIVATE; // modifier +terminal STATIC; // modifier +terminal ABSTRACT, FINAL, NATIVE, SYNCHRONIZED, TRANSIENT, VOLATILE; +terminal CLASS; // class_declaration +terminal EXTENDS; // super +terminal IMPLEMENTS; // interfaces +terminal VOID; // method_header +terminal THROWS; // throws +terminal THIS, SUPER; // explicit_constructor_invocation +terminal INTERFACE; // interface_declaration +terminal IF, ELSE; // if_then_statement, if_then_else_statement +terminal SWITCH; // switch_statement +terminal CASE, DEFAULT; // switch_label +terminal DO, WHILE; // while_statement, do_statement +terminal FOR; // for_statement +terminal BREAK; // break_statement +terminal CONTINUE; // continue_statement +terminal RETURN; // return_statement +terminal THROW; // throw_statement +terminal TRY; // try_statement +terminal CATCH; // catch_clause +terminal FINALLY; // finally +terminal NEW; // class_instance_creation_expression +terminal PLUSPLUS; // postincrement_expression +terminal MINUSMINUS; // postdecrement_expression +terminal PLUS, MINUS, COMP, NOT, DIV, MOD; +terminal LSHIFT, RSHIFT, URSHIFT; // shift_expression +terminal LT, GT, LTEQ, GTEQ, INSTANCEOF; // relational_expression +terminal EQEQ, NOTEQ; // equality_expression +terminal AND; // and_expression +terminal XOR; // exclusive_or_expression +terminal OR; // inclusive_or_expression +terminal ANDAND; // conditional_and_expression +terminal OROR; // conditional_or_expression +terminal QUESTION; // conditional_expression +terminal MULTEQ, DIVEQ, MODEQ, PLUSEQ, MINUSEQ; // assignment_operator +terminal LSHIFTEQ, RSHIFTEQ, URSHIFTEQ; // assignment_operator +terminal ANDEQ, XOREQ, OREQ; // assignment_operator + +terminal java.lang.Number INTEGER_LITERAL; +terminal java.lang.Number FLOATING_POINT_LITERAL; +terminal java.lang.Boolean BOOLEAN_LITERAL; +terminal java.lang.Character CHARACTER_LITERAL; +terminal java.lang.String STRING_LITERAL; +terminal NULL_LITERAL; + +// Reserved but unused: +terminal CONST, GOTO; +// lexer compatibility with Java 1.2: +terminal STRICTFP; +// lexer compatibility with Java 1.4 +terminal ASSERT; +// lexer compatibility with Java 1.5 +terminal ELLIPSIS; +terminal ENUM; + +// 19.2) The Syntactic Grammar +non terminal goal; +// 19.3) Lexical Structure +non terminal literal; +// 19.4) Types, Values, and Variables +non terminal type, primitive_type, numeric_type; +non terminal integral_type, floating_point_type; +non terminal reference_type; +non terminal class_or_interface_type; +non terminal class_type, interface_type; +non terminal array_type; +// 19.5) Names +non terminal name, simple_name, qualified_name; +// 19.6) Packages +non terminal compilation_unit; +non terminal package_declaration_opt, package_declaration; +non terminal import_declarations_opt, import_declarations; +non terminal type_declarations_opt, type_declarations; +non terminal import_declaration; +non terminal single_type_import_declaration; +non terminal type_import_on_demand_declaration; +non terminal type_declaration; +// 19.7) Productions used only in the LALR(1) grammar +non terminal modifiers_opt, modifiers, modifier; +// 19.8.1) Class Declaration +non terminal class_declaration, super, super_opt; +non terminal interfaces, interfaces_opt, interface_type_list; +non terminal class_body; +non terminal class_body_declarations, class_body_declarations_opt; +non terminal class_body_declaration, class_member_declaration; +// 19.8.2) Field Declarations +non terminal field_declaration, variable_declarators, variable_declarator; +non terminal variable_declarator_id, variable_initializer; +// 19.8.3) Method Declarations +non terminal method_declaration, method_header, method_declarator; +non terminal formal_parameter_list_opt, formal_parameter_list; +non terminal formal_parameter; +non terminal throws_opt, throws; +non terminal class_type_list, method_body; +// 19.8.4) Static Initializers +non terminal static_initializer; +// 19.8.5) Constructor Declarations +non terminal constructor_declaration, constructor_declarator; +non terminal constructor_body; +non terminal explicit_constructor_invocation; +// 19.9.1) Interface Declarations +non terminal interface_declaration; +non terminal extends_interfaces_opt, extends_interfaces; +non terminal interface_body; +non terminal interface_member_declarations_opt, interface_member_declarations; +non terminal interface_member_declaration, constant_declaration; +non terminal abstract_method_declaration; +// 19.10) Arrays +non terminal array_initializer; +non terminal variable_initializers; +// 19.11) Blocks and Statements +non terminal block; +non terminal block_statements_opt, block_statements, block_statement; +non terminal local_variable_declaration_statement, local_variable_declaration; +non terminal statement, statement_no_short_if; +non terminal statement_without_trailing_substatement; +non terminal empty_statement; +non terminal labeled_statement, labeled_statement_no_short_if; +non terminal expression_statement, statement_expression; +non terminal if_then_statement; +non terminal if_then_else_statement, if_then_else_statement_no_short_if; +non terminal switch_statement, switch_block; +non terminal switch_block_statement_groups; +non terminal switch_block_statement_group; +non terminal switch_labels, switch_label; +non terminal while_statement, while_statement_no_short_if; +non terminal do_statement; +non terminal for_statement, for_statement_no_short_if; +non terminal for_init_opt, for_init; +non terminal for_update_opt, for_update; +non terminal statement_expression_list; +non terminal identifier_opt; +non terminal break_statement, continue_statement; +non terminal return_statement, throw_statement; +non terminal synchronized_statement, try_statement; +non terminal catches_opt, catches, catch_clause; +non terminal finally; +// 19.12) Expressions +non terminal primary, primary_no_new_array; +non terminal class_instance_creation_expression; +non terminal argument_list_opt, argument_list; +non terminal array_creation_expression; +non terminal dim_exprs, dim_expr, dims_opt, dims; +non terminal field_access, method_invocation, array_access; +non terminal postfix_expression; +non terminal postincrement_expression, postdecrement_expression; +non terminal unary_expression, unary_expression_not_plus_minus; +non terminal preincrement_expression, predecrement_expression; +non terminal cast_expression; +non terminal multiplicative_expression, additive_expression; +non terminal shift_expression, relational_expression, equality_expression; +non terminal and_expression, exclusive_or_expression, inclusive_or_expression; +non terminal conditional_and_expression, conditional_or_expression; +non terminal conditional_expression, assignment_expression; +non terminal assignment; +non terminal left_hand_side; +non terminal assignment_operator; +non terminal expression_opt, expression; +non terminal constant_expression; + +start with goal; + +// 19.2) The Syntactic Grammar +goal ::= compilation_unit + ; + +// 19.3) Lexical Structure. +literal ::= INTEGER_LITERAL + | FLOATING_POINT_LITERAL + | BOOLEAN_LITERAL + | CHARACTER_LITERAL + | STRING_LITERAL + | NULL_LITERAL + ; + +// 19.4) Types, Values, and Variables +type ::= primitive_type + | reference_type + ; +primitive_type ::= + numeric_type + | BOOLEAN + ; +numeric_type::= integral_type + | floating_point_type + ; +integral_type ::= + BYTE + | SHORT + | INT + | LONG + | CHAR + ; +floating_point_type ::= + FLOAT + | DOUBLE + ; + +reference_type ::= + class_or_interface_type + | array_type + ; +class_or_interface_type ::= name; + +class_type ::= class_or_interface_type; +interface_type ::= class_or_interface_type; + +array_type ::= primitive_type LBRACK RBRACK + | name LBRACK RBRACK + | array_type LBRACK RBRACK + ; + +// 19.5) Names +name ::= simple_name + | qualified_name + ; +simple_name ::= IDENTIFIER + ; +qualified_name ::= + name DOT IDENTIFIER + ; + +// 19.6) Packages +compilation_unit ::= + package_declaration_opt + import_declarations_opt + type_declarations_opt + ; +package_declaration_opt ::= package_declaration | ; +import_declarations_opt ::= import_declarations | ; +type_declarations_opt ::= type_declarations | ; + +import_declarations ::= + import_declaration + | import_declarations import_declaration + ; +type_declarations ::= + type_declaration + | type_declarations type_declaration + ; +package_declaration ::= + PACKAGE name SEMICOLON + ; +import_declaration ::= + single_type_import_declaration + | type_import_on_demand_declaration + ; +single_type_import_declaration ::= + IMPORT name SEMICOLON + ; +type_import_on_demand_declaration ::= + IMPORT name DOT MULT SEMICOLON + ; +type_declaration ::= + class_declaration + | interface_declaration + | SEMICOLON + ; + +// 19.7) Productions used only in the LALR(1) grammar +modifiers_opt::= + | modifiers + ; +modifiers ::= modifier + | modifiers modifier + ; +modifier ::= PUBLIC | PROTECTED | PRIVATE + | STATIC + | ABSTRACT | FINAL | NATIVE | SYNCHRONIZED | TRANSIENT | VOLATILE + ; + +// 19.8) Classes + +// 19.8.1) Class Declaration: +class_declaration ::= + modifiers_opt CLASS IDENTIFIER super_opt interfaces_opt class_body + ; +super ::= EXTENDS class_type + ; +super_opt ::= + | super + ; +interfaces ::= IMPLEMENTS interface_type_list + ; +interfaces_opt::= + | interfaces + ; +interface_type_list ::= + interface_type + | interface_type_list COMMA interface_type + ; +class_body ::= LBRACE class_body_declarations_opt RBRACE + ; +class_body_declarations_opt ::= + | class_body_declarations ; +class_body_declarations ::= + class_body_declaration + | class_body_declarations class_body_declaration + ; +class_body_declaration ::= + class_member_declaration + | static_initializer + | constructor_declaration + ; +class_member_declaration ::= + field_declaration + | method_declaration + | SEMICOLON + ; + +// 19.8.2) Field Declarations +field_declaration ::= + modifiers_opt type variable_declarators SEMICOLON + ; +variable_declarators ::= + variable_declarator + | variable_declarators COMMA variable_declarator + ; +variable_declarator ::= + variable_declarator_id + | variable_declarator_id EQ variable_initializer + ; +variable_declarator_id ::= + IDENTIFIER + | variable_declarator_id LBRACK RBRACK + ; +variable_initializer ::= + expression + | array_initializer + ; + +// 19.8.3) Method Declarations +method_declaration ::= + method_header method_body + ; +method_header ::= + modifiers_opt type method_declarator throws_opt + | modifiers_opt VOID method_declarator throws_opt + ; +method_declarator ::= + IDENTIFIER LPAREN formal_parameter_list_opt RPAREN + | method_declarator LBRACK RBRACK + ; +formal_parameter_list_opt ::= + | formal_parameter_list + ; +formal_parameter_list ::= + formal_parameter + | formal_parameter_list COMMA formal_parameter + ; +formal_parameter ::= + type variable_declarator_id + ; +throws_opt ::= + | throws + ; +throws ::= THROWS class_type_list + ; +class_type_list ::= + class_type + | class_type_list COMMA class_type + ; +method_body ::= block + | SEMICOLON + ; + +// 19.8.4) Static Initializers +static_initializer ::= + STATIC block + ; + +// 19.8.5) Constructor Declarations +constructor_declaration ::= + modifiers_opt constructor_declarator throws_opt + constructor_body + ; +constructor_declarator ::= + simple_name LPAREN formal_parameter_list_opt RPAREN + ; +constructor_body ::= + LBRACE explicit_constructor_invocation + block_statements RBRACE + | LBRACE explicit_constructor_invocation RBRACE + | LBRACE block_statements RBRACE + | LBRACE RBRACE + ; +explicit_constructor_invocation ::= + THIS LPAREN argument_list_opt RPAREN SEMICOLON + | SUPER LPAREN argument_list_opt RPAREN SEMICOLON + ; + +// 19.9) Interfaces + +// 19.9.1) Interface Declarations +interface_declaration ::= + modifiers_opt INTERFACE IDENTIFIER extends_interfaces_opt + interface_body + ; +extends_interfaces_opt ::= + | extends_interfaces + ; +extends_interfaces ::= + EXTENDS interface_type + | extends_interfaces COMMA interface_type + ; +interface_body ::= + LBRACE interface_member_declarations_opt RBRACE + ; +interface_member_declarations_opt ::= + | interface_member_declarations + ; +interface_member_declarations ::= + interface_member_declaration + | interface_member_declarations interface_member_declaration + ; +interface_member_declaration ::= + constant_declaration + | abstract_method_declaration + | SEMICOLON + ; +constant_declaration ::= + field_declaration + ; +abstract_method_declaration ::= + method_header SEMICOLON + ; + +// 19.10) Arrays +array_initializer ::= + LBRACE variable_initializers COMMA RBRACE + | LBRACE variable_initializers RBRACE + | LBRACE COMMA RBRACE + | LBRACE RBRACE + ; +variable_initializers ::= + variable_initializer + | variable_initializers COMMA variable_initializer + ; + +// 19.11) Blocks and Statements +block ::= LBRACE block_statements_opt RBRACE + ; +block_statements_opt ::= + | block_statements + ; +block_statements ::= + block_statement + | block_statements block_statement + ; +block_statement ::= + local_variable_declaration_statement + | statement + ; +local_variable_declaration_statement ::= + local_variable_declaration SEMICOLON + ; +local_variable_declaration ::= + type variable_declarators + ; +statement ::= statement_without_trailing_substatement + | labeled_statement + | if_then_statement + | if_then_else_statement + | while_statement + | for_statement + ; +statement_no_short_if ::= + statement_without_trailing_substatement + | labeled_statement_no_short_if + | if_then_else_statement_no_short_if + | while_statement_no_short_if + | for_statement_no_short_if + ; +statement_without_trailing_substatement ::= + block + | empty_statement + | expression_statement + | switch_statement + | do_statement + | break_statement + | continue_statement + | return_statement + | synchronized_statement + | throw_statement + | try_statement + ; +empty_statement ::= + SEMICOLON + ; +labeled_statement ::= + IDENTIFIER COLON statement + ; +labeled_statement_no_short_if ::= + IDENTIFIER COLON statement_no_short_if + ; +expression_statement ::= + statement_expression SEMICOLON + ; +statement_expression ::= + assignment + | preincrement_expression + | predecrement_expression + | postincrement_expression + | postdecrement_expression + | method_invocation + | class_instance_creation_expression + ; +if_then_statement ::= + IF LPAREN expression RPAREN statement + ; +if_then_else_statement ::= + IF LPAREN expression RPAREN statement_no_short_if + ELSE statement + ; +if_then_else_statement_no_short_if ::= + IF LPAREN expression RPAREN statement_no_short_if + ELSE statement_no_short_if + ; +switch_statement ::= + SWITCH LPAREN expression RPAREN switch_block + ; +switch_block ::= + LBRACE switch_block_statement_groups switch_labels RBRACE + | LBRACE switch_block_statement_groups RBRACE + | LBRACE switch_labels RBRACE + | LBRACE RBRACE + ; +switch_block_statement_groups ::= + switch_block_statement_group + | switch_block_statement_groups switch_block_statement_group + ; +switch_block_statement_group ::= + switch_labels block_statements + ; +switch_labels ::= + switch_label + | switch_labels switch_label + ; +switch_label ::= + CASE constant_expression COLON + | DEFAULT COLON + ; + +while_statement ::= + WHILE LPAREN expression RPAREN statement + ; +while_statement_no_short_if ::= + WHILE LPAREN expression RPAREN statement_no_short_if + ; +do_statement ::= + DO statement WHILE LPAREN expression RPAREN SEMICOLON + ; +for_statement ::= + FOR LPAREN for_init_opt SEMICOLON expression_opt SEMICOLON + for_update_opt RPAREN statement + ; +for_statement_no_short_if ::= + FOR LPAREN for_init_opt SEMICOLON expression_opt SEMICOLON + for_update_opt RPAREN statement_no_short_if + ; +for_init_opt ::= + | for_init + ; +for_init ::= statement_expression_list + | local_variable_declaration + ; +for_update_opt ::= + | for_update + ; +for_update ::= statement_expression_list + ; +statement_expression_list ::= + statement_expression + | statement_expression_list COMMA statement_expression + ; + +identifier_opt ::= + | IDENTIFIER + ; + +break_statement ::= + BREAK identifier_opt SEMICOLON + ; + +continue_statement ::= + CONTINUE identifier_opt SEMICOLON + ; +return_statement ::= + RETURN expression_opt SEMICOLON + ; +throw_statement ::= + THROW expression SEMICOLON + ; +synchronized_statement ::= + SYNCHRONIZED LPAREN expression RPAREN block + ; +try_statement ::= + TRY block catches + | TRY block catches_opt finally + ; +catches_opt ::= + | catches + ; +catches ::= catch_clause + | catches catch_clause + ; +catch_clause ::= + CATCH LPAREN formal_parameter RPAREN block + ; +finally ::= FINALLY block + ; + +// 19.12) Expressions +primary ::= primary_no_new_array + | array_creation_expression + ; +primary_no_new_array ::= + literal + | THIS + | LPAREN expression RPAREN + | class_instance_creation_expression + | field_access + | method_invocation + | array_access + ; +class_instance_creation_expression ::= + NEW class_type LPAREN argument_list_opt RPAREN + ; +argument_list_opt ::= + | argument_list + ; +argument_list ::= + expression + | argument_list COMMA expression + ; +array_creation_expression ::= + NEW primitive_type dim_exprs dims_opt + | NEW class_or_interface_type dim_exprs dims_opt + ; +dim_exprs ::= dim_expr + | dim_exprs dim_expr + ; +dim_expr ::= LBRACK expression RBRACK + ; +dims_opt ::= + | dims + ; +dims ::= LBRACK RBRACK + | dims LBRACK RBRACK + ; +field_access ::= + primary DOT IDENTIFIER + | SUPER DOT IDENTIFIER + ; +method_invocation ::= + name LPAREN argument_list_opt RPAREN + | primary DOT IDENTIFIER LPAREN argument_list_opt RPAREN + | SUPER DOT IDENTIFIER LPAREN argument_list_opt RPAREN + ; +array_access ::= + name LBRACK expression RBRACK + | primary_no_new_array LBRACK expression RBRACK + ; +postfix_expression ::= + primary + | name + | postincrement_expression + | postdecrement_expression + ; +postincrement_expression ::= + postfix_expression PLUSPLUS + ; +postdecrement_expression ::= + postfix_expression MINUSMINUS + ; +unary_expression ::= + preincrement_expression + | predecrement_expression + | PLUS unary_expression + | MINUS unary_expression + | unary_expression_not_plus_minus + ; +preincrement_expression ::= + PLUSPLUS unary_expression + ; +predecrement_expression ::= + MINUSMINUS unary_expression + ; +unary_expression_not_plus_minus ::= + postfix_expression + | COMP unary_expression + | NOT unary_expression + | cast_expression + ; +cast_expression ::= + LPAREN primitive_type dims_opt RPAREN unary_expression + | LPAREN expression RPAREN unary_expression_not_plus_minus + | LPAREN name dims RPAREN unary_expression_not_plus_minus + ; +multiplicative_expression ::= + unary_expression + | multiplicative_expression MULT unary_expression + | multiplicative_expression DIV unary_expression + | multiplicative_expression MOD unary_expression + ; +additive_expression ::= + multiplicative_expression + | additive_expression PLUS multiplicative_expression + | additive_expression MINUS multiplicative_expression + ; +shift_expression ::= + additive_expression + | shift_expression LSHIFT additive_expression + | shift_expression RSHIFT additive_expression + | shift_expression URSHIFT additive_expression + ; +relational_expression ::= + shift_expression + | relational_expression LT shift_expression + | relational_expression GT shift_expression + | relational_expression LTEQ shift_expression + | relational_expression GTEQ shift_expression + | relational_expression INSTANCEOF reference_type + ; +equality_expression ::= + relational_expression + | equality_expression EQEQ relational_expression + | equality_expression NOTEQ relational_expression + ; +and_expression ::= + equality_expression + | and_expression AND equality_expression + ; +exclusive_or_expression ::= + and_expression + | exclusive_or_expression XOR and_expression + ; +inclusive_or_expression ::= + exclusive_or_expression + | inclusive_or_expression OR exclusive_or_expression + ; +conditional_and_expression ::= + inclusive_or_expression + | conditional_and_expression ANDAND inclusive_or_expression + ; +conditional_or_expression ::= + conditional_and_expression + | conditional_or_expression OROR conditional_and_expression + ; +conditional_expression ::= + conditional_or_expression + | conditional_or_expression QUESTION expression + COLON conditional_expression + ; +assignment_expression ::= + conditional_expression + | assignment + ; +assignment ::= left_hand_side assignment_operator assignment_expression + ; +left_hand_side ::= + name + | field_access + | array_access + ; +assignment_operator ::= + EQ + | MULTEQ + | DIVEQ + | MODEQ + | PLUSEQ + | MINUSEQ + | LSHIFTEQ + | RSHIFTEQ + | URSHIFTEQ + | ANDEQ + | XOREQ + | OREQ + ; +expression_opt ::= + | expression + ; +expression ::= assignment_expression + ; +constant_expression ::= + expression + ;