我的语法不断遇到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
;发布于 2015-07-06 07:56:55
在该语法中,block是block_statement是statement是sub_statement是block,您可以在不解决任何问题的情况下绕过那个特定的桑树丛。
所以你自然会有冲突,因为你的语法是模棱两可的。
也许您的意思是让sub_statement包含某种分隔的块?(BEGIN block NIGEB?)否则,我建议从sub_statement替代列表中删除block。
https://stackoverflow.com/questions/31225309
复制相似问题