2013-05-10 68 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