gpt4 book ai didi

python - 如何修改 Python 源代码以添加新的 AST 节点?

转载 作者:太空宇宙 更新时间:2023-11-03 11:56:16 25 4
gpt4 key购买 nike

例如,如果我要创建一个我想在 Python AST 树中使用的名为“Something”的节点,那么我必须向 Python 源代码的何处添加哪些更改才能做到这一点?

我知道我应该从定义了 AST 语法的 Python.asdl 开始。然后我应该转到 ast.c。

不幸的是,我不确定我必须在 ast.c 文件中的什么地方进行更改才能实现该节点。

此外,为了简单起见,假设我只希望节点作为占位符,这意味着它除了能够将自身插入到树中之外不应该做任何事情。

最佳答案

还不需要深入研究 Python.asdl!然后你必须四处寻找 ASDL 解析器,然后你必须弄清楚如何使用它(尽管这本身就是一个值得练习的练习)。多亏了惊人的 ast 模块,您可以留在 Python 中。

请务必查看 Eli Bendersky 的 article on the matter .

这是他提供的一个示例,其中构建了 AST 并从头开始eval!

import ast

node = ast.Expression(ast.BinOp(
ast.Str('xy'),
ast.Mult(),
ast.Num(3)))

fixed = ast.fix_missing_locations(node)

codeobj = compile(fixed, '<string>', '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)

关于python - 如何修改 Python 源代码以添加新的 AST 节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9187837/

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