用python演示一个简单的AST(抽象语法树)
时间: 2024-05-06 07:17:07 浏览: 155
基于python实现的词法分析、语法分析、 LL1分析器源码+详细代码注释(编译原理作业).zip
好的,以下是一个简单的 Python 程序,我们将使用 AST 模块来生成它的抽象语法树:
```python
def greet(name):
print("Hello, " + name + "!")
greet("World")
```
现在我们可以使用以下代码来生成这个程序的抽象语法树:
```python
import ast
code = """\
def greet(name):
print("Hello, " + name + "!")
greet("World")
"""
tree = ast.parse(code)
print(ast.dump(tree))
```
输出的结果是一个以 JSON 格式表示的抽象语法树:
```
Module(body=[FunctionDef(name='greet', args=arguments(args=[arg(arg='name', annotation=None)], vararg=None, kwonlyargs=[], kw_defaults=[], kwarg=None, defaults=[]), body=[Expr(value=Call(func=Name(id='print', ctx=Load()), args=[BinOp(left=BinOp(left=Str(s='Hello, '), op=Add(), right=BinOp(left=Name(id='name', ctx=Load()), op=Add(), right=Str(s='!'))), op=Add(), right=Name(id='name', ctx=Load()))], keywords=[]))], decorator_list=[]), Expr(value=Call(func=Name(id='greet', ctx=Load()), args=[Str(s='World')], keywords=[]))])
```
我们可以看到,该程序的抽象语法树由 Module、FunctionDef 和 Expr 三个节点组成。其中,Module 代表整个程序,FunctionDef 代表 greet 函数的定义,Expr 代表对 greet 函数的调用。每个节点还包含一些属性,例如 FunctionDef 节点包含 name 和 args 属性,分别表示函数名和函数参数。
阅读全文