用于在 python、树 traversers/rewriters、高级 dispatch/pattern 匹配中生成 DSL AST 的库?

libs for generating DSL ASTs in python, tree traversers/rewriters, advanced dispatch/pattern matching?

我仍在尝试找出一种在 Python 中有效实现 DSL 的方法,我已经决定使用 ANTLR 4.X 来生成解析器,我现在的问题是 DSL 是很大,我需要一种有效的方法来为我的 DSL 指定 AST。

我看过 macropy,如果它是 python 3.6.x 兼容而不是 2.7.x-only.

我找到了允许从 Zephyr ASDL 规范生成 python 类 的 iAST 包。关于从 ADT 规范生成 AST,还有其他更好的选择吗?

此外,我查看了几个调度库,以便以模块化和可组合的方式编写 AST 遍历器和重写器(试图避免天真的基于方法命名的访问者模式),我无法决定选择哪个(PEAK 规则?多方法?functools dispatch?)。 我想冒险混合使用类型和基于谓词的调度,这可以使我更接近正确的模式匹配,但是所有这些库看起来都相当粗略和脆弱...

有什么建议吗?

更新:刚刚发现 macropy 被分叉并更新为与 python 3.5+ 一起使用 :)

https://github.com/azazel75/macropy

它有一个 peg 解析器生成器、类似 scala 的案例 类 和模式匹配,非常适合在 python

中构建转译器