2008-09-09 174 views

回答

1

我没有对工具问题的回答,但我会说在任何文本处理语言(perl/python/etc)中都可以很容易地从BNF语法中随机生成句子,并且稍微比较冗长一个更大的语言(Java/C /等),但它不应该太难以推出自己的。

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

1

我已经完全按照hazzen的评论(在脚本语言中使用嵌入式DSL)。这是一个有趣的练习,但除了最基本的测试例如解析,这不是非常有用。我最感兴趣的测试大部分都与更复杂的关系有关,而不是人们可以用BNF(或任何其他上下文无关语法)轻松表达的关系。

0

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

如果我在Haskell或ML编写编译器,这是我会做的,使用QuickCheck

0

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