扩展python 2.7编译器模块的AST节点并打印它们

时间:2017-10-08 22:27:07

标签: python python-2.7 compiler-construction

我正在使用python 2.7中的compiler模块从python程序中获取抽象语法树,我想用自己的节点扩展AST节点集。

例如,给定python程序1+2,在解析时,从compiler模块输出的AST输出:

解析程序:

import compiler
ast = compiler.parse("1+2")
print ast

输出:

Module(None, Stmt([Discard(Add((Const(1), Const(2))))]))

现在,我希望用布尔节点扩展AST库。目前,compiler模块将TrueFalse分配为Name()个节点。即compiler.parse("True")输出Module(None, Stmt([Discard(Name('True'))]))

我的计划是构造一个名为Bool的类,并使用布尔值包装节点,剥离那些Name()节点并使用我的Bool节点。我的Bool定义。

class Bool():
def __init__(self,expr):
    self.expr = expr

问题,现在打印ast时,正确替换后,它不会以与其他节点类似的样式打印。相反,它给出了

compiler.parse("True") 

输出

Module(None, Stmt([Discard(<Bool instance at 0x10e4306c8>)]))

相反,我可以使用什么做法以类似于Bool模块的方式打印那些compiler节点?例如欲望:

Module(None, Stmt([Discard(Bool('True'))]))

0 个答案:

没有答案