gpt4 book ai didi

python - Python 中 ast.nodevisitor 的后序遍历

转载 作者:行者123 更新时间:2023-11-28 16:49:08 26 4
gpt4 key购买 nike

是否可以仅通过操作 ast.NodeVisitor.generic_visit() 对 Python 中的 ast.NodeVisitor 实例进行后序遍历?我这样做了:

class ExpParser(ast.NodeVisitor):

def generic_visit(self, node):
for x in ast.iter_child_nodes(node):
ast.NodeVisitor.generic_visit(self, x)
ast.NodeVisitor.generic_visit(self, node)

def visit_BinOp(self, node):
print type(node.op).__name__

def visit_Name(self, node):
print node.id

if __name__ == '__main__':
node = ast.parse("T1+T2*T3")
v = ExpParser()
v.visit(node)

这给了我:

T1
T2
T3
Mult
Add

我想要它给我:

T2
T3
Mult
T1
Add

我该怎么做?拜托我卡住了。

最佳答案

尝试这样的事情

import ast

class ExpParser(ast.NodeVisitor):

def generic_visit(self, node):
for field, value in reversed(list(ast.iter_fields(node))):
if isinstance(value, list):
for item in value:
if isinstance(item, ast.AST):
self.visit(item)
elif isinstance(value, ast.AST):
self.visit(value)

def visit_BinOp(self, node):
self.generic_visit(node)
print type(node.op).__name__

def visit_Name(self, node):
self.generic_visit(node)
print node.id

if __name__ == '__main__':
node = ast.parse("T1+T2*T3")
v = ExpParser()
v.visit(node)

不要忘记在每个访问方法上调用 generic_visit,或者重新实现访问方法以自动处理它。

关于python - Python 中 ast.nodevisitor 的后序遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10043205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com