Jump to content

Парсер грамматики

Parser Grammar Engine ( PGE , первоначально Parrot Grammar Engine ) — это компилятор и среда выполнения правил Raku для виртуальной машины Parrot . [1] PGE использует эти правила для преобразования грамматики выражения синтаксического анализа Parrot в байт-код . Таким образом, правила компилируются в программу, в отличие от большинства виртуальных машин и сред выполнения, которые хранят регулярные выражения во вторичном внутреннем формате, который затем интерпретируется во время выполнения обработчиком регулярных выражений. Формат правил, используемый PGE, может выражать любое регулярное выражение и большинство формальных грамматик и, как таковой, образует первое звено в цепочке компилятора для всех языков интерфейса Parrot.

При выполнении байт-код, сгенерированный PGE, будет анализировать текст, как описано в правилах ввода, создавая дерево синтаксического анализа. Деревом синтаксического анализа можно манипулировать напрямую или передать его на следующий этап цепочки инструментов компилятора Parrot , чтобы сгенерировать AST , из которого может произойти генерация кода (если грамматика описывает язык программирования).

Первоначально названный P6GE и написанный на C, PGE был переведен на родной язык Parrot и переименован вскоре после его первого выпуска в ноябре 2004 года. Его автор - Патрик Р. Мишо. [2] PGE был написан для того, чтобы сократить объем работы, необходимой для реализации компилятора поверх Parrot. Он также был написан для того, чтобы позволить Perl 6 легко размещаться самостоятельно, хотя текущая разработка Pugs больше не использует PGE в качестве основного сервера правил в пользу собственного движка под названием PCR. [3]

Внутренности

[ редактировать ]

PGE сочетает в себе три стиля синтаксического анализа:

Основной формой являются правила Raku, поэтому правило PGE может выглядеть следующим образом для грамматики, допускающей только сложение:

 rule term   { <number> | \( <expr> \) }
 rule number { \d+ }
 rule expr   { <term> ( '+' <term> )* }

Анализатор приоритета операторов позволяет создавать таблицу операторов и использовать ее непосредственно в анализаторе стиля правил Perl 6, например:

 rule expr is optable { ... }
 rule term   { <number> | \( <expr> \) }
 rule number { \d+ }
 proto term: is precedence('=')
             is parsed(&term) {...}
 proto infix:+ is looser('term:') {...}

Это достигает той же цели — определить простую грамматику, допускающую только сложение, но делает это с использованием комбинации регулярных выражений/правил в стиле Raku для term и number и возможность сдвига-уменьшения для всего остального.

Генерация кода

[ редактировать ]

Хотя PGE выводит код, который будет анализировать грамматику, описанную правилом, и может использоваться во время выполнения для обработки простых грамматик и регулярных выражений, обнаруженных в коде, его основной целью является анализ языков высокого уровня .

Цепочка инструментов компилятора Parrot разбита на несколько частей, первой из которых является PGE. PGE преобразует исходный код в деревья синтаксического анализа . Затем механизм Tree Grammar Engine (TGE) преобразует их в абстрактные синтаксические деревья Parrot (PAST). Затем второй проход TGE преобразует PAST в синтаксические деревья кода операции Parrot (POST), которые можно напрямую преобразовать в исполняемый байт-код.

  1. ^ Мишо, Патрик Р. (22 ноября 2004 г.). «Parrot Grammar Engine (PGE)» . Архивировано из оригинала 20 декабря 2005 г.
  2. ^ Мишо, Патрик Р. (08 ноября 2004 г.). «Первый публичный выпуск грамматического движка» .
  3. ^ Агент Чжан (17 сентября 2006 г.). «ПЦР заменяет PGE у мопсов» .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 3e445d5aef0407164e912051a87258c0__1714286400
URL1:https://arc.ask3.ru/arc/aa/3e/c0/3e445d5aef0407164e912051a87258c0.html
Заголовок, (Title) документа по адресу, URL1:
Parser Grammar Engine - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)