java15.cup

来自「tiger编译器的Java实现」· CUP 代码 · 共 1,264 行 · 第 1/3 页

CUP
1,264
字号
package Parse;import java_cup.runtime.*;/* Java 1.5 parser for CUP. * (actually "Java 1.4 with JSR-14" parser, *  since Java 1.5 has not yet been finalized) * Copyright (C) 2002 C. Scott Ananian <cananian@alumni.princeton.edu> * This program is released under the terms of the GPL; see the file * COPYING for more details.  There is NO WARRANTY on this code. *//*JDK 1.5 Features added:  parameterized types.  a "smart lexer" is necessary to fit this into  an LALR(1) grammar.*/parser code  {:   Lexer lexer;  public  Grm15(Lexer l) {    super();    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_typeterminal BYTE, SHORT, INT, LONG, CHAR; // integral_typeterminal FLOAT, DOUBLE; // floating_point_typeterminal LBRACK, RBRACK; // array_typeterminal IDENTIFIER; // nameterminal DOT; // qualified_nameterminal SEMICOLON, MULT, COMMA, LBRACE, RBRACE, EQ, LPAREN, RPAREN, COLON;terminal PACKAGE; // package_declarationterminal IMPORT; // import_declarationterminal PUBLIC, PROTECTED, PRIVATE; // modifierterminal STATIC; // modifierterminal ABSTRACT, FINAL, NATIVE, SYNCHRONIZED, TRANSIENT, VOLATILE;terminal CLASS; // class_declarationterminal EXTENDS; // superterminal IMPLEMENTS; // interfacesterminal VOID; // method_headerterminal THROWS; // throwsterminal THIS, SUPER; // explicit_constructor_invocationterminal INTERFACE; // interface_declarationterminal IF, ELSE; // if_then_statement, if_then_else_statementterminal SWITCH; // switch_statementterminal CASE, DEFAULT; // switch_labelterminal DO, WHILE; // while_statement, do_statementterminal FOR; // for_statementterminal BREAK; // break_statementterminal CONTINUE; // continue_statementterminal RETURN; // return_statementterminal THROW; // throw_statementterminal TRY; // try_statementterminal CATCH; // catch_clauseterminal FINALLY; // finallyterminal NEW; // class_instance_creation_expressionterminal PLUSPLUS; // postincrement_expressionterminal MINUSMINUS; // postdecrement_expressionterminal PLUS, MINUS, COMP, NOT, DIV, MOD;terminal LSHIFT, RSHIFT, URSHIFT; // shift_expressionterminal LT, GT, LTEQ, GTEQ, INSTANCEOF; // relational_expressionterminal EQEQ, NOTEQ; // equality_expressionterminal AND; // and_expressionterminal XOR; // exclusive_or_expressionterminal OR;  // inclusive_or_expressionterminal ANDAND; // conditional_and_expressionterminal OROR; // conditional_or_expressionterminal QUESTION; // conditional_expressionterminal MULTEQ, DIVEQ, MODEQ, PLUSEQ, MINUSEQ; // assignment_operatorterminal LSHIFTEQ, RSHIFTEQ, URSHIFTEQ; // assignment_operatorterminal ANDEQ, XOREQ, OREQ; // assignment_operatorterminal 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;// strictfp keyword, new in Java 1.2terminal STRICTFP;// assert keyword, new in Java 1.4terminal ASSERT; // assert_statement// 'start of a parameterized type' terminal, required for LALR(1) parsing// of casts to parameterized types. it's an "LT with lookahead".terminal PLT;// 19.2) The Syntactic Grammarnon terminal goal;// 19.3) Lexical Structurenon terminal literal;// 19.4) Types, Values, and Variablesnon 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) Namesnon terminal name, simple_name, qualified_name;// 19.6) Packagesnon 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) grammarnon terminal modifiers_opt, modifiers, modifier;// 19.8.1) Class Declarationnon 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 Declarationsnon terminal field_declaration, variable_declarators, variable_declarator;non terminal variable_declarator_id, variable_initializer;// 19.8.3) Method Declarationsnon 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 Initializersnon terminal static_initializer;// 19.8.5) Constructor Declarationsnon terminal constructor_declaration, constructor_declarator;non terminal constructor_body;non terminal explicit_constructor_invocation;// 19.9.1) Interface Declarationsnon 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) Arraysnon terminal array_initializer;non terminal variable_initializers;// 19.11) Blocks and Statementsnon 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;non terminal assert_statement;// 19.12) Expressionsnon 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 assignment_operator;non terminal expression;// JSR-14 2.1) Type Syntax 2.3) Handling Consecutive Type Bracketsnon terminal type_variable;non terminal type_arguments, type_arguments_opt;non terminal reference_type_list;non terminal reference_type_list_1, reference_type_1;non terminal reference_type_list_2, reference_type_2;non terminal reference_type_list_3, reference_type_3;// JSR-14 2.2) Parameterized Type Declarations 2.3) Handling Consecutive...non terminal type_parameters, type_parameters_opt;non terminal type_parameter, type_parameter_list;non terminal type_parameter_1, type_parameter_list_1;non terminal type_bound, type_bound_opt;non terminal type_bound_1;non terminal additional_bound_list, additional_bound_list_opt;non terminal additional_bound_list_1;non terminal additional_bound;non terminal additional_bound_1;// not mentioned in the JSR: need to reduce the precedence of instanceofnon terminal instanceof_expression;//// expressions which are Not a Namenon terminal postfix_expression_nn;non terminal unary_expression_nn;non terminal unary_expression_not_plus_minus_nn;non terminal multiplicative_expression_nn;non terminal additive_expression_nn;non terminal shift_expression_nn;non terminal relational_expression_nn;non terminal instanceof_expression_nn;non terminal equality_expression_nn;non terminal and_expression_nn;non terminal exclusive_or_expression_nn;non terminal inclusive_or_expression_nn;non terminal conditional_and_expression_nn;non terminal conditional_or_expression_nn;non terminal conditional_expression_nn;non terminal assignment_expression_nn;non terminal expression_nn, expression_nn_opt, constant_expression_nn;//// expressions where LT may be mistaken for PLTnon terminal unary_expression_l;non terminal preincrement_expression_l, predecrement_expression_l;non terminal unary_expression_not_plus_minus_l;non terminal cast_expression_l;non terminal multiplicative_expression_l;non terminal additive_expression_l;non terminal shift_expression_l;non terminal relational_expression_l;non terminal instanceof_expression_l;non terminal equality_expression_l;non terminal and_expression_l;non terminal exclusive_or_expression_l;non terminal inclusive_or_expression_l;non terminal conditional_and_expression_l;non terminal conditional_or_expression_l;non terminal conditional_expression_l;non terminal assignment_expression_l, assignment_l;non terminal expression_l;non terminal statement_expression_l;start with goal;// 19.2) The Syntactic Grammargoal ::=	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 Variablestype	::=	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/* note that the 'type_variable' production will come out of the grammar * as a 'class_or_interface_type' with a 'simple_name'.  The semantic * checker will have to resolve whether this is a class name or a type * variable */	|	array_type	;type_variable ::=		IDENTIFIER	;class_or_interface_type ::=		name type_arguments_opt	;class_type ::=	class_or_interface_type;interface_type ::= class_or_interface_type;		array_type ::=	primitive_type dims	|	name dims	|	name type_arguments dims	;type_arguments_opt ::= type_arguments | ;type_arguments ::=		PLT reference_type_list_1	;reference_type_list ::=		reference_type	|	reference_type_list COMMA reference_type	;reference_type_list_1 ::=		reference_type_1	|	reference_type_list COMMA reference_type_1	;reference_type_list_2 ::=		reference_type_2	|	reference_type_list COMMA reference_type_2	;reference_type_list_3 ::=		reference_type_3	|	reference_type_list COMMA reference_type_3	;// note the LT in place of the PLT, since the following RSHIFT will// confuse the lexer lookahead.reference_type_1 ::=		reference_type GT	|	name LT reference_type_list_2	|	name PLT reference_type_list_2	;reference_type_2 ::=		reference_type RSHIFT	|	name LT reference_type_list_3	|	name PLT reference_type_list_3	;reference_type_3 ::=		reference_type URSHIFT	;// 19.5) Namesname	::=	simple_name	|	qualified_name	;simple_name ::=	IDENTIFIER	;qualified_name ::=		name DOT IDENTIFIER	;// 19.6) Packagescompilation_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) grammarmodifiers_opt::=	|	modifiers	;modifiers ::= 	modifier	|	modifiers modifier	;modifier ::=	PUBLIC | PROTECTED | PRIVATE	|	STATIC	|	ABSTRACT | FINAL | NATIVE | SYNCHRONIZED | TRANSIENT | VOLATILE	|	STRICTFP // note that semantic analysis must check that the	                 // context of the modifier allows strictfp.	;// 19.8) Classes// 19.8.1) Class Declaration:

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?