python代码生成_Python代码生成

自动代码生成通常通过以下方式完成:打印包含代码片段的语句

带占位符的文本模板(考虑宏)

IMHO,更好的做法是:为目标片段构建AST,然后预打印

几乎没有人做后者,因为工具大多不在那里。

Python的2to3工具提供(我认为)目标AST和预打印。

但你没有问的问题是“从什么产生?”无论如何你必须说明

抽象地说,你想产生什么(或者它不是一个胜利)。你的工具必须能够以某种方式阅读规范。

许多代码生成方案由编写调用上述生成机制的过程代码组成;过程代码充当隐式规范。阅读规范是“容易的”;它只是代码生成器使用的语言中的代码。

一些代码生成方案使用某种图形结构来提供一个框架,在该框架上挂起规范的片段,从而驱动代码生成。UML类图是一个典型的例子。这些方案并不那么容易;你需要一个“规范读取器”(例如,UML图读取器,又名XMI或其他类似的读取器,或者如果你不使用UML,某种规范解析器),然后你需要一些东西,以某种有用的顺序(UML是图,有很多不同的访问方式)爬过刚刚读取的规范,进行调用关于代码生成步骤。

Python 2to3工具使用Python2解析器读取“spec”。如果您想从Python2生成代码,那就可以了。我想你不想那样做。

最佳实践方法是将读取/分析/遍历规范的能力与为目标语言生成AST的能力结合起来的方法。

我们的DMS Software Reengineering Toolkit是一个通用的程序分析和转换系统。它将“规范”(您可以定义的语法实例)解析为AST;它还允许您使用过程代码(如上面所示)或使用模式匹配/替换(DMS非常独特)为这些语法中的任何一个构建任意的AST。DMS langauge前端的一部分是prettyprinter,它可以从AST重新生成文本(通过往返代码测试:parse to AST,prettyprint AST,better be the same text)。

如果DMS不知道您的语法,它有非常好的解析器和预打印生成器,以及其他分析程序的支持机制。所有这些额外的机制通常都不适用于经典的解析器生成器,或者仅仅是一个简单的“AST”包。(我不知道2to3里面是什么)。

因此,您可以使用DMS解析您的规范,并使用ASTs生成Python代码,最后是prettyprinting。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值