代码之家  ›  专栏  ›  技术社区  ›  Don Wakefield

有Yacc语法调试程序吗?

  •  11
  • Don Wakefield  · 技术社区  · 16 年前

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

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

    • 很难消除
    • 有时候(对我脆弱的大脑来说)就是没有意义。

    经过很多痛苦的凝视 Y.输出 文件和实验性的语法重构,我通常都能到达我想去的地方。有时我不得不做出令人不满意的妥协。

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

    如果我添加一个产品,我想看到的不仅仅是“到处使用的原子生产”(思考标识符)“与规则foo冲突”(是的,有更多的信息,S/R,R/R,但我认为你明白我的意思)。除了戴上我的思维帽,尝试想象一个符号堆栈和状态机之外,还有一些相互作用的暗示是很好的。

    更新:我想我应该澄清一下。我们使用伯克利游艇公司。我一直在用野牛的最新版本进行测试。对于输出,我用 --报告=项目集 .

    我的目标是寻找 外部的 工具 加强 与yacc一起提供的语法调试工具。今天使用默认设置很痛苦。帮助我找到更好的交互工具,比如那些可以与Antlr一起使用的工具。

    2 回复  |  直到 12 年前
        1
  •  7
  •   Jerry Coffin    16 年前

    可以 寻求帮助 yacc -d 它产生调试输出——它基本上给出了符号堆栈状态等的完整列表。输出是密集的和大量的,所以试图直接读取所有的内容很少能完成很多工作(无论如何,我从来没有这样做过)。但是,当您进行更改时,会产生(例如)R/R冲突,您可以运行 钇铝石榴石 在旧语法和新语法上,然后对结果运行diff,以更详细地了解导致冲突的更改。

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

    编辑:哎呀——对不起,应该是-v。你提到y.output,所以你显然已经知道该怎么做了。重点是,您不必直接查看y.output文件,而是在清晰显示的文件和不了解实际冲突细节的文件之间进行比较(不必看10行“stufacture”,这很好)。

        2
  •  2
  •   EToreo    16 年前
    推荐文章