0

我的语法不断遇到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
;
4

1 回答 1

1

在该语法中,a blockis a block_statementis a statementis a sub_statementis ablock并且您可以随意绕过特定的桑树丛,而无需解决任何问题。

所以很自然地你有冲突,因为你的语法是模棱两可的。

也许您的意思是sub_statement要包含某种分隔块?(BEGIN block NIGEB?)否则,我建议从替代block列表中删除。sub_statement

于 2015-07-05T23:56:55.240 回答