Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有Yacc语法调试器吗?_C++_Debugging_Yacc_Visualizer - Fatal编程技术网

C++ 有Yacc语法调试器吗?

C++ 有Yacc语法调试器吗?,c++,debugging,yacc,visualizer,C++,Debugging,Yacc,Visualizer,我一直在帮助我的公司扩充一种已有二十多年历史的专有语言。它是一种大型图灵完整语言。将其翻译成另一种语法体系(如Antlr)不是一种选择(我不需要决定这一点) 在很大程度上,语法的扩展进展顺利。但每隔一段时间,我就会得到一个减量或减量 是很难消除的 有时(对我虚弱的大脑来说)根本没有意义 在经历了大量痛苦的y.output文件和实验性语法重构之后,我通常已经达到了我想要达到的目标。有时我不得不做出令人不满意的妥协 那么,是否有任何工具可以吸收yacc语法,从而增强浏览、试验和允许调试更改 如果

我一直在帮助我的公司扩充一种已有二十多年历史的专有语言。它是一种大型图灵完整语言。将其翻译成另一种语法体系(如Antlr)不是一种选择(我不需要决定这一点)

在很大程度上,语法的扩展进展顺利。但每隔一段时间,我就会得到一个减量或减量

  • 是很难消除的
  • 有时(对我虚弱的大脑来说)根本没有意义
在经历了大量痛苦的y.output文件和实验性语法重构之后,我通常已经达到了我想要达到的目标。有时我不得不做出令人不满意的妥协

那么,是否有任何工具可以吸收yacc语法,从而增强浏览、试验和允许调试更改

如果我添加一个产品,我希望看到的不仅仅是“无处不在的原子产品”(想想标识符)“与规则foo冲突”(是的,有更多的信息,s/r,r/r,但我想你明白我的意思)。除了戴上我的思维帽,试着想象一个符号堆栈和状态机之外,如果能有一些相互作用的暗示就好了

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

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

这是我得到的最好的工具:

您可能会从
yacc-d
获得一些帮助,它生成调试输出——它基本上给出了符号堆栈状态等的完整列表。输出内容密集且庞大,因此尝试直接读取所有内容很少能取得多大效果(无论如何,我从来没有这样做过)。但是,当您进行更改时(例如)会产生一个r/r冲突,您可以对旧语法和新语法运行
yacc-d
,然后对结果运行diff,以便更详细地了解是什么更改导致了冲突

然而,可能值得注意的是,s/r冲突通常是良性的——除非您相当确定这是一个问题,否则尝试“修复”它通常是不值得的。然而,r/r冲突的情况并非如此。虽然这些有时是良性的,但相对来说比较少见


编辑:哦,对不起,应该是-v。你提到了y.output,所以你显然已经知道该怎么做了。关键是,您不想直接查看y.output文件,而是要区分清楚显示的文件和没有显示的文件,以获得关于实际冲突的一些细节(不必看10行“东西”那很好。

谢谢,我已经在使用yacc本身的这些功能了。有时候感觉还不够。^~我不知道你的意思。对于我们的两个yaccs,-d意味着“输出令牌宏的头文件”。我刚刚添加了关于使用开关的更多信息--report=itemset。这就是你的意思吗?它生成一个文件y.output,其中包含所有状态转换信息。我正在使用它,但希望有一个更强大的交互式工具。Jerry是对的,S/R冲突不一定是bug。几乎每一种真正的语法都有一大堆。