Внутренние AST IronPython также являются деревьями выражений, поэтому вам просто нужно получить AST для своего кода, что вы можете сделать, используя класс IronPython.Compiler.Parser
. Метод Parser.ParseFile возвращает экземпляр IronPython.Compiler.Ast.PythonAst
, представляющий код.
Использование синтаксического анализатора немного сложно, но вы можете посмотреть на BuildAst
метод модуля _ast для некоторых подсказок. По сути, это:
Parser parser = Parser.CreateParser(
new CompilerContext(sourceUnit, opts, ThrowingErrorSink.Default),
(PythonOptions)context.LanguageContext.Options);
PythonAst ast = parser.ParseFile(true);
ThrowingErrorSink
также происходит из модуля _ast
. Вы можете получить экземпляр SourceUnit
, например, такой (c.f. compile
встроенный ):
SourceUnit sourceUnit = context.LanguageContext.CreateSnippet(source, filename, SourceCodeKind.Statements);
Затем вам нужно пройти AST, чтобы получить из него полезную информацию, но они должны быть похожи (но не идентичны) деревьям выражений C #.