我正在为用TatSu生成的语法解析器编写一个解释器。我正在寻找一种方便的方法来为我的语法生成用例,这样我就可以为我的解释器编写单元测试。目前,我正在手动生成测试用例。
我想知道TatSu包是否提供了自动生成随机语法派生的方法(可能没有文档),以便我可以将它们用作我的解释器的测试用例。此外,最好指定语法规则,为此我需要随机结果。
发布于 2021-10-31 11:12:11
如果您查看grammars.py中的__str__()方法,您将看到一个遍历语法以将其转换为可读内容的示例。
您也可以使用Visitor。
因为语法的派生集可能是无限的,所以您需要一个策略来在退出之前生成一些有趣的样本(Ctrl-C):
广度优先,否则访问者将递归,直到运行时堆栈为exhausted
|),它应该是生成最短派生的选项因为TatSu跳过了空格,所以您可能需要添加一个步骤来漂亮地打印输出。
这是一个有趣的项目,如果你在最后将它作为一个拉请求添加到TatSu中,那就更好了。
很抱歉,我只提供了指导方针,而没有提供示例。
发布于 2021-11-06 18:02:15
我已经创建了一个实验性的公共存储库TatSu Random Derivation Generator,它可以为您用TatSu编译的许多语法规则生成随机派生。如果语法非常复杂,程序就会运行到RecursionError中。
然而,它对于测试您的语法很有用,特别是如果您想测试特定产生式规则的派生。
example.py以及许多测试向您展示了如何使用该工具。
https://stackoverflow.com/questions/69685640
复制相似问题