【发布时间】:2026-02-14 23:55:01
【问题描述】:
我有这个 EBNF 表示法的语法:
expr -> expr (opt1 | opt2 | opt3) expr
我想将其转换为 BNF 以在 Bison 中使用它,但我在此遇到 shift/reduce 错误:
expr : expr opt1 expr | expr opt2 expr | expr opt3 expr
我想我在此过程中误解了一些东西。有什么帮助吗?
谢谢
【问题讨论】:
我有这个 EBNF 表示法的语法:
expr -> expr (opt1 | opt2 | opt3) expr
我想将其转换为 BNF 以在 Bison 中使用它,但我在此遇到 shift/reduce 错误:
expr : expr opt1 expr | expr opt2 expr | expr opt3 expr
我想我在此过程中误解了一些东西。有什么帮助吗?
谢谢
【问题讨论】:
怎么样
expr: expr optexpr expr
optexpr: opt1 | opt2 | opt3
移位/减少错误是由于 expr 前缀重叠造成的。通过引入另一个定义,对 expr 的解析变得明确。
【讨论】: