BNF语法测试用例生成

时间:2008-09-09 15:32:16

标签: unit-testing parsing

有没有人对使用BNF语法生成测试字符串的工具有任何经验,然后可以将其输入单元测试中?

4 个答案:

答案 0 :(得分:1)

我没有对工具问题的答案,但我会说在任何文本处理语言(perl / python / etc)中从BNF语法中随机生成句子相当容易,而且在更大的语言(Java / C / etc),但推出自己的语言应该不会太难。

当然,问题在于它只能在语法中生成字符串,除非你的语法非常简单,否则测试空间会无限大。

答案 1 :(得分:1)

我完全按照hazzen评论(使用脚本语言中的嵌入式DSL)。这是一项有趣的练习,但除了最基本的测试之外,例如解析,它不是非常有用。我最有趣的测试大部分都是关于比BNF(或任何其他无上下文语法)更容易表达的更复杂的关系。

答案 2 :(得分:0)

如果您正在开发编译器,那么您可能有一个抽象的语法树数据类型。如果是这样,那么你可以编写一个函数来生成一个随机AST - 用它,你可以将它打印成一个字符串并将其输入你的单元测试。它保证以这种方式成为有效的程序,因为你用你的AST开始

如果我在Haskell或ML中编写编译器,那就是我要做的事情,使用QuickCheck

答案 3 :(得分:0)

Gramtest是一个可以从任意用户定义的BNF语法生成字符串的工具。您可以阅读有关Gramtest here背后的算法的更多详细信息,并且可以使用该工具的一些实用技巧here