【问题标题】:How can I tell Bison I also expect reduce-reduce conflicts?我如何告诉 Bison 我也期望减少减少冲突?
【发布时间】:2010-01-18 19:40:42
【问题描述】:

我的 C#-ish 玩具语法现在有了它的第一个 reduce-reduce 冲突!我为自己感到骄傲。

不过,这对我来说似乎没问题(为此我关闭了 GLR 解析器)。问题是,虽然我知道 %expect 指令可以让 Bison 关闭有关移位/减少冲突的信息,但我找不到减少/减少冲突的等价物。那么我应该用什么来让它对我的 3 班次/减少和我的 2 次减少/减少保持沉默?

【问题讨论】:

  • 如果可以,请阅读 Aho 等人的 Dragon 书籍“编译器:原理、工具和技术”和“C 中的现代编译器实现”
  • 嗯,对于我可怜的学生身份来说,龙书有点贵。 :/ 尤其是因为我纯粹是出于爱好,而且几年前我肯定不会有关于编译器的课程。

标签: parsing grammar yacc bison


【解决方案1】:

来自 GNU Bison 文档,found here

对于普通的 LALR(1) 解析器, 减少/减少冲突更多 严重,应予以淘汰 完全。野牛总是会报告 减少/减少这些冲突 解析器。然而,使用 GLR 解析器, 这两种冲突都是家常便饭; 否则,就没有必要 使用 GLR 解析。因此,它也是 可以指定一个预期的数字 减少/减少 GLR 中的冲突 解析器,使用声明:

 %expect-rr n

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多