2017-08-29 144 views
-1

我仍然试图找出一种方法来有效地在Python中实现DSL,我已经解决了解析器生成的ANTLR 4.X,现在我的问题是DSL很大,我需要一种有效的方式来指定AST为我的DSL。用于在python,树遍历器/重写器中生成DSL AST的库,高级调度/模式匹配?

我已经看过了macropy,如果只是python 3.6.x兼容而不是2.7.x版本,这将是理想的。

我找到了允许从Zephyr ASDL规范生成python类的iAST包。从ADT规范生成ASTs有没有其他更好的选择我应该知道?另外,为了以模块化和可组合的方式编写AST遍历器和重写器(试图避免基于天真方法命名的访问者模式),我已经查看了几个调度库,但我无法决定选择哪个PEAK-rules?multimethods?functools dispatch?)。 我想冒险进入类型和基于谓词的调度的混合,这可能会让我更接近正确的模式匹配,但所有这些库似乎相当粗略和脆弱......

有什么建议吗?

回答

0

更新:刚刚发现macropy是分叉和更新,蟒蛇工作3.5+ :)

https://github.com/azazel75/macropy

它具有PEG解析器生成,斯卡拉样病例类和模式匹配,理想用于在Python中构建转译器