从 Antlr 语法生成语法正确的句子

Ada*_*deg 6 grammar code-generation antlr

我有一个Xtext/Antlr 语法,可以解析Coffeescript的子集。我有一些测试用例,但我想做另一种测试:

  1. 从我的 Antlr 语法中生成随机的、语法正确的片段
  2. 将这些片段提供给原始的 CoffeeScript 解析器(调用coffee -ne "the sentence"
  3. 检查每个句子是否被coffeescript解析

因此,我可以确保我的解析器接受适当的子集,并且在某些情况下不会太宽松。现在,我被困在第一步了。如何从我的 Antlr 语法(也大量使用句法谓词)生成句子?所以我对解析句子的反面感兴趣。

我发现了一些相关的尝试,但答案根本不使用 Antlr,而是使用pythonclojureruby​​ 中的自定义语法。我更喜欢一个可行的解决方案,而不是关于如何实现它的提示。

Nat*_*rot 1

不,你不能这样做。如果你看一下 ANTLR 编译成的代码,你会发现它只是一个识别器,而不是一个生成器。

您提供的链接是最好的选择——采用您的 ANTLR 语法,去掉所有规则以使其成为正式语法,然后尝试通过其中一个程序运行它。

或者,如果您的 CoffeeScript 子集非常小,您可以采取生成随机标记字符串并丢弃所有无法解析的字符串的方法。