лучший способ разобрать язык это почти ПОЛЬЗОВАТЕЛЬСКИЙ Python? - PullRequest
4 голосов
/ 17 августа 2010

Я работаю над предметно-ориентированным языком, реализованным поверх 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__ не является правильным решением моей проблемы?

1 Ответ

1 голос
/ 17 августа 2010

PLY работает.Это странно, потому что он имитирует lex / yacc таким образом, что это не ужасно питонно.

И lex, и yacc имеют неявный интерфейс, который позволяет запускать вывод lex как отдельную программу.Эта «особенность» тщательно сохраняется.Аналогично для yacc-подобных функций PLY.«Функция» для создания странной, неявной автономной основной программы тщательно сохранена.

Однако PLY как lex / yacc-совместимый набор инструментов довольно хорош.Все ваши навыки lex / yacc сохраняются.

[Ред. Коммент.«Исправление» грамматики Python, вероятно, будет пустой тратой времени.Почти каждый может правильно сделать отступ без какой-либо помощи.Проверьте C, Java, C ++ и даже Pascal-код, и вы увидите, что почти каждый может делать отступы действительно хорошо.Действительно, люди идут на многое, чтобы сделать отступ в Java там, где это не нужно.Если отступы не важны в Java, почему люди так хорошо с этим справляются?]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...