получить асту от python объекта в интерпретаторе - PullRequest
1 голос
/ 22 марта 2020

Я создаю приложение, для которого я хотел бы, чтобы наивный пользователь определил простую функцию. Затем я хотел бы взять эту функцию и преобразовать ее в абстрактное синтаксическое дерево. Это также должно работать во время интерактивного сеанса (то есть с использованием переводчика). Вот что я пробовал до сих пор в интерпретаторе:

  • dill.source.getsource метод
  • inspect.getsource метод
  • доступ к атрибуту __code__ объекта функции

Первые два метода проблематичны c, поскольку они необходимы для записи объекта функции в физический файл где-нибудь в системе. Третий дал мне только версию кода в байтовом коде, которую нельзя использовать в методе ast.parse.

Я также открыт для преобразования объекта python непосредственно в абстрактный синтаксис, но, похоже, go против того, как астмы должны работать .

Мне действительно нужно иметь возможность получить аст от моего python объекта в обычном (не я python) интерпретаторе. Как я могу это сделать?

РЕДАКТИРОВАТЬ

Вот как мой "наивный пользователь" будет взаимодействовать с моей пользовательской библиотекой через интерпретатор:

>>> import MyLib
>>> def f(x): return x**2
>>> f = MyLib.FunctionAST(f) #FunctionAST will handld the conversion to abstract syntax
...