我还在尝试找到一种在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?)。 我想冒险尝试基于类型和基于谓词的调度,这可能会让我更接近正确的模式匹配,但是所有这些库似乎都相当粗略和脆弱......
有什么建议吗?
答案 0 :(得分:0)
更新:刚刚发现macropy已经分叉并更新以使用python 3.5+:)
https://github.com/azazel75/macropy
它有一个peg解析器生成器,scala类似的case类和模式匹配,非常适合在python中构建转换器