java15.cup

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

CUP
1,264
字号
			LPAREN argument_list_opt RPAREN	|	primary DOT NEW IDENTIFIER type_arguments_opt			LPAREN argument_list_opt RPAREN class_body	;argument_list_opt ::=	|	argument_list	;argument_list ::=		expression_l	|	argument_list COMMA expression	;array_creation_expression ::=		NEW primitive_type dim_exprs dims_opt	|	NEW class_or_interface_type dim_exprs dims_opt	|	NEW primitive_type dims array_initializer	|	NEW class_or_interface_type dims array_initializer	;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	|	name DOT 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	|	name DOT 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 name RPAREN unary_expression_not_plus_minus	|	LPAREN name PLT reference_type_list_1 RPAREN unary_expression_not_plus_minus	|	LPAREN name dims RPAREN unary_expression_not_plus_minus	|	LPAREN name PLT reference_type_list_1 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	;instanceof_expression ::=		relational_expression	|	instanceof_expression INSTANCEOF reference_type	;equality_expression ::=		instanceof_expression	|	equality_expression EQEQ instanceof_expression	|	equality_expression NOTEQ instanceof_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 ::=		name         assignment_operator assignment_expression	|	field_access assignment_operator assignment_expression	|	array_access assignment_operator assignment_expression	;assignment_operator ::=		EQ	|	MULTEQ	|	DIVEQ	|	MODEQ	|	PLUSEQ	|	MINUSEQ	|	LSHIFTEQ	|	RSHIFTEQ	|	URSHIFTEQ	|	ANDEQ	|	XOREQ	|	OREQ	;expression ::=	assignment_expression	;// JLS-14 productions.type_parameters_opt ::= type_parameters | ;type_parameters ::=		PLT type_parameter_list_1	;type_parameter_list ::=		type_parameter_list COMMA type_parameter	|	type_parameter	;type_parameter_list_1 ::=		type_parameter_1	|	type_parameter_list COMMA type_parameter_1	;type_parameter ::=		type_variable type_bound_opt	;type_parameter_1 ::=		type_variable GT	|	type_variable type_bound_1// I don't think this production is really meant to be used.//	|	type_variable IMPLEMENTS reference_type_1	;type_bound_opt ::= type_bound | ;type_bound ::=		EXTENDS reference_type additional_bound_list_opt	;type_bound_1 ::=		EXTENDS reference_type_1	|	EXTENDS reference_type additional_bound_list_1	;additional_bound_list_opt ::= additional_bound_list | ;additional_bound_list ::=		additional_bound additional_bound_list	|	additional_bound	;additional_bound_list_1 ::=		additional_bound additional_bound_list_1	|	additional_bound_1	;additional_bound ::=		AND interface_type	;additional_bound_1 ::=		AND reference_type_1	;//////////////////////////////////////////////// the following productions are copied from the standard ones, but// 'name' all alone is not allowed.  The '_nn' stands for 'not name'.// this allows us to postpone the decision whether '(x)' is an expression// or a type-cast until we can see enough right context to make the proper// choice.postfix_expression_nn ::=		primary	// the 'name' production was removed here.	|	postincrement_expression	|	postdecrement_expression	;unary_expression_nn ::=		preincrement_expression	|	predecrement_expression	|	PLUS unary_expression	|	MINUS unary_expression	|	unary_expression_not_plus_minus_nn	;unary_expression_not_plus_minus_nn ::=		postfix_expression_nn	|	COMP unary_expression	|	NOT unary_expression	|	cast_expression	;multiplicative_expression_nn ::=		unary_expression_nn	|	multiplicative_expression MULT unary_expression	|	multiplicative_expression DIV unary_expression	|	multiplicative_expression MOD unary_expression	;additive_expression_nn ::=		multiplicative_expression_nn	|	additive_expression PLUS multiplicative_expression	|	additive_expression MINUS multiplicative_expression	;shift_expression_nn ::=		additive_expression_nn	|	shift_expression LSHIFT additive_expression	|	shift_expression RSHIFT additive_expression	|	shift_expression URSHIFT additive_expression	;relational_expression_nn ::=		shift_expression_nn	|	relational_expression LT shift_expression	|	relational_expression GT shift_expression	|	relational_expression LTEQ shift_expression	|	relational_expression GTEQ shift_expression	;instanceof_expression_nn ::=		relational_expression_nn	|	instanceof_expression INSTANCEOF reference_type	;equality_expression_nn ::=		instanceof_expression_nn	|	equality_expression EQEQ instanceof_expression	|	equality_expression NOTEQ instanceof_expression	;and_expression_nn ::=		equality_expression_nn	|	and_expression AND equality_expression	;exclusive_or_expression_nn ::=		and_expression_nn	|	exclusive_or_expression XOR and_expression	;inclusive_or_expression_nn ::=		exclusive_or_expression_nn	|	inclusive_or_expression OR exclusive_or_expression	;conditional_and_expression_nn ::=		inclusive_or_expression_nn	|	conditional_and_expression ANDAND inclusive_or_expression	;conditional_or_expression_nn ::=		conditional_and_expression_nn	|	conditional_or_expression OROR conditional_and_expression	;conditional_expression_nn ::=		conditional_or_expression_nn	|	conditional_or_expression QUESTION expression 			COLON conditional_expression	;assignment_expression_nn ::=		conditional_expression_nn	|	assignment	;expression_nn_opt ::=	|	expression_nn	;expression_nn ::=	assignment_expression_nn	;constant_expression_nn ::=		expression_nn	;//////////////////////////////////////////////// the following productions are copied from the standard ones, but// any right-hand non-terminal has _l appended, and the// relational_expression_l production reflects that fact that LT// can get confused with PLT in this (right hand) context.// The '_l' stands for 'list', since argument_list is the// only production with the confusing right-hand context.unary_expression_l ::=		preincrement_expression_l	|	predecrement_expression_l	|	PLUS unary_expression_l	|	MINUS unary_expression_l	|	unary_expression_not_plus_minus_l	;preincrement_expression_l ::=		PLUSPLUS unary_expression_l	;predecrement_expression_l ::=		MINUSMINUS unary_expression_l	;unary_expression_not_plus_minus_l ::=		postfix_expression	|	COMP unary_expression_l	|	NOT unary_expression_l	|	cast_expression_l	;cast_expression_l ::=		LPAREN primitive_type dims_opt RPAREN unary_expression_l	|	LPAREN name RPAREN unary_expression_not_plus_minus_l	|	LPAREN name PLT reference_type_list_1 RPAREN unary_expression_not_plus_minus_l	|	LPAREN name dims RPAREN unary_expression_not_plus_minus_l	|	LPAREN name PLT reference_type_list_1 dims RPAREN unary_expression_not_plus_minus_l	;multiplicative_expression_l ::=		unary_expression_l	|	multiplicative_expression MULT unary_expression_l	|	multiplicative_expression DIV unary_expression_l	|	multiplicative_expression MOD unary_expression_l	;additive_expression_l ::=		multiplicative_expression_l	|	additive_expression PLUS multiplicative_expression_l	|	additive_expression MINUS multiplicative_expression_l	;shift_expression_l ::=		additive_expression_l	|	shift_expression LSHIFT additive_expression_l	|	shift_expression RSHIFT additive_expression_l	|	shift_expression URSHIFT additive_expression_l	;relational_expression_l ::=		shift_expression_l	|	relational_expression LT shift_expression_l// this is where the _l forms differ: we can possibly confuse an LT// for a PLT in this context.	|	relational_expression PLT shift_expression_l	|	relational_expression GT shift_expression_l	|	relational_expression LTEQ shift_expression_l	|	relational_expression GTEQ shift_expression_l	;instanceof_expression_l ::=		relational_expression_l	|	instanceof_expression INSTANCEOF reference_type	;equality_expression_l ::=		instanceof_expression_l	|	equality_expression EQEQ instanceof_expression_l	|	equality_expression NOTEQ instanceof_expression_l	;and_expression_l ::=		equality_expression_l	|	and_expression AND equality_expression_l	;exclusive_or_expression_l ::=		and_expression_l	|	exclusive_or_expression XOR and_expression_l	;inclusive_or_expression_l ::=		exclusive_or_expression_l	|	inclusive_or_expression OR exclusive_or_expression_l	;conditional_and_expression_l ::=		inclusive_or_expression_l	|	conditional_and_expression ANDAND inclusive_or_expression_l	;conditional_or_expression_l ::=		conditional_and_expression_l	|	conditional_or_expression OROR conditional_and_expression_l	;conditional_expression_l ::=		conditional_or_expression_l	|	conditional_or_expression QUESTION expression 			COLON conditional_expression_l	;assignment_expression_l ::=		conditional_expression_l	|	assignment_l	;assignment_l ::=		name         assignment_operator assignment_expression_l	|	field_access assignment_operator assignment_expression_l	|	array_access assignment_operator assignment_expression_l	;expression_l ::=	assignment_expression_l	;statement_expression_l ::=		assignment_l	|	preincrement_expression_l	|	predecrement_expression_l	|	postincrement_expression	|	postdecrement_expression	|	method_invocation	|	class_instance_creation_expression	;

⌨️ 快捷键说明

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