Сравнение генераторов парсеров
Эта статья нуждается в дополнительных цитатах для проверки . ( июль 2023 г. ) |
Это список известных генераторов лексеров и генераторов синтаксических анализаторов для различных языковых классов.
Обычные языки
[ редактировать ]Регулярные языки — это категория языков (иногда называемая типом Хомского 3 ), которой может соответствовать конечный автомат (более конкретно, детерминированный конечный автомат или недетерминированный конечный автомат ), построенный на основе регулярного выражения . В частности, обычный язык может сопоставлять такие конструкции, как «A следует за B», «Либо A, либо B», «A, за которым следует ноль или более экземпляров B», но не может сопоставлять конструкции, которые требуют согласованности между несмежными элементами, такие как как «за некоторыми экземплярами A следует такое же количество экземпляров B», а также не может выражать концепцию рекурсивного «вложения» («за каждым A в конечном итоге следует соответствующий B»). Классическим примером проблемы, которую не может решить обычная грамматика, является вопрос о том, содержит ли данная строка правильно вложенные круглые скобки. (Обычно это обрабатывается грамматикой Хомского типа 2, также называемой контекстно-свободной грамматикой .)
Имя | Алгоритм Лексера | Языки вывода | Грамматика, код | Платформа разработки | Лицензия |
---|---|---|---|---|---|
Алекс | ДФА | Хаскелл | Смешанный | Все | Бесплатно, БСД |
АнноФлекс | ДФА | Ява | Смешанный | виртуальная машина Java | Бесплатно, БСД |
Астир | Управление таблицей DFA , с ветвлением | С++ | Только грамматика (действовало) | Все | Бесплатно, Массачусетский технологический институт |
ОстинИкс | ДФА | Ява | Отдельный | Все | Бесплатно, БСД |
С# гибкий | ДФА | С# | Смешанный | .NET CLR | Бесплатно, GNU GPL |
С# Лекс | ДФА | С# | Смешанный | .NET CLR | ? |
КукCC | ДФА | Ява | Смешанный | виртуальная машина Java | Бесплатно, Апач 2.0 |
ДФА | DFA Сжатая матрица | С , С++ | Отдельный | Windows, Визуальная Студия | БСД |
Дельфин | ДФА | С++ | Отдельный | Все | Собственный |
Гибкий | DFA Управление таблицей | С , С++ | Смешанный | Все | Бесплатно, БСД |
гельекс | ДФА | Эйфелева | Смешанный | Эйфелева | Бесплатно, Массачусетский технологический институт |
голекс | ДФА | Идти | Смешанный | Идти | Бесплатная, BSD в стиле |
gplex | ДФА | С# | Смешанный | .NET CLR | Бесплатная, BSD -подобная |
JFlex | ДФА | Ява | Смешанный | виртуальная машина Java | Бесплатно, БСД |
ДжейЛекс | ДФА | Ява | Смешанный | виртуальная машина Java | Бесплатная, BSD -подобная |
Лекс | ДФА | С | Смешанный | ПОСИКС | Частичный, проприетарный , CDDL |
лексертль | ДФА | С++ | ? | Все | Бесплатно, GNU LGPL |
Квекс | DFA Прямой код | С , С++ | Смешанный | Все | Бесплатно, GNU LGPL |
Мужчина | ДФА | Го , C , C++ , ассемблер | Смешанный | Все | Бесплатно, GNU GPL , Массачусетский технологический институт [1] [2] |
Рефлекс | Прямой код DFA , библиотеки DFA на основе таблиц и NFA . библиотеки регулярных выражений | С++ | Смешанный | Все | Бесплатно, БСД |
re2c | DFA Прямой код | C , C++ , Го , Ржавчина | Смешанный | Все | Бесплатно, общественное достояние |
Детерминированные контекстно-свободные языки
[ редактировать ]Контекстно-свободные языки — это категория языков (иногда называемых типом Хомского 2 ), которым можно сопоставить последовательность правил замены, каждое из которых по существу отображает каждый нетерминальный элемент в последовательность терминальных элементов и/или других нетерминальных элементов. Грамматики этого типа могут соответствовать всему, что может быть сопоставлено с помощью обычной грамматики , и, кроме того, могут обрабатывать концепцию рекурсивного «вложения» («за каждым A в конечном итоге следует соответствующее B»), например, вопрос о том, является ли данное строка содержит правильно вложенные круглые скобки. Однако правила контекстно-свободных грамматик являются чисто локальными и поэтому не могут обрабатывать вопросы, требующие нелокального анализа, такие как «Существует ли объявление для каждой переменной, которая используется в функции?». Технически, чтобы сделать это, потребуется более сложная грамматика, такая как грамматика Хомского типа 1, также называемая контекстно-зависимой грамматикой . Однако генераторы синтаксических анализаторов для контекстно-свободных грамматик часто поддерживают возможность написанного пользователем кода вводить ограниченную степень контекстно-зависимости. (Например, при обнаружении объявления переменной написанный пользователем код может сохранить имя и тип переменной во внешней структуре данных, чтобы их можно было проверить на предмет более поздних ссылок на переменные, обнаруженных анализатором.)
Детерминированные контекстно-свободные языки являются подмножеством контекстно-свободных языков, которые могут эффективно анализироваться детерминированными автоматами с выталкиванием вниз .
Имя | парсинга Алгоритм | Обозначение входной грамматики | Языки вывода | Грамматика, код | Лексер | Платформа разработки | ИДЕТ | Лицензия |
---|---|---|---|---|---|---|---|---|
АНТЛР 4 | Адаптивная LL(*) [3] | ЕБНФ | C# , Java , Python , JavaScript , C++ , Swift , Go , PHP | Отдельный | созданный | виртуальная машина Java | Да | Бесплатно, БСД |
АНТЛР 3 | ЛЛ (*) | ЕБНФ | ActionScript , Ada95 , C , C++ , C# , Java , JavaScript , Objective-C , Perl , Python , Ruby | Смешанный | созданный | виртуальная машина Java | Да | Бесплатно, БСД |
ПНГ [4] | Рекурсивный спуск , возврат | АБНФ | Python , JavaScript , C , Java | Отдельный | никто | Все | Нет | Бесплатно, БСД |
Бобр [5] [6] | ЛАЛР (1) | ЕБНФ | Ява | Смешанный | внешний | виртуальная машина Java | Нет | Бесплатно, БСД |
Бизон | LALR (1), LR (1), IELR (1), GLR | Якк | С , С++ , Ява | Смешанный | внешний | Все | Нет | Бесплатно, GNU GPL, за исключением |
БтЯкк | Возврат снизу вверх | ? | С++ | Смешанный | внешний | Все | Нет | Бесплатно, общественное достояние |
по акк | ЛАЛР (1) | Якк | С | Смешанный | внешний | Все | Нет | Бесплатно, общественное достояние |
CL-Yacc [7] [8] | ЛАЛР (1) | Лисп | Общий Лисп | Смешанный | внешний | Все | Нет | Бесплатно, Массачусетский технологический институт |
Коко/Р | ЛЛ (1) | ЕБНФ | C , C++ , C# , F# , Java , Ada , Object Pascal , Delphi , Modula-2 , Oberon , Ruby , Swift , Unicon , Visual Basic .NET | Смешанный | созданный | Виртуальная машина Java , .NET Framework, Windows , POSIX (зависит от языка вывода) | Нет | Бесплатно, GNU GPL |
CppCC [9] [10] | ЛЛ (к) | ? | С++ | Смешанный | созданный | ПОСИКС | Нет | Бесплатно, GNU GPL |
ЧАШКА [11] [12] | ЛАЛР (1) | ? | Ява | Смешанный | внешний | виртуальная машина Java | Нет | Бесплатная, BSD -подобная |
Или [13] [14] | ЛАЛР (1) | ? | С | Смешанный | созданный | ПОСИКС | Нет | Бесплатно, GNU GPL , GNU LGPL |
Сущность [15] | ЛР (?) | ? | Схема 48 | Смешанный | внешний | Все | Нет | Бесплатно, БСД |
ага [16] | ЛАЛР (1) | ? | Перл | Смешанный | внешний или генерируемый | Все | Нет | Бесплатное, Художественное |
ЗОЛОТО [17] | ЛАЛР (1) | БНФ | язык ассемблера x86 , ANSI C , C# , D , Java , Pascal , Object Pascal , Python , Visual Basic 6, Visual Basic .NET , Visual C++ | Отдельный | созданный | Окна | Да | Бесплатно, zlib модифицирован |
Генератор парсера Hime [18] | ЛАЛР (1), ГЛР | диалект БНФ | С# , Java , Руст | Отдельный | созданный | .NET Framework, виртуальная машина Java | Нет | Бесплатно, GNU LGPL |
Хьякк [19] | ЛР(1), ЛАЛР(1), ЛР (0) | Якк | С | Смешанный | внешний | Все | Нет | Бесплатно, GNU GPL |
JavaCC [20] [21] | ЛЛ (к) | ЕБНФ | Java , C++ , JavaScript (через GWT ) компилятор [22] | Смешанный | созданный | виртуальная машина Java | Да | Бесплатно, БСД |
JFLAP | ЛЛ (1), ЛАЛР (1) | ? | Ява | ? | ? | виртуальная машина Java | Да | ? |
ДжетПАГ | ЛЛ (к) | ? | С++ | Смешанный | созданный | Все | Нет | Бесплатно, GNU GPL |
JS/CC | ЛАЛР (1) | ЕБНФ | JavaScript , JScript , ECMAScript | Смешанный | внутренний | Все | Да | Бесплатно, БСД |
KDevelop-PG-Qt | LL (1), обратный путь , маневровая станция | ? | С++ | Смешанный | генерируемый или внешний | Всё, ГДЕ | Нет | Бесплатно, GNU LGPL |
Вызов | Возврат LALR (1) | ? | С++ | Смешанный | созданный | ПОСИКС | Нет | Бесплатно, GNU GPL |
кмьякк | ЛАЛР (1) | ? | С , Java , Перл , JavaScript | Смешанный | внешний | Все | Нет | Бесплатно, GNU GPL |
Лапг | ЛАЛР (1) | ? | C , C++ , C# , Java , JavaScript | Смешанный | созданный | виртуальная машина Java | Нет | Бесплатно, GNU GPL |
Жаворонок | LALR (1), Эрли (SPPF) | ЕБНФ | Питон , JavaScript | Смешанный | созданный | Все | Да | Бесплатно, Массачусетский технологический институт |
Лимон | ЛАЛР (1) | диалект БНФ [23] | С | Смешанный | внешний | Все | Нет | Бесплатно, общественное достояние |
Читатель [24] [25] [26] | ЛР (1), ГЛР | ЕБНФ диалект | JavaScript | Отдельный | созданный | Node.js , JavaScript | Нет | Бесплатно, Массачусетский технологический институт |
Лайм | ЛАЛР (1) | ? | PHP | Смешанный | внешний | Все | Нет | Бесплатно, GNU GPL |
ЛИЗА | ЛР (?), ЛЛ (?), ЛАЛР (?), СЛР (?) | ? | Ява | Смешанный | созданный | виртуальная машина Java | Да | Бесплатно, общественное достояние |
LLgen | ЛЛ (1) | ? | С | Смешанный | внешний | ПОСИКС | Нет | Бесплатно, БСД |
LLnextgen | ЛЛ (1) | ? | С | Смешанный | внешний | Все | Нет | Бесплатно, GNU GPL |
ЛЛЛПГ | LL (k) + синтаксические и смысловые предикаты | ANTLR-подобный | С# | Смешанный | созданный (?) | .NET Framework, моно | Визуальная Студия | Бесплатно, GNU LGPL |
сжиженный нефтяной газ | Возврат LALR (k) | ? | Ява | Смешанный | созданный | виртуальная машина Java | Нет | Бесплатно, АПЛ |
ЛРСТАР [27] | ЛАЛР (1), ЛАЛР (*) | ЯКК, АНТЛР, ЕБНФ | С++ | Отдельный | созданный | Окна | Визуальная Студия | Бесплатно, БСД |
Менгиры | ЛР (1) | ? | OCaml | Смешанный | созданный | Все | Нет | Бесплатно, QPL |
ML-Yacc | ЛАЛР (1) | ? | МЛ | Смешанный | внешний | Все | Нет | ? |
Обезьяна | ЛР (1) | ? | Ява | Отдельный | созданный | виртуальная машина Java | Нет | Бесплатно, GNU GPL |
Месть | ЛАЛР (к), ЛР (к) | ЯАКК , ЕБНФ | С , С++ | Смешанный | внешний или генерируемый | POSIX , Сигвин | Нет | Бесплатно, GNU GPL |
MTP (Больше, чем анализ) | ЛЛ (1) | ? | Ява | Отдельный | созданный | виртуальная машина Java | Нет | Бесплатно, GNU GPL |
МойПарсер | ЛЛ (*) | Уценка | С++11 | Отдельный | внутренний | Любой со стандартным компилятором C++11. | Нет | Бесплатно, Массачусетский технологический институт |
НЛТ | ГЛР | C# / BNF -подобный | С# | Смешанный | смешанный | .NET- фреймворк | Нет | Бесплатно, Массачусетский технологический институт |
окамлякк | ЛАЛР (1) | ? | OCaml | Смешанный | внешний | Все | Нет | Бесплатно, QPL |
олекс | ЛЛ (1) | ? | С++ | Смешанный | созданный | Все | Нет | Бесплатно, GNU GPL |
Парсек | ЛЛ , возврат назад | Хаскелл | Хаскелл | Смешанный | никто | Все | Нет | Бесплатно, БСД |
ага [16] | ЛАЛР (1) | ? | Перл | Смешанный | внешний | Все | Нет | Бесплатно, GNU GPL |
Объекты парсера | ЛЛ (к) | ? | Ява | Смешанный | ? | виртуальная машина Java | Нет | Бесплатно, zlib |
ПКЦТС | LL | ? | С , С++ | ? | ? | Все | Нет | ? |
ПЛИ | ЛАЛР (1) | БНФ | Питон | Смешанный | созданный | Все | Нет | Бесплатно, Массачусетский технологический институт |
ПлайПлюс | ЛАЛР (1) | ЕБНФ | Питон | Отдельный | созданный | Все | Нет | Бесплатно, Массачусетский технологический институт |
ПРЕКК | ЛЛ (к) | ? | С | Отдельный | созданный | ДОС , ПОСИКС | Нет | Бесплатно, GNU GPL |
соотв. [28] | ЛАЛР (1) | BNF -подобный, yacc-подобный [29] | Руби | Смешанный | ? | Windows, Linux, macOS, FreeBSD, NetBSD | Нет | LGPL |
КЛАЛР | ЛАЛР (1) | ? | С++ | Смешанный | внешний | Все | Нет | Бесплатно, GNU GPL |
СобольCC | ЛАЛР (1) | ? | C , C++ , C# , Java , OCaml , Python | Отдельный | созданный | виртуальная машина Java | Нет | Бесплатно, GNU LGPL |
СЛК [30] | ЛЛ (к) ЛР (к) ЛАЛР (к) | ЕБНФ | C , C++ , C# , Java , JavaScript | Отдельный | внешний | Все | Нет | СЛК [31] |
СЛАЙ [32] | ЛАЛР (1) | БНФ | Питон | Смешанный | созданный | Все | Нет | Бесплатно, Массачусетский технологический институт |
SP (Простой парсер) | Рекурсивный спуск | Питон | Питон | Отдельный | созданный | Все | Нет | Бесплатно, GNU LGPL |
Дух | Рекурсивный спуск | ? | С++ | Смешанный | внутренний | Все | Нет | Бесплатно, Повышение |
Стикс | ЛАЛР (1) | ? | С , С++ | Отдельный | созданный | Все | Нет | Бесплатно, GNU LGPL |
сладкий парсер | ЛАЛР (1) | ? | С++ | Отдельный | созданный | Окна | Нет | Бесплатно, zlib |
Кран | ЛЛ (1) | ? | С++ | Смешанный | созданный | Все | Нет | Бесплатно, GNU GPL |
Тексттрансформер | ЛЛ (к) | ? | С++ | Смешанный | созданный | Окна | Да | Собственный |
КрошечныйPG | ЛЛ (1) | ? | С# , Визуальный Бейсик | ? | ? | Окна | Да | Частично, CPOL 1.0 |
Генератор игрушечного парсера | Рекурсивный спуск | ? | Питон | Смешанный | созданный | Все | Нет | Бесплатно, GNU LGPL |
ТП Якк | ЛАЛР (1) | ? | Турбо Паскаль | Смешанный | внешний | Все | Да | Бесплатно, GNU GPL |
Сидящий на дереве [33] | ЛР (1), ГЛР | JavaScript DSL , JSON | C , привязки ( Rust , WebAssembly , JavaScript , Python и многие другие) | Отдельный | сгенерированный + внешний | Все | Neovim , Helix , GNU Emacs , Lapce , Zed | Бесплатно, Массачусетский технологический институт |
Туннельная грамматическая студия | Парсинг туннелей | АБНФ | С++ | Отдельный | созданный | Окна | Да | Собственный |
Ультраграмм | ЛАЛР (1), ЛР (1), ГЛР | БНФ | C++, Java, C#, Visual Basic .NET | Отдельный | внешний | Окна | Да | Бесплатно, общественное достояние |
UniCC | ЛАЛР (1) | ЕБНФ | C , C++ , Python , JavaScript , JSON , XML | Смешанный | созданный | ПОСИКС | Нет | Бесплатно, БСД |
УрчинCC | ЛЛ (1) | ? | Ява | ? | созданный | виртуальная машина Java | Нет | ? |
Якк AT&T / Вс | ЛАЛР (1) | Якк | С | Смешанный | внешний | ПОСИКС | Нет | Бесплатно, CPL и CDDL |
Як++ | ЛР (1), ЛАЛР (1) | Якк | С++ , С# | Смешанный | генерируемый или внешний | Все | Нет | Собственный |
Яппы | ЛЛ (1) | ? | Питон | Смешанный | созданный | Все | Нет | Бесплатно, Массачусетский технологический институт |
дааа | ЛАЛР (1) | ? | Эрланг | Отдельный | созданный | Все | Нет | Бесплатно, Апач 2.0 |
Визуальный БНФ | ЛР (1), ЛАЛР (1) | ? | С# | Отдельный | созданный | .NET- фреймворк | Да | Собственный |
ЮПарс | ЛР (1), ЛАЛР (1) | ? | С++ | Смешанный | внешний | Все | Нет | Бесплатно, Массачусетский технологический институт |
Разобрать [34] | ЛР (1) | БНФ в C++ типах | ? | ? | никто | Стандартный компилятор C++11 | Нет | Бесплатно, Массачусетский технологический институт |
ГГЛЛ | ЛЛ (1) | График | Ява | Смешанный | созданный | Окна | Да | Бесплатно, Массачусетский технологический институт |
Продукт | парсинга Алгоритм | Обозначение входной грамматики | Языки вывода | Грамматика, код | Лексер | Платформа разработки | ИДЕТ | Лицензия |
Анализ грамматик выражений, детерминированные логические грамматики
[ редактировать ]В этой таблице генераторы синтаксического анализа сравниваются с синтаксическими грамматиками выражений , детерминированными логическими грамматиками .
Имя | парсинга Алгоритм | Языки вывода | Грамматика, код | Платформа разработки | Лицензия |
---|---|---|---|---|---|
ОстинИкс | Пакрат (модифицированный) | Ява | Отдельный | Все | Бесплатно, БСД |
зубры | Пакрат | C , OCaml , Java | Смешанный | Все | Бесплатно, GNU GPL |
БНФлайт | Рекурсивный спуск | С++ | Смешанный | Все | Бесплатно, Массачусетский технологический институт |
Навес | Пакрат | Java , JavaScript , Python , Руби | Отдельный | Все | Бесплатно, GNU GPL |
CL-привязка | Пакрат | Общий Лисп | Смешанный | Все | Бесплатно, Массачусетский технологический институт |
Drat! | Пакрат | Д | Смешанный | Все | Бесплатно, GNU GPL |
Фрисби | Пакрат | Хаскелл | Смешанный | Все | Бесплатно, БСД |
грамматика::привязка | Пакрат | Ткл | Смешанный | Все | Бесплатно, БСД |
Грако | Packrat + Cut + Левая рекурсия | Python , C++ (бета) | Отдельный | Все | Бесплатно, БСД |
ЖелезоМета | Пакрат | С# | Смешанный | Окна | Бесплатно, БСД |
Вмешаться | Двухфазное нисходящее отслеживание без сканирования + поддержка во время выполнения | Ява | Отдельный | Все | Бесплатно, GNU GPL |
ларс::Парсер | Packrat (поддержка левой рекурсии и грамматической неоднозначности) | С++ | Идентичный | Все | Бесплатно, БСД |
LPeg | Разборная машина | Два | Смешанный | Все | Бесплатно, Массачусетский технологический институт |
тащить | Разборная машина | С++17 | Смешанный | Все | Бесплатно, Массачусетский технологический институт |
Мышь | Рекурсивный спуск (модифицированная, ограниченная мемоизация и левая рекурсия) | Ява | Отдельный | виртуальная машина Java | Бесплатно, Апач 2.0 |
Нарвал | Пакрат | С | Смешанный | POSIX , Windows | Бесплатно, БСД |
Нирли | Эрли | JavaScript | Смешанный | Все | Бесплатно, Массачусетский технологический институт |
Немерле.Пег | Рекурсивный спуск + Пратт | Немерль | Отдельный | Все | Бесплатно, БСД |
неотома | Пакрат | Эрланг | Отдельный | Все | Бесплатно, Массачусетский технологический институт |
НПЭГ | Рекурсивный спуск | С# | Смешанный | Все | Бесплатно, Массачусетский технологический институт |
Омета | Пакрат (модифицированный, частичная мемоизация) | JavaScript , Писк , Python | Смешанный | Все | Бесплатно, Массачусетский технологический институт |
ПакCC | Packrat (модифицированная поддержка левой рекурсии) | С | Смешанный | Все | Бесплатно, Массачусетский технологический институт |
Пакрат | Пакрат | Схема | Смешанный | Все | Бесплатно, Массачусетский технологический институт |
Паппи | Пакрат | Хаскелл | Смешанный | Все | Бесплатно, БСД |
пропаренный | Рекурсивный спуск | Ява , Скала | Смешанный | виртуальная машина Java | Бесплатно, Апач 2.0 |
Лямбда ПЭГ | Рекурсивный спуск | Ява | Смешанный | виртуальная машина Java | Бесплатно, Апач 2.0 |
нажимать | Рекурсивный спуск | С++ | Смешанный | Все | Бесплатно, общественное достояние |
Пастернак | Пакрат | С++ | Смешанный | Окна | Бесплатно, GNU GPL |
Узоры | Разборная машина | Быстрый | Идентичный | Все | Бесплатно, Массачусетский технологический институт |
колышек | Рекурсивный спуск | С | Смешанный | Все | Бесплатно, Массачусетский технологический институт |
PEG.js | Пакрат (частичная мемоизация) | JavaScript | Смешанный | Все | Бесплатно, Массачусетский технологический институт |
Пегги [35] | Пакрат (частичная мемоизация) | JavaScript | Смешанный | Все | Бесплатно, Массачусетский технологический институт |
Пегас | Рекурсивный спуск, Пакрат (выборочно) | С# | Смешанный | Окна | Бесплатно, Массачусетский технологический институт |
пегк | Рекурсивный спуск | С | Смешанный | Все | Бесплатно, общественное достояние |
вредитель | Рекурсивный спуск | Ржавчина | Отдельный | Все | Бесплатно, Массачусетский технологический институт , Apache 2.0 |
PetitParser | Пакрат | Smalltalk , Java , Дарт | Смешанный | Все | Бесплатно, Массачусетский технологический институт |
ПЭГТЛ [36] | Рекурсивный спуск | С++11 , С++17 | Смешанный | Все | Бесплатно, Повышение |
Механизм синтаксического анализа грамматики (PGE) | Гибридный рекурсивный спуск/приоритет операторов [37] | Байт-код попугая | Смешанный | Виртуальная машина Попугая | Бесплатная, Художественная 2.0 |
PyPy rlib | Пакрат | Питон | Смешанный | Все | Бесплатно, Массачусетский технологический институт |
Крысы! | Пакрат | Ява | Смешанный | виртуальная машина Java | Бесплатно, GNU LGPL |
Дух2 | Рекурсивный спуск | С++ | Смешанный | Все | Бесплатно, Повышение |
Верхушка дерева | Рекурсивный спуск | Руби | Смешанный | Все | Бесплатно, Массачусетский технологический институт |
Площадка | Рекурсивный спуск | С++ | Смешанный | Все | Бесплатно, MIT или общественное достояние |
Откровение | Разборная машина | C , Java , JavaScript , Python , Racket , Ruby | Отдельный | Все | Бесплатно, Массачусетский технологический институт |
PHP PEG | PEG-парсер? | PHP | Смешанный | Все | Бесплатно, БСД |
Общие контекстно-свободные, конъюнктивные или логические языки
[ редактировать ]В этой таблице сравниваются языки-генераторы синтаксического анализа с общей контекстно-свободной грамматикой , конъюнктивной грамматикой или логической грамматикой .
Имя | парсинга Алгоритм | Обозначение входной грамматики | Языки вывода | Грамматика, код | Лексер | Платформа разработки | ИДЕТ | Лицензия |
---|---|---|---|---|---|---|---|---|
АКЦЕНТ | Эрли | Якк вариант | С | Смешанный | внешний | Все | Нет | Бесплатно, GNU GPL |
АПАГЕД | ГЛР , ЛАЛР (1), ЛЛ (к) | ? | Д | Смешанный | созданный | Все | Нет | Бесплатное, Художественное |
Бизон | LALR (1), LR (1), IELR (1), GLR | Якк | С , С++ , Java , XML | Смешанный, кроме XML | внешний | Все | Нет | Бесплатно, GNU GPL |
Набор инструментов для реинжиниринга программного обеспечения DMS | ГЛР | ? | Он говорил | Смешанный | созданный | Окна | Нет | Собственный |
ДПарсер | GLR без сканера | ? | С | Смешанный | без сканера | ПОСИКС | Нет | Бесплатно, БСД |
Дипген | Расширяемый во время выполнения GLR | ? | OCaml | Смешанный | созданный | Все | Нет | Бесплатно, CeCILL -B |
Е3 | Эрли | ? | OCaml | Смешанный | внешний или без сканера | Все | Нет | ? |
Элкхаунд | ГЛР | ? | С++ , OCaml | Смешанный | внешний | Все | Нет | Бесплатно, БСД |
ГДК | ЛАЛР (1), ГЛР | ? | C , Lex , Haskell , HTML , Java , Object Pascal , Yacc | Смешанный | созданный | ПОСИКС | Нет | Бесплатно, Массачусетский технологический институт |
Счастливый | ЛАЛР , ГЛР | ? | Хаскелл | Смешанный | внешний | Все | Нет | Бесплатно, БСД |
Генератор парсера Hime | ГЛР | ? | С# , Java , Руст | Отдельный | созданный | .NET Framework, виртуальная машина Java | Нет | Бесплатно, GNU LGPL |
Библиотека IronText | ЛАЛР (1), ГЛР | С# | С# | Смешанный | генерируемый или внешний | .NET- фреймворк | Нет | Бесплатно, Апач 2.0 |
Джисон | ЛАЛР (1), ЛР (0), Зеркальный (1) | Якк | JavaScript , C# , PHP | Смешанный | созданный | Все | Нет | Бесплатно, Массачусетский технологический институт |
Синтаксис | ЛАЛР (1), ЛР (0), СЛР (1) ЦЛР (1) ЛЛ (1) | JSON / Якк | JavaScript , Python , PHP , Ruby , C++ , C# , Rust , Java | Смешанный | созданный | Все | Нет | Бесплатно, Массачусетский технологический институт |
Вмешаться | Без сканера, двухфазный | Вмешаться | Ява | Отдельный | без сканера | Все | Нет | Бесплатно, GNU GPL |
МодельCC | Эрли | Аннотированная модель класса | Ява | Сгенерировано | созданный | Все | Нет | Бесплатно, БСД |
П3 | Эрли – комбинаторы | BNF-подобный | OCaml | Смешанный | внешний или без сканера | Все | Нет | ? |
П4 | Эрли – комбинаторы, бесконечные КФГ. | BNF-подобный | OCaml | Смешанный | внешний или без сканера | Все | Нет | ? |
Логический парсер без сканирования | GLR без сканирования ( булева грамматика ) | ? | Хаскелл , Ява | Отдельный | без сканера | виртуальная машина Java | Нет | Бесплатно, БСД |
СДС /СГЛР | GLR без сканера | СДС | С , Ява | Отдельный | без сканера | Все | Да | Бесплатно, БСД |
СмаСС | ГЛР (1), ЛАЛР (1), ЛР (1) | ? | Смолток | Смешанный | внутренний | Все | Да | Бесплатно, Массачусетский технологический институт |
ИСКРА | Эрли | ? | Питон | Смешанный | внешний | Все | Нет | Бесплатно, Массачусетский технологический институт |
Том | ГЛР | ? | С | Сгенерировано | никто | Все | Нет | Бесплатно, «Никаких ограничений лицензирования и авторских прав» |
Ультраграмм | ЛАЛР , ЛР , ГЛР | ? | C++ , C# , Java , Visual Basic.NET | Отдельный | созданный | Окна | Да | Собственный |
Червоточина | Обрезка , LR , GLR , GLR без сканера | ? | С , Питон | Смешанный | без сканера | Окна | Нет | Бесплатно, Массачусетский технологический институт |
Китовый теленок | Общая табличная, SLL (k), Линейная нормальная форма ( сопряженные грамматики ), LR , Бинарная нормальная форма ( булева грамматика ) | ? | С++ | Отдельный | внешний | Все | Нет | Собственный |
ага | Эрли | Якк -подобный | С | Смешанный | внешний | Все | Нет | Бесплатно, GNU LGPL |
Контекстно-зависимые грамматики
[ редактировать ]В этой таблице сравниваются генераторы парсеров с контекстно-зависимыми грамматиками .
Имя | Алгоритм парсинга | Обозначение входной грамматики | Булева грамматика | Платформа разработки | Лицензия |
---|---|---|---|---|---|
bnf2xml | Рекурсивный спуск (вывод текстового фильтра в формате xml) | простой БНФ [ нужны разъяснения ] грамматика (сопоставление ввода), вывод — xml | ? | Бета, а не полноценный парсер EBNF | Бесплатно, GNU GPL |
См. также
[ редактировать ]Примечания
[ редактировать ]Ссылки
[ редактировать ]- ^ «Компилятор конечного автомата Ragel» .
- ^ http://www.colm.net/open-source/ragel/ [ нужна проверка ]
- ^ «Адаптивный анализ LL(*): возможности динамического анализа» (PDF) . Теренс Парр . Проверено 3 апреля 2016 г.
- ^ «Обзор различных инструментов синтаксического анализатора» . www.ijraset.com . Проверено 16 сентября 2023 г.
- ^ Бойленд, Джон; Спивак, Дэниел (17 сентября 2010 г.). «Инструментальная бумага: генератор рекурсивного синтаксического анализатора ScalaBison» . Электронные заметки по теоретической информатике . Материалы девятого семинара по инструментам и приложениям языковых описаний (LDTA 2009). 253 (7): 65–74. дои : 10.1016/j.entcs.2010.08.032 . ISSN 1571-0661 .
- ^ «Бобер — генератор парсера LALR» . beaver.sourceforge.net . Проверено 16 сентября 2023 г.
- ^ Ньютон, Джим Э.; Демайль, аким; Верна, Дидье (9 мая 2016 г.). «Проверка типов гетерогенных последовательностей в Common Lisp» (PDF) . Материалы 9-го Европейского симпозиума по Lisp на Европейском симпозиуме по Lisp . ЭЛС2016. Краков, Польша: Европейская ассоциация научной деятельности по Lisp: 13–20. ISBN 978-2-9557474-0-7 .
- ^ «CL-Yacc — генератор синтаксического анализатора LALR(1) для Common Lisp» . www.irif.fr. Проверено 16 сентября 2023 г.
- ^ Хосейнпур, Сахере; Алави Милани, Мир Мохаммад Реза; Пехливан, Хусейн (июль 2018 г.). «Пошаговая методология решения математических выражений» . Симметрия . 10 (7): 285. Бибкод : 2018Symm...10..285H . дои : 10.3390/sym10070285 . ISSN 2073-8994 .
- ^ «Домашняя страница CppCC» . cppcc.sourceforge.net . Проверено 16 сентября 2023 г.
- ^ «Кубок Явы» . страницы.cs.wisc.edu . Проверено 16 сентября 2023 г.
- ^ "ЧАШКА" . www2.cs.tum.edu . Проверено 16 сентября 2023 г.
- ^ Тиманн, Питер; Нойбауэр, Матиас (31 декабря 2004 г.). «Параметризованный анализ LR» . Электронные заметки по теоретической информатике . Материалы четвертого семинара по описаниям языков, инструментам и приложениям (LDTA 2004). 110 : 115–132. дои : 10.1016/j.entcs.2004.06.007 . ISSN 1571-0661 .
- ^ Грей, Роберт В.; Леви, Стивен П.; Хеуринг, Винсент П.; Слоан, Энтони М.; Уэйт, Уильям М. (1992). «Эли: полная, гибкая система построения компилятора» . Коммуникации АКМ . 35 (2): 121–130. дои : 10.1145/129630.129637 . ISSN 0001-0782 . S2CID 5121773 .
- ^ Оуэнс, Скотт; Флэтт, М.; Шиверс, О.; Макмаллан, Бенджамин (1 октября 2004 г.). «Лексеры и генераторы синтаксических анализаторов в схеме» (PDF) . Схема 2004: Материалы пятого семинара по схемам и функциональному программированию .
- ^ Jump up to: а б Арейас, Хьюго; Симоэнс, Альберто; Энрикес, П.; Круз, Даниэла Карнейро да (1 сентября 2010 г.). «Генерация парсера в Perl: обзор и доступные инструменты» (PDF) .
{{cite journal}}
: Для цитирования журнала требуется|journal=
( помощь ) - ^ Волкман, Виктор (19 июля 2007 г.). «Пусть ваш парсер пойдет за ЗОЛОТОМ» . Разработчик.com . Проверено 4 ноября 2023 г.
- ^ «Разбор в C#: все инструменты и библиотеки, которые вы можете использовать (часть 2) — DZone» . dzone.com . Проверено 4 ноября 2023 г.
- ^ Ортин, Франциско; Кирога, Хосе; Родригес-Прието, Оскар; Гарсия, Мигель (3 марта 2022 г.). «Эмпирическая оценка инструментов генерации парсеров Lex/Yacc и ANTLR» . ПЛОС ОДИН . 17 (3): e0264326. Бибкод : 2022PLoSO..1764326O . дои : 10.1371/journal.pone.0264326 . ISSN 1932-6203 . ПМЦ 8893623 . ПМИД 35239695 .
- ^ Энселинг, Оливер (29 декабря 2000 г.). «Создавайте свои собственные языки с помощью JavaCC» . Инфомир . Проверено 4 ноября 2023 г.
- ^ «ЯваСС» . JavaCC . Проверено 4 ноября 2023 г.
- ^ «Создание парсеров для Интернета с помощью JavaCC и GWT (Часть первая)» . Крис Эйнсли. 14 апреля 2014 года . Проверено 4 мая 2014 г.
- ^ «Генератор Lemon Parser» . sqlite.org . Проверено 30 ноября 2023 г.
- ^ «Система парсера Lezer» .
- ^ «Создание редактора кода ShopifyQL» . Shopify . Проверено 6 декабря 2023 г.
- ^ «Спонсорство системы парсера Lezer | Tines» . www.tines.com . 11 марта 2022 г. Проверено 6 декабря 2023 г.
- ^ «Генератор анализатора LR(*) для C++» .
- ^ «Ракк» . i.loveruby.net . Проверено 26 ноября 2021 г.
- ^ «Справочник по файлам грамматики Racc» . i.loveruby.net . Проверено 26 ноября 2021 г.
- ^ «Генератор анализатора SLK поддерживает C, C++, Java, JavaScript и C#, дополнительный обратный поиск, бесплатно» .
- ^ http://www.slkpg.tech/license.txt [ текстовый файл с пустым URL-адресом ]
- ^ «ХАЙ (Хитрый Лекс Якк)» .
- ^ «Tree-Sitter — инкрементальная система синтаксического анализа инструментов программирования» .
- ^ «Parse — безопасный генератор синтаксического анализатора типа времени компиляции (LR) для C++» . Гитхаб . 30 декабря 2021 г.
- ^ Поддерживаемая вилка PEG.js.
- ^ taocpp/PEGTL , Искусство C++, 14 марта 2024 г. , получено 16 марта 2024 г.
- ^ «Попугай: Грамматический движок» . Фонд попугаев. 2011.
Правила PGE предоставляют всю мощь анализа рекурсивного спуска и анализа приоритета операторов.