Python 如何优化抽象语法树?

Python 如何优化抽象语法树?,python,parsing,abstract-syntax-tree,lexer,parse-tree,Python,Parsing,Abstract Syntax Tree,Lexer,Parse Tree,我试图用python创建一个脚本,该脚本给定一个输入字符串,如a+a*b,读取它,解析它,并创建一个抽象语法树 在这一点上,AST应该有标记,类似于 (Var_A,PLUS,(Var_A,MUL,Var_B)) 在此之前,我一直在做所有的事情,现在我应该优化AST,并在输出中获得尽可能少的变量,这样就有了(b+1)*a这样的输出 有人知道一种算法或代码可以进行这种优化吗 另外,我不能使用任何外部库,我必须从零开始实现这一点您的AST库应该提供在树中添加、删除或编辑节点的方法。这取决于您编写一个函

我试图用python创建一个脚本,该脚本给定一个输入字符串,如a+a*b,读取它,解析它,并创建一个抽象语法树

在这一点上,AST应该有标记,类似于 (Var_A,PLUS,(Var_A,MUL,Var_B))

在此之前,我一直在做所有的事情,现在我应该优化AST,并在输出中获得尽可能少的变量,这样就有了(b+1)*a这样的输出

有人知道一种算法或代码可以进行这种优化吗


另外,我不能使用任何外部库,我必须从零开始实现这一点

您的AST库应该提供在树中添加、删除或编辑节点的方法。这取决于您编写一个函数,给定一个AST,它将返回一个具有新结构的新AST。例如,必须检查节点,如果其子节点具有适当的值,则可以构造新的等效节点。在这种情况下,您可以将
(Var_A,PLUS,(Var_B,MUL,…)
(与
MUL
的另一个参数无关)替换为
(Var_A,MUL,(Literal_1,PLUS,Var_B))
。这是用于大学的一个项目,我不能使用任何库,您有什么建议吗?还有,如何在树中找到我必须优化的东西?“尽可能少的变量”-但是
(b+1)*a
的变量数量与
a+a*b
a
b
)完全相同,叶节点数量相同,深度和操作数量相同,所以这些表达式基本上是相同的。@ForceBru重复使用
a
已被常数所取代;这是一种优化:)目前的问题太广泛了。您自己正在构建AST,如果您的问题不是关于如何实现这一点,那么关于您想要进行哪些优化是一个相当开放的问题,而实现这些优化只是操纵树的问题,但是您的代码允许您这样做。