是否有Yacc语法调试器?

时间:2009-10-28 23:41:09

标签: c++ debugging yacc visualizer

我一直在帮助我公司内部增加一项二十年的专有语言。它是一种图灵完整的大型语言。将它翻译成另一种语法(如Antlr)不是一种选择(我不能做出决定)。

在大多数情况下,扩展语法已经顺利进行。但每隔一段时间我就会得到减少减少或减少转移

  • 难以消除
  • 有时只是没有意义(对我虚弱的大脑)

在经历了很多痛苦的盯着 y.output 文件和实验语法重构之后,我通常会到达我想去的地方。有时我不得不做出令人不满意的妥协。

那么,是否有任何工具可以吸收yacc语法,这可以增强浏览,试验和调试变更?

如果我添加一个产品,我希望看到的不仅仅是“在任何地方都使用的原子生产”(认为标识符)“与规则foo冲突”(是的,还有更多信息,s / r,r / r比那个,但我认为你得到了我的漂移。除了戴上我的思维上限并试图想象一个符号堆栈和状态机之外,有一些相互影响的暗示会很好。

更新:我想我应该澄清一下。我们使用Berkeley Yacc。我一直在使用最新版本的Bison进行测试。对于输出,我用 - report = itemset 编译了语法。

我在这篇文章中的目标是寻找外部工具,这些工具增强 yacc附带的语法调试工具。今天使用默认设置很痛苦。帮助我找到更好的交互式工具,例如可以与Antlr一起使用的工具。

2 个答案:

答案 0 :(得分:7)

可能yacc -d获得一些产生调试输出的帮助 - 它基本上给出了符号堆栈状态等的完整列表。输出是密集和庞大的,所以试图直接读取所有它很少完成很多(无论如何我从来没有)。但是,当您更改(例如)r / r冲突时,您可以对旧语法和新语法运行yacc -d,然后对结果运行diff,以获得更详细的运行 - 关于导致冲突的变化。

然而,值得注意的是,s / r冲突往往是良性的 - 除非你确定这是一个问题,试图“修复”它往往是不值得的。但是r / r冲突却不是这样。虽然这些有时良性,但它相对较少。

编辑:哎呀 - 对不起,应该是-v。你提到了y.output,所以你显然已经知道如何做这个部分了。关键是你不要试图直接查看y.output文件,而是在干净利落的文件和没有得到实际冲突细节的文件之间做差异(不要盯着10千万行的“东西”,这很好。

答案 1 :(得分:2)

这是我得到的最好的: http://tldp.org/HOWTO/Lex-YACC-HOWTO-7.html