我有一个 ANTLR 语法,我想模糊我的解析器。
3 回答
您是否正在从 CFG 语法中寻找生成?IE。语法接受的字符串的生成?这可能是检查语法正确性的好主意,但请记住,接受的字符串集很可能是无限的。任何真正糟糕的错误都应该在语法规范中已经很明显了,并希望通过检查 LL-ness。
我不知道 ANTLR 世界中的任何工具,谷歌快速搜索 (E)BNF 生成也没有发现任何有用的东西。
但是,如果性能等不是问题,则滚动自己的生成器并不是很困难。Prolog 会浮现在脑海中,有大量可用的文献,但如果你不想离开 Java,我怀疑自制是要走的路。反正很有趣。
假设您从 ANTLR 语法生成句子(标记字符串)。为什么你认为你的基于 ANTLR 的解析器会反对它们?
你真正需要做的是产生不完全合法的字符串。所以,你需要的是一个可以产生错误字符串的生成器。
鉴于 ANTLR 从您的 ANTLR 语法生成一组过程,我认为使用生成的解析器生成句子生成器会很困难。您需要的是语法的显式模型。这已经为您提供:ANTLR输入语法。
我看到的另一个复杂情况是从构成令牌定义的正则表达式生成合法令牌。同样,您需要处理 ANTLR 输入来执行此操作。
处理这两者在技术上似乎很简单。用作基础的最佳引擎可能是 ANTLR 前端,它显然会解析 ANTLR 规范,因此必须保存一些 ANTLR 输入的表示。
正在寻找类似的东西,发现GramTest,这似乎是合适的,但不是 ANTLR 语法使用 BNF 语法作为输入。
该工具允许您根据任意用户定义的语法生成测试用例。输入文法以 BNF 表示法给出。潜在的应用包括模糊测试和自动化测试。
有关更多背景信息,他们链接到以下博客文章: