【问题标题】:bison shift/reduce conflict野牛移位/减少冲突
【发布时间】:2013-07-25 16:53:41
【问题描述】:

在下面的简单语法中,关于状态 4 的冲突, 在不改变规则的情况下,“转变”可以成为采取的行动吗? (我认为默认情况下 shift 是野牛的首选动作)

%token one two three

%%

start : a;
a : X Y Z;
X : one;
Z : two | three;
Y : two | ;

%%

【问题讨论】:

    标签: parsing bison


    【解决方案1】:

    shift 是 bison 的首选操作,您可以在状态输出中看到它将在状态 4 中转换 two。它仍会报告 shift-reduce 冲突,但如果您愿意,可以将其视为警告。 (见%expect。)你最好修正一下语法:

    start : a;
    a : X Z | X Y Z;
    X : one;
    Y : two;
    Z : two | three;
    

    【讨论】:

      【解决方案2】:

      Shift 是默认设置,但这会导致生成的解析器为输入 one two 提供错误,因此这可能不是您想要的。相反,请遵循 rici 的建议并修正语法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-20
        • 1970-01-01
        • 2021-12-24
        • 2013-07-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多