跳转到主要内容

缺少AST功能

项目描述

Asteria (Al2O3)

缺少AST功能

功能

  • 为每个节点实现Repr(如果可用,使用astpretty,否则回退到ast.dump
  • 与其它节点的AST比较
  • 自定义初始化器,根据ASDL规范查找默认值
  • fix_missing_locationscompile的快捷方式(例如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 (4.8 kB 查看散列值)

上传时间: 源代码

支持者:

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面