2013-05-10 3 views
4

Я хочу, чтобы разобрать Pure-кода 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' документация может заставить вас начать ed: http://docs.python.org/2/library/ast.html – Yuushi

+0

@Yuushi Да, даже я смотрел в модусте ast. Но я не могу понять, как его использовать. – pradyunsg

+1

@nhahtdh docs говорят: от Python 2.5 дальше гораздо удобнее вырезать сцену генерации абстрактного синтаксического дерева (AST) и этап компиляции, используя модуль ast. – pradyunsg

ответ

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

+0

@Schoolboy: Ваша версия синтаксически недействительна как выражение python, из-за двоеточия в середине – Eric

+0

@Eric Спасибо, исправлено , – pradyunsg

Смежные вопросы