无需深入Python.asdl!然后你必须去寻找ASDL解析器然后你必须弄清楚如何处理它(尽管这本身就是一个值得做的练习).由于令人惊叹的ast模块,你可以留在Python中.
这是他提供的一个例子,其中构建了AST并从头开始评估!
import ast
node = ast.Expression(ast.BinOp(
ast.Str('xy'),
ast.Mult(),
ast.Num(3)))
fixed = ast.fix_missing_locations(node)
codeobj = compile(fixed, '', 'eval')
print eval(codeobj)
ast.NodeTransformer
如果要转换现有AST,请查看ast.NodeTransformer类.
以下是上述博客文章中的一个示例,它修改了字符串值
以str:为前缀
class MyTransformer(ast.NodeTransformer):
def visit_Str(self, node):
return ast.Str('str: ' + node.s)