我使用 Intellij IDEA/w Antlr 插件。
假设我编写了一个名为 mylang.abc
的文件。这是最终语言的示例。然后我必须使用该语言的语法编写 .g4 文件。
但是我想测试我写的语法是否正确。这是由 antlr Preview 完成的,但随着语言的发展,我需要用我理想的源代码测试每个规则,并将树分块。
一个理想的测试可能应该有这样的逻辑:这是源代码,(这是该行应该解析的规则-可选),这应该是理想解析的树->匹配测试?打印好的/糟糕。
我的语法测试方法正确吗?如果是的话,上面的例子是什么?
最佳答案
对于 ANTLR v3,我们创建了 gUnit,类似于 jUnit。最后,我决定采用这样的一系列方法也同样容易:
assertTreeEquals("a=b;", "expr", "(expr a = b)");
这是一种在语法的细粒度细节上找出错误的方法。另一种方法是简单地拥有大量完整的输入,涵盖您关心的所有可能的短语。然后,您可以拥有一个包含序列化树的文本文件,以便与解析器创建的树进行比较。一旦您对这些树感到满意,当您调整语法时,它们可以轻松检测到回归。
另一方面,我正在考虑在 Intellij 插件中创建一个自动化机制来创建与每个规则相关的单元测试。换句话说,一旦你有一个大的输入,你确定有正确的解析树,你可以单击一个按钮,该工具将自动创建一系列单元测试,每个短语/规则对一个。我还不相信它比仅仅拥有一个充满输入和输出错误的目录更有用,但我会调查。
关于testing - Antlr4语法测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24807438/