提问人:bookofproofs 提问时间:10/23/2021 最后编辑:bookofproofs 更新时间:11/7/2021 访问量:150
在 TatSu (Python) 中生成随机语法扩展
Generate random grammar expansions in TatSu (Python)
问:
我正在为使用 TatSu 生成的语法解析器编写解释器。我正在寻找一种方便的方法来为我的语法生成用例,这样我就可以为我的解释器编写单元测试。目前,我正在手动生成测试用例。
我想知道 TatSu 包是否确实提供了任何(可能未记录的)方法来自动生成随机语法派生,以便我可以将它们用作我的解释器的测试用例。此外,最好指定语法规则,为此我需要随机生产。
答:
1赞
Apalala
10/31/2021
#1
如果你看一下里面的方法,你会看到一个通过语法将其转换为可读内容的示例。__str__()
grammars.py
您也可以使用 .Visitor
因为语法的派生集可能是无限的,所以你需要一种策略来生成一些有趣的样本,然后再退出():Ctrl-C
- 首先选择广度,否则访问者将递归,直到运行时堆栈耗尽
- 由于 PEG,请首先使用选项 () 中的最后一个选项,该选项应该是产生最短导数的选项
|
由于 TatSu 跳过空格,因此您可能需要添加一个步骤来漂亮地打印输出。
这是一个有趣的项目,如果最后将其作为拉取请求添加到 TatSu 中,那就太好了。
我很抱歉只提供指南而不是示例。
评论
0赞
bookofproofs
10/31/2021
谢谢,我已经开始研究基于已编译的 tatsu 解析器的规则映射属性的解决方案。感谢您关于在选择中使用最后一个选项的建议。如果我成功了。我将创建一个拉取请求。tatsu 包中有一个“grammars.py”,但没有“grammar.py”。它的 __str__() 方法可能不是你的意思。
0赞
Apalala
11/1/2021
确实是.tatsu/grammars.py
0赞
bookofproofs
11/7/2021
#2
我创建了一个实验性的公共存储库 TatSu Random Derivation Generator,它可以为使用 TatSu 编译的许多语法规则生成随机推导。如果语法非常复杂,则程序会遇到 RecursionError。
尽管如此,它对于测试语法很有用,特别是如果您想测试特定生产规则的派生。
以及许多测试向您展示了如何使用该工具。example.py
上一个:将孩子放在平移窗口内
评论