将Python解析为实例列表

将Python解析为实例列表,python,parsing,Python,Parsing,我想将纯Python代码解析成类似于某些类的实例列表的东西,这些类表示原始代码的各个部分 例如: >>> text = ''' ... for x in range(100): ... print x ... ''' >>> tree = parse(text) >>> print tree Tree( ForLoop(x,Range(100), [Stmt(Print(x))]) ) # here ForLoop, Range, S

我想将纯Python代码解析成类似于某些类的实例列表的东西,这些类表示原始代码的各个部分

例如:

>>> text = '''
... for x in range(100):
...     print x
... '''
>>> tree = parse(text)
>>> print tree
Tree( ForLoop(x,Range(100), [Stmt(Print(x))]) )
# here ForLoop, Range, Stmt, Print are all custom classes
具有您需要的工具:

>>> import ast
>>> text = '''
for x in range(100):
    print x
'''

>>> m = ast.parse(text)
>>> ast.dump(m)
"Module(body=[For(target=Name(id='x', ctx=Store()), iter=Call(func=Name(id='range', ctx=Load()),
       args=[Num(n=100)], keywords=[], starargs=None, kwargs=None), 
       body=[Print(dest=None, values=[Name(id='x', ctx=Load())], nl=True)], orelse=[])])"

我没有足够的经验给你一个完整的答案,但是内置的
ast
模块文档可能会让你开始:@Yuushi是的,即使我在查看ast模块。。但是我不知道如何使用它。@nhahdh文档说:从Python 2.5开始,使用AST模块在抽象语法树(AST)生成和编译阶段切入要方便得多。我想知道如何将其转换为我的版本。。但是,这个问题会解决这个问题。@男生:因为中间的冒号,你的版本在语法上是无效的,因为它是Python表达式。