0

我正在为使用 TatSu 生成的语法解析器编写解释器。我正在寻找一种方便的方法来为我的语法生成用例,这样我就可以为我的解释器编写单元测试。目前,我正在手动生成我的测试用例。

我想知道 TatSu 包是否确实提供了任何(可能是未记录的)方法来自动生成随机语法推导,以便我可以将它们用作我的解释器的测试用例。此外,最好指定我需要随机产生的语法规则。

4

2 回答 2

1

如果您查看其中的__str__()方法,grammars.py您会看到一个遍历语法以将其转换为可读内容的示例。

您也可以使用Visitor.

因为语法的推导集可能是无限的,所以您需要一种策略来在退出之前生成一些有趣的样本 ( Ctrl-C):

  • 广度优先,否则访问者将递归,直到运行时堆栈耗尽
  • 由于 PEG,首先使用选项 ( ) 中的最后一个|选项,它应该是产生最短推导的选项

因为 TatSu 跳过了空格,所以您可能需要添加一个步骤来漂亮地打印输出。

这是一个有趣的项目,如果最后您将它作为拉取请求添加到 TatSu,那就太好了。

我很抱歉只提供指南而不是示例。

于 2021-10-31T11:12:11.013 回答
0

我创建了一个实验性公共存储库TatSu 随机推导生成器,它可以为使用 TatSu 编译的许多语法规则生成随机推导。如果语法非常复杂,程序会遇到 RecursionError。

尽管如此,它对于测试您的语法很有用,特别是如果您想测试特定生产规则的派生。

example.py以及许多测试向您展示了如何使用该工具。

于 2021-11-06T18:02:15.017 回答