Нет необходимости погружаться в Python.asdl
еще! Затем вам нужно искать парсера ASDL, а затем вы должны выяснить, что с ним делать (хотя само по себе это достойное упражнение). Вы можете остаться в Python благодаря удивительному ast
модулю.
Обязательно ознакомьтесь со статьей Эли Бендерски по этому вопросу .
Вот пример, который он приводит, где строится AST и eval
'с нуля!
import ast
node = ast.Expression(ast.BinOp(
ast.Str('xy'),
ast.Mult(),
ast.Num(3)))
fixed = ast.fix_missing_locations(node)
codeobj = compile(fixed, '<string>', 'eval')
print eval(codeobj)
ast.NodeTransformer
Проверьте класс ast.NodeTransformer
, если вы хотите преобразовать существующий AST.
Вот пример из приведенного выше поста блога, который изменяет строковые значения, чтобы
с добавлением str:
.
class MyTransformer(ast.NodeTransformer):
def visit_Str(self, node):
return ast.Str('str: ' + node.s)