我的语法一直遇到reduce/reduce和reduce/shift问题,但我不知道为什么或如何解决它。
这是我的
block ::=
block_statement
| block_statement block
;
block_statement ::=
type variable_declarators SEMICOLON
| statement
;
statement ::= sub_statement
| IF LPAREN boolexp RPAREN statement FI
| IF LPAREN boolexp RPAREN statement ELSE statement FI
| WHILE LPAREN boolexp RPAREN statement ELIHW
| FOR LPAREN assignment SEMICOLON boolexp SEMICOLON
statement_expression RPAREN statement ROF
;
sub_statement ::=
statement_expression SEMICOLON
| RETURN Exp SEMICOLON
| block
;
statement_expression ::=
assignment
| IDENTIFIER LPAREN argument_list RPAREN
| IDENTIFIER PLUSPLUS
| IDENTIFIER MINUSMINUS
;
在该语法中,block
是block_statement
是statement
是sub_statement
是block
,您可以在不解决任何问题的情况下随意绕过特定的桑树丛。
所以你自然会有冲突,因为你的语法不明确。
也许您的意思是sub_statement
包含某种定界块?(BEGIN block NIGEB
?(否则,我建议将block
从sub_statement
备选方案列表中删除。