缺少AST功能
项目描述
Asteria (Al2O3
)
缺少AST功能
功能
- 为每个节点实现Repr(如果可用,使用
astpretty
,否则回退到ast.dump
) - 与其它节点的AST比较
- 自定义初始化器,根据ASDL规范查找默认值
fix_missing_locations
和compile
的快捷方式(例如ast.parse("2+2").compile()
)- 反解析快捷方式,
ast.parse("2+2").to_source()
。如果可用,它使用astor,否则回退到ast.unparse
接口。 - 节点之间的父子关系
- 用于修改树的辅助函数(如
Module
节点的add_global
方法,将给定的节点插入到主体顶部) - 使用
get_symbol_table
方法访问符号表 - 等等...
演示
>>> import ast
>>> import asteria
>>> ast.parse("2+2") == ast.parse("2+2")
True
>>> ast.parse("2+2").body[0].value
BinOp(
left=Constant(value=2, kind=None),
op=Add(),
right=Constant(value=2, kind=None),
)
>>> ast.parse("print(2+2)").compile()
<code object <module> at 0x7f2602f21450, file "<ASTERIA>", line 1>
>>> eval(_)
4
>>> ast.parse("import asteria").to_source()
'import asteria'
>>> sample = ast.parse("2+2")
>>> sample.parentize()
>>> sample.body[0].value.left.parent
BinOp(
left=Constant(value=2, kind=None),
op=Add(),
right=Constant(value=2, kind=None),
)
>>> sample.body[0].value.parent
Expr(
value=BinOp(
left=Constant(value=2, kind=None),
op=Add(),
right=Constant(value=2, kind=None),
),
)
>>> some_try = ast.parse("""\
... try:
... def x():
... print(1)
... finally: pass
... """)
>>> some_try.parentize()
>>> some_try.body[0].body[0].body[0].value
Call(
func=Name(id='print', ctx=Load()),
args=[Constant(value=1, kind=None)],
keywords=[],
)
>>> len(tuple(some_try.body[0].body[0].body[0].value.until_parented_by(ast.Try)))
3
>>> some_try.add_global(ast.parse("print('lol')").body[0])
>>> print(some_try.to_source())
print('lol')
try:
def x():
print(1)
finally:
pass
项目详细信息
关闭
asteria-0.0.2.tar.gz的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 852ced0ee2bb064908b98748c0b4ddc2d0c7d8d71a4885b9efe0c1aff49a8e7b |
|
MD5 | 8ac25bcc5d889567654241651f55848e |
|
BLAKE2b-256 | 0445ef5cc71cdb44a91b4a0aa3fff8c6f660d082911ade053ca7bb2de0e1f940 |