我使用Intellij IDEA / w Antlr插件。
假设我写了一个名为mylang.abc
的文件。这是关于最终郎的样子的样本。然后我用这种语言的语法编写.g4文件。
但是我想测试我写的语法是否正确。这是通过antlr预览完成的,但随着语言的增长,我需要用理想的源代码测试每个规则并在树下进行块化。
一个理想的测试可能应该有逻辑:这是源代码,(这是该行应解析的规则 - 可选),这应该是理想解析的树 - >匹配测试?打印Ok / Oops。
我的方法在Grammar的测试中是否正确?如果是这样,上面的例子是什么?
答案 0 :(得分:3)
对于ANTLR v3,我们创建了gUnit,类似于jUnit。最后,我决定采用这样的一系列方法同样容易:
assertTreeEquals("a=b;", "expr", "(expr a = b)");
这是用你的语法来区分细粒度细节的错误的一种方法。另一种方法是简单地拥有大量的全部输入,涵盖您关注的所有可能的短语。然后,您可以使用序列化树的文本文件与解析器创建的树进行比较。一旦您对这些树感到满意,他们就可以在您调整语法时轻松检测到回归。
另一方面,我正在考虑在Intellij插件中创建一个自动机制来创建与每个规则相关的单元测试。换句话说,一旦你有一个大输入,你肯定有正确的解析树,你会点击一个按钮,该工具将自动创建一系列单元测试,每个短语/规则对一个。我还没有确信它比只有一个充满输入和输出错误的目录更有用,但我会调查。