我一直在帮助增强公司内已有 20 年历史的专有语言。它是一种大型的图灵完备语言。将其翻译成另一种语法体系(例如 Antlr)不是一种选择(我无法决定这一点)。
在大多数情况下,扩展语法进展顺利。但每隔一段时间我就会得到一个 reduce-reduce 或 shift-reduce
- 很难消除
- 有时只是没有意义(对我脆弱的大脑)
经过大量痛苦地盯着y.output文件和实验性的语法重构之后,我通常已经到了我想去的地方。有时我不得不做出不令人满意的妥协。
那么,是否有任何工具可以吸收 yacc 语法,从而增强浏览、试验并允许调试更改?
如果我添加一个产品,我希望看到的不仅仅是“到处使用的原子产品”(想想标识符)“与规则 foo 冲突”(是的,有更多的信息,s/r,r/r,比这更多,但我想你明白我的意思)。除了戴上我的思考帽并试图想象一个符号堆栈和状态机之外,如果能有一些相互作用的暗示会很好。
更新:我想我应该澄清一下。我们使用伯克利 Yacc。我一直在使用最新版本的 Bison 进行测试。对于输出,我使用--report=itemset编译了语法。
我写这篇文章的目标是寻找外部工具来增强yacc 附带的语法调试工具。今天使用默认设置很痛苦。帮助我找到更好的交互工具,例如可以与 Antlr 一起使用的工具。