Синтаксический анализатор грамматики

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

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

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

Содержание
  • 1 История
  • 2 Внутреннее устройство
    • 2.1 Генерация кода
  • 3 ссылки
  • 4 Внешние ссылки
История

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

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

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

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

 rule term { lt;numbergt; | \( lt;exprgt; \) } rule number { \d+ } rule expr { lt;termgt; ( '+' lt;termgt;)* }

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

 rule expr is optable {... } rule term { lt;numbergt; | \( lt;exprgt; \) } rule number { \d+ } proto term: is precedence('=') is parsed(amp;term) {...} proto infix:+ is looser('term:') {...}

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

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

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

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

Pge-overview.svg

Ссылки
внешние ссылки
Последняя правка сделана 2023-04-17 07:07:46
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте