testing - Antlr4语法测试

标签 testing junit antlr antlr4

我使用 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/

相关文章:

reactjs - 传递所有 props 的 HOC

ruby-on-rails-3 - capybara 访问方法无效

c - 用antlr解析评论

java - ANTLR树遍历器,多次返回值

c# - 替换 ANTLR 中标记的文本

r - 检查 R 中的日期是否为空?

javascript - 有时会进行带有特殊测试的 Jest

java - jUnit:通用测试类 - 将测试名称设置为类/方法名称以外的其他名称?

java - 使用注释将 Active TestSuite 切换到 JUnit 4

java - <jdbc :embedded-database> in context. xml 不起作用。想要启动一个 sql 脚本进行单元测试