gpt4 book ai didi

c - 尝试通过更改语法来解决 Shift Reduce 冲突

转载 作者:太空宇宙 更新时间:2023-11-04 08:22:15 27 4
gpt4 key购买 nike

给定以下语法规范:

Statement → { Statement* }
→ VarDecl
→ if ( Exp ) Statement else Statement
→ while ( Exp ) Statement
→ System.out.println ( Exp ) ;
→ id = Exp ;
→ id [ Exp ]= Exp ;

这些是我想出的用于 YACC/BISON 程序的规则。不过我有 Shift/Reduce 冲突。

StatementList:
'{' StatementList Statement '}'
| Statement
;

Statement:
| VarDecl
| IF '('Exp')' StatementList ELSE StatementList
| WHILE'('Exp')' StatementList
| SOP'('Exp')' ';'
| ID '=' Exp ';'
| ID'['Exp']' '=' Exp';'
;

也试过这个语法:

CompoundStatement:
'{' StatementList '}'

StatementList:
StatementList Statement
| Statement
;

Statement:
| VarDecl
| IF '('Exp')' Statement ELSE Statement
| WHILE'('Exp')' Statement
| SOP'('Exp')' ';'
| ID '=' Exp ';'
| ID'['Exp']' '=' Exp';'
| CompoundStatement
;

也没用。仍然有冲突。 (虽然这通过了我设置的测试用例)

这也没有:

StatementList
: %empty /* Explicit empty production, bison 3.0+ */
| StatementList Statement

Statement
: '{' StatementList '}'
| IF '('Exp')' Statement ELSE Statement
| /* ... and the rest of the statements */

有什么帮助吗?

最佳答案

  1. Statement 的产生式为空。您可能不打算这样做;你当然不需要;这可能是你们冲突的原因。

  2. 你的积木产生式是错误的。您需要定义 StatementList 以实现 Statement*,然后按照您的原始语法进行操作:

    StatementList
    : %empty /* Explicit empty production, bison 3.0+ */
    | StatementList Statement

    Statement
    : '{' StatementList '}'
    | IF '('Exp')' Statement ELSE Statement
    | /* ... and the rest of the statements */

关于c - 尝试通过更改语法来解决 Shift Reduce 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32899449/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com