2013-05-10 28 views
4

我想分析纯Python代码到类似的东西代表的原代码各部分的某些类的实例列表列表..解析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 
+1

我没有足够的经验,它给你一个完整的答案,但内置'ast'模块文档可能让你开始编辑:http://docs.python.org/2/library/ast.html – Yuushi 2013-05-10 05:43:52

+0

@Yuushi是的,即使我在寻找ast模块..但我无法弄清楚如何使用它.. – pradyunsg 2013-05-10 05:45:25

+1

@nhahtdh docs说:从Python 2.5开始,使用ast模块进入抽象语法树(AST)生成和编译阶段更方便。 – pradyunsg 2013-05-10 05:45:56

回答

4

ast module有你需要的工具:

>>> 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=[])])" 
+1

我不知道如何将其转换为我的版本..但是,这将做这个问题.. – pradyunsg 2013-05-10 06:19:45

+0

@Schoolboy:由于中间的冒号,你的版本在语法上无效作为Python表达式 – Eric 2013-05-10 08:15:50

+0

@Eric谢谢,更正。 – pradyunsg 2013-05-10 08:23:36