代码标准库似乎在某种程度上包含了编译和解释Python的函数,但我想:
- 将完整和不完整的语句和表达式解析为令牌流和语法树
我如何在Python本身中做到这一点?
您可以使用标准库函数ast
或更漂亮的astor
库,这里有一个简单的例子:
import ast
import astor
code = '''
def add(a, b):
if True:
return a + b
else:
raise Exception
'''
tree = ast.parse(code)
print(astor.dump_tree(tree))
输出是抽象语法树的人类可读表示:
Module(
body=[
FunctionDef(name='add',
args=arguments(posonlyargs=[],
args=[arg(arg='a', annotation=None, type_comment=None),
arg(arg='b', annotation=None, type_comment=None)],
vararg=None,
kwonlyargs=[],
kw_defaults=[],
kwarg=None,
defaults=[]),
body=[
If(test=Constant(value=True, kind=None),
body=[Return(value=BinOp(left=Name(id='a'), op=Add, right=Name(id='b')))],
orelse=[Raise(exc=Name(id='Exception'), cause=None)])],
decorator_list=[],
returns=None,
type_comment=None)],
type_ignores=[])