Я работаю над предметно-ориентированным языком, реализованным поверх Python. Грамматика настолько близка к Python, что до сих пор мы просто делали несколько тривиальных преобразований строк и затем подали ее в ast
. Например, отступ заменяется на операторы #endfor
/ #endwhile
/ #endif
, поэтому мы нормализуем отступ, пока он все еще является строкой.
Мне интересно, есть ли лучший способ? Насколько я могу судить, ast
жестко запрограммирован для анализа грамматики Python, и я не могу найти никакой документации, кроме http://docs.python.org/library/ast.html#module-ast (и сам источник, я полагаю).
Кто-нибудь имеет личный опыт работы с PyParsing, ANTLR или PLY?
Существуют смутные планы переписать интерпретатор во что-то, что превращает наш язык в действительный Python и передает его в сам интерпретатор Python, так что я хотел бы что-то совместимое с compile
, но это не нарушает соглашения.
Обновление: Мне просто пришло в голову, что
from __future__ import print_function, with_statement
изменяет способ анализа Python следующего источника. Однако PEP 236 предполагает, что это синтаксическое оформление витрин для функции компилятора. Может ли кто-нибудь подтвердить, что попытка переопределить / расширить __future__
не является правильным решением моей проблемы?