Эта страница может вам помочь: http://www.ironpython.info/index.php/The_IronPython_2_Parser
На ней приведен пример создания AST из выражения python с использованием базового компилятора IronPython, а затем печати имен найденных там объектов.
Я пошел дальше и применил это к вашей проблеме.Я использую IronPython 2.0.1 здесь, на случай, если вы используете более новую версию, и они что-то изменили ...
# run this with IronPython 2
import clr
clr.AddReference('IronPython')
clr.AddReference('Microsoft.Scripting')
from IronPython.Hosting import Python
from IronPython.Compiler import Parser
from IronPython.Compiler.Ast import PythonWalker
from IronPython.Compiler.Ast import NameExpression
from Microsoft.Scripting import ErrorSink
from Microsoft.Scripting import SymbolTable
from Microsoft.Scripting.Runtime import CompilerContext
from Microsoft.Scripting.Hosting.Providers import HostingHelpers
class ExpressionWalker (PythonWalker):
def __init__(self):
self.names = []
def Walk(self, node):
if isinstance(node, NameExpression):
self.names.append(SymbolTable.IdToString(node.Name))
return True
py = Python.CreateEngine()
src = HostingHelpers.GetSourceUnit(py.CreateScriptSourceFromString('x + y * 2 > z'))
pylc = HostingHelpers.GetLanguageContext(py)
p = Parser.CreateParser(CompilerContext(src, pylc.GetCompilerOptions(), ErrorSink.Default), pylc.Options)
ast = p.ParseFile(True)
walker = ExpressionWalker()
ast.Walk(walker)
print walker.names
Это напечатает следующее:
['x', 'y', 'z']