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

6

我有一个Xtext/Antlr语法,可以解析coffeescript的一个子集。 我有一些测试用例,但是我考虑做另一种类型的测试:

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

因此,我可以确保我的解析器接受一个正确的子集,并且在某些情况下不会过于宽松。 现在,我卡在了第一步。 我该如何从我的Antlr语法中生成句子(该语法还广泛使用语法断言)? 因此,我对与解析句子相反的过程感兴趣。

我发现了一些相关尝试,但是答案并没有使用Antlr,而是使用了PythonClojure或者Ruby中的自定义语法。我更希望得到一个可行的解决方案,而不是关于如何实现它的提示。
2个回答

1

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

你提供的链接是你最好的选择——拿出你的ANTLR语法,剥离所有规则,使其成为正式语法,然后尝试通过其中一个程序运行它。

或者,如果你的Coffeescript子集非常小,你可以采用生成随机令牌字符串并丢弃所有无法解析的字符串的方法。


0

我知道这是一个非常老的问题,但现在在VS Code中使用Mike Lischke的惊人扩展“ANTLR4语法语法支持”是可能的。

您可以右键单击语法中的任何规则,然后选择“为规则生成有效输入”。随机生成的有效输入将输出到ANTLR4句子生成输出。

请注意,如果您的语法中存在递归,您可能会达到默认递归限制,从而产生“⨱”字符(source)。搜索此字符的原因实际上就是我找到这个问题的原因。

有关扩展的更多详细信息,请参阅文档:https://github.com/mike-lischke/vscode-antlr4/blob/master/doc/sentence-generation.md


1
超过10年后终于看到一个积极的回答,真是太好了 :) - Adam Schmideg
很高兴能帮忙给它带来一些结论 :) (当然真正的功劳归于Mike Lischke)! - Luke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接