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 + -
显示快捷键?