Парсер грамматики
Эту статью необходимо обновить . ( апрель 2010 г. ) |
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), которые можно напрямую преобразовать в исполняемый байт-код.
Ссылки
[ редактировать ]- ^ Мишо, Патрик Р. (22 ноября 2004 г.). «Parrot Grammar Engine (PGE)» . Архивировано из оригинала 20 декабря 2005 г.
- ^ Мишо, Патрик Р. (08 ноября 2004 г.). «Первый публичный выпуск грамматического движка» .
- ^ Агент Чжан (17 сентября 2006 г.). «ПЦР заменяет PGE у мопсов» .
Внешние ссылки
[ редактировать ]- «Парсеры, правила Perl 6 и грамматический движок Parrot» . 28 июня 2006 г.