有没有人对使用BNF语法生成测试字符串的工具有任何经验,然后可以将其输入单元测试中?
答案 0 :(得分:1)
我没有对工具问题的答案,但我会说在任何文本处理语言(perl / python / etc)中从BNF语法中随机生成句子相当容易,而且在更大的语言(Java / C / etc),但推出自己的语言应该不会太难。
当然,问题在于它只能在语法中生成字符串,除非你的语法非常简单,否则测试空间会无限大。
答案 1 :(得分:1)
我完全按照hazzen评论(使用脚本语言中的嵌入式DSL)。这是一项有趣的练习,但除了最基本的测试之外,例如解析,它不是非常有用。我最有趣的测试大部分都是关于比BNF(或任何其他无上下文语法)更容易表达的更复杂的关系。
答案 2 :(得分:0)
如果您正在开发编译器,那么您可能有一个抽象的语法树数据类型。如果是这样,那么你可以编写一个函数来生成一个随机AST - 用它,你可以将它打印成一个字符串并将其输入你的单元测试。它保证以这种方式成为有效的程序,因为你用你的AST开始。
如果我在Haskell或ML中编写编译器,那就是我要做的事情,使用QuickCheck。
答案 3 :(得分:0)