用于在python中生成DSL AST的库,树遍历器/重写器,高级调度/模式匹配?

时间:2017-08-29 15:34:02

标签: python-3.x code-generation abstract-syntax-tree dispatch

我还在尝试找到一种在Python中有效实现DSL的方法,我已经为ANTLR 4.X解决了解析器的问题,我现在的问题是DSL很大而且我需要一种为我的DSL指定AST的有效方法。

我已经看过macropy,如果它只是python 3.6.x兼容而不是仅仅2.7.x,那将是理想的。

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

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

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

更新:刚刚发现macropy已经分叉并更新以使用python 3.5+:)

https://github.com/azazel75/macropy

它有一个peg解析器生成器,scala类似的case类和模式匹配,非常适合在python中构建转换器