如何消除reduce/reduce、reduce/shift错误



我的语法一直遇到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
;

在该语法中,blockblock_statementstatementsub_statementblock,您可以在不解决任何问题的情况下随意绕过特定的桑树丛。

所以你自然会有冲突,因为你的语法不明确。

也许您的意思是sub_statement包含某种定界块?(BEGIN block NIGEB?(否则,我建议将blocksub_statement备选方案列表中删除。

相关内容

  • 没有找到相关文章

最新更新