有没有一个工具可以根据ANTLR语法生成匹配的字符串?

9

我有一个ANTLR语法,想要模糊测试我的解析器。

3个回答

1

你是否正在寻找从CFG语法中生成字符串?也就是说,生成被语法接受的字符串?这可能是检查语法正确性的好方法,但请记住,被接受的字符串集很可能是无限的。任何真正糟糕的错误应该已经在语法规范中显现出来,并且希望通过LL-ness的检查。

我不知道ANTLR世界中是否有任何工具,快速搜索(E)BNF生成也没有发现任何有用的东西。

然而,如果性能等方面不是问题,自己编写生成器并不是很困难。Prolog会让人想起,有大量的文献可用,但如果您不想离开Java,我认为自己动手制作是一种方式。反正很有趣。


0

0
假设您从ANTLR语法生成了句子(标记字符串),您认为基于ANTLR的解析器会反对它们吗?
实际上,您需要生成不完全合法的字符串。因此,您需要一个能够生成错误字符串的生成器。
考虑到ANTLR从ANTLR语法生成一组过程,我认为使用生成的解析器生成句子生成器会很困难。您需要的是语法的显式模型。而这已经可用于您:ANTLR输入语法。
我看到的另一个复杂性是从构成令牌定义的正则表达式中生成合法的标记。同样,您需要处理ANTLR输入才能实现这一点。
处理这两个问题似乎在技术上都很简单。最好的引擎是ANTLR前端,它显然会解析ANTLR规范,因此必须保持ANTLR输入的某些表示形式。

我不相信你是正确的,作为ANTLR用户,我对测试ANTLR使用语法来解析输入序列的能力不感兴趣,它的能力和行为已经有很好的文档记录了。不,我感兴趣的是测试我的visitor-listener对任意对象图的行为——这些对象图我自己想不到文档。我非常希望有一种工具,可以为提供的语法生成随机字符串。这样的工具将允许优雅地生成端到端测试。 - Groostav
1
@Groostav:大家都明白问题是从语言或类似变体中生成随机字符串。问题是,你要如何生成这些字符串?我的观点是不能轻易地从生成的ANTLR解析器中实现;这就像尝试解释图灵难度的任意代码(也许不是,但没有人认为这很容易)。你唯一可以用来生成这些字符串的工具是ANTLR语法本身,包括词法方面。ANTLR本身似乎并没有提供任何帮助。那么该怎么办呢? - Ira Baxter

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