Методы синтаксического анализа для изменения языка во время выполнения - PullRequest
3 голосов
/ 29 ноября 2010

Глядя на Rakudo Perl6, мне интересно, существуют ли методы синтаксического анализа и лексического анализа, которые позволяют изменять / расширять синтаксис языка и являются эффективными и не сложными для реализации.

Ответы [ 2 ]

1 голос
/ 29 ноября 2010

Посмотрите на ПЭГ. Существуют языки, основанные на PEG (http://en.wikipedia.org/wiki/Parsing_expression_grammar), которые можно расширять, например:

http://www.chrisseaton.com/katahdin/

http://www.meta -alternative.net / mbase.html

Грамматики Perl5 и Perl6 могут быть легко определены в форме PEG (и я могу ошибаться, но текущий Perl6, скорее всего, реализован именно так).

1 голос
/ 29 ноября 2010

"Нет". [ edit: на момент вопроса ] Если вопрос касается лексического анализа / разбора Perl, это довольно сложно. У нас (см. Мою биографию для «мы») есть лексер Perl5. У нас действительно хорошие инструменты для генерации лексеров (Unicode, multi-state, регулярные выражения в комплекте со встроенным «not regexp »). Лексер Perl создавал королевскую головную боль; мы получили около 50 лексических режимов (каждый со своим набором определений токенов) для обработки лексической части.

Мы смотрим на часть анализа, и сегодня нам повезло, и у нас нет прямой необходимости делать это, поэтому мы пока избегали этого. Очевидно, что язык неоднозначен в зависимости от динамических определений различных идентификаторов, поэтому то, как вы интерпретируете (анализируете) фразу в один момент, статически не разрешимо. Мы думаем, что можем сделать это, используя синтаксический анализатор GLR, который обрабатывает неоднозначности и просто удерживает неоднозначности как возможные альтернативы времени выполнения. Я дам вам знать через несколько месяцев.

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