微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c – 有Yacc语法调试器吗?

我一直在帮助我增加二十多年历史的专有语言.这是一个很大的图灵完整语言.将其翻译成另一种语法制度(如Antlr)不是一个选择(我不会这样做).

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

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

经过很多痛苦的盯着y.output文件和实验语法重构,我通常得到我想去的地方.有时我不得不做出不满意的妥协.

那么,有没有什么工具可以吸吮yacc语法,这可以增强浏览,实验和允许调试更改?

如果我添加一个生产,我想要看到的不仅仅是“原子生产在任何地方使用”(think identifier)“与规则foo冲突”(是的,有更多的信息,s / r,r / r,比,但我想你得到我的漂移).除了放在我的思维帽上,试图想象一个符号堆栈和状态机之外,还有一些相互作用的提示是很好的.

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

我的这个职位的目标是寻找外部工具,增加与yacc一起提供的语法调试功能.今天很痛苦,认设置.帮助我找到更好的交互式工具,比如可以使用Antlr的工具.

解决方法

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

然而,值得注意的是,s / r冲突通常是良性的 – 除非你确定这是一个问题,试图“修复”它经常是不值得的.对于r / r冲突而言也是如此.虽然这些有时是良性的,但它相对较少.

编辑:糟糕 – 对不起,应该是-v.你提到y.output,所以你显然已经知道如何做这个部分.关键是你不要直接查看y.output文件,而是在干净出来的那个文件之间做一个差异,而不是一个没有得到关于实际冲突的细节的区别(没有盯着10千万行的“东西”就好了.

原文地址:https://www.jb51.cc/c/116082.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐