Сравнение генераторов парсеров - Comparison of parser generators
Эта статья может быть сбивает с толку или неясно читателям.Март 2014 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
Это список примечательных лексические генераторы и генераторы парсеров для разных языковых классов.
Обычные языки
Обычные языки являются категорией языков (иногда их называют Хомский Тип 3 ), которому может соответствовать конечный автомат (точнее, детерминированный конечный автомат или недетерминированный конечный автомат ) построенный из регулярное выражение. В частности, обычный язык может сопоставлять такие конструкции, как «A следует за B», «Либо A, либо B», «A, за которым следует ноль или более экземпляров B», но не может сопоставлять конструкции, которые требуют согласованности между несмежными элементами, например как «несколько экземпляров A, за которыми следует такое же количество экземпляров B», а также не могут выражать концепцию рекурсивной «вложенности» («за каждым A в конечном итоге следует соответствующий B»). Классическим примером проблемы, которую не может решить обычная грамматика, является вопрос о том, содержит ли данная строка правильно вложенные скобки. (Обычно это обрабатывается грамматикой Хомского типа 2, также называемой контекстно-свободная грамматика.)
Имя | Алгоритм лексера | Языки вывода | Грамматика, код | Платформа разработки | Лицензия |
---|---|---|---|---|---|
Алекс | DFA | Haskell | Смешанный | Все | Свободный, BSD |
AnnoFlex | DFA | Ява | Смешанный | Виртуальная машина Java | Свободный, BSD |
Астир | DFA настольный, с разветвлением | C ++ | Только грамматика (действует) | Все | Свободный, Массачусетский технологический институт |
AustenX | DFA | Ява | Отдельный | Все | Свободный, BSD |
C # Flex | DFA | C # | Смешанный | .NET CLR | Свободный, GNU GPL |
C # Lex | DFA | C # | Смешанный | .NET CLR | ? |
CookCC | DFA | Ява | Смешанный | Виртуальная машина Java | Свободный, Apache 2.0 |
DFA (вкл. с LRSTAR) | Сжатая матрица DFA | C ++ | Отдельный | Visual Studio | BSD |
Дельфин | DFA | C ++ | Отдельный | Все | Проприетарный |
Flex | DFA управляемый столом | C, C ++ | Смешанный | Все | Свободный, BSD |
гелекс | DFA | Эйфель | Смешанный | Эйфель | Свободный, Массачусетский технологический институт |
голекс | DFA | Идти | Смешанный | Идти | Свободный, BSD -стиль |
gplex | DFA | C # | Смешанный | .NET CLR | Свободный, BSD -подобно |
JFlex | DFA | Ява | Смешанный | Виртуальная машина Java | Свободный, BSD |
JLex | DFA | Ява | Смешанный | Виртуальная машина Java | Свободный, BSD -подобно |
lex | DFA | C | Смешанный | POSIX | Частично, проприетарный, CDDL |
Lexertl | DFA | C ++ | ? | Все | Свободный, GNU LGPL |
Quex | DFA прямой код | C, C ++ | Смешанный | Все | Свободный, GNU LGPL |
Рагель | DFA | Идти, C, C ++, сборка | Смешанный | Все | Свободный, GNU GPL, Массачусетский технологический институт[1][2] |
Рефлекс | DFA прямой код, таблица DFA и NFA библиотеки регулярных выражений | C ++ | Смешанный | Все | Свободный, BSD |
re2c | DFA прямой код | C | Смешанный | Все | Свободный, всеобщее достояние |
Детерминированные контекстно-свободные языки
Бесконтекстные языки являются категорией языков (иногда называемых Хомский Тип 2 ), которым может соответствовать последовательность правил замены, каждое из которых по существу отображает каждый нетерминальный элемент в последовательность конечных элементов и / или других нетерминальных элементов. Грамматики этого типа могут соответствовать всему, что может быть сопоставлено регулярная грамматика, и, более того, может обрабатывать концепцию рекурсивного «вложения» («за каждым A в конечном итоге следует соответствующий B»), например, вопрос о том, содержит ли данная строка правильно вложенные круглые скобки. Однако правила контекстно-свободных грамматик являются чисто локальными и поэтому не могут обрабатывать вопросы, требующие нелокального анализа, такие как «Существует ли объявление для каждой переменной, которая используется в функции?». Для этого технически потребовалась бы более сложная грамматика, такая как грамматика Хомского типа 1, также называемая контекстно-зависимая грамматика. Однако генераторы парсеров для контекстно-свободных грамматик часто поддерживают возможность написанного пользователем кода вводить ограниченное количество контекстной чувствительности. (Например, при обнаружении объявления переменной написанный пользователем код может сохранить имя и тип переменной во внешней структуре данных, чтобы их можно было проверить на соответствие более поздним ссылкам на переменные, обнаруженным анализатором.)
В детерминированные контекстно-свободные языки являются правильным подмножеством контекстно-свободных языков, которые могут быть эффективно проанализированы детерминированные автоматы выталкивания.
Имя | Парсинг алгоритм | Обозначение грамматики ввода | Языки вывода | Грамматика, код | Лексер | Платформа разработки | IDE | Лицензия |
---|---|---|---|---|---|---|---|---|
AGL | GLR | EBNF | Ява, JavaScript, (другие цели Kotlin) | Отдельный | никто | Любая целевая платформа Kotlin | Нет | Свободный, Apache 2.0 |
ANTLR 4 | Адаптивный LL (*)[3] | EBNF | C #, Ява, Python, JavaScript, C ++, Быстрый, Идти, PHP | Отдельный | генерируется | Виртуальная машина Java | да | Свободный, BSD |
ANTLR 3 | LL (*) | EBNF | ActionScript, Ada95, C, C ++, C #, Ява, JavaScript, Цель-C, Perl, Python, Рубин | Смешанный | генерируется | Виртуальная машина Java | да | Свободный, BSD |
ПНГ | Рекурсивный спуск, возврат | ABNF | C, C ++, JavaScript, Ява | Отдельный | никто | Все | Нет | Свободный, GNU GPL |
Астир | LL (k), LL (конечный), LL (*) | Иерархическая грамматика Astir | C ++ | Только грамматика (действует) | генерируется | Все | Код Visual Studio | Свободный, Массачусетский технологический институт |
ТОПОР | Рекурсивный спуск | AX / C ++ | C ++ 17, C ++ 11 | Смешанный | никто | Любой с C ++ 17 или же C ++ 11 стандартный компилятор | Нет | Свободный, Способствовать росту |
Бобр | LALR (1) | EBNF | Ява | Смешанный | внешний | Виртуальная машина Java | Нет | Свободный, BSD |
Belr | Рекурсивный спуск | ABNF | C ++ 17, C ++ 11 | Отдельный | включены | POSIX | Нет | Частично, GNU GPL, проприетарный |
Бизон | LALR (1), LR (1), IELR (1), GLR | Yacc | C, C ++, Ява | Смешанный | внешний | Все | Нет | Свободный, GNU GPL за исключением |
Бизон ++[примечание 1] | LALR (1) | ? | C ++ | Смешанный | внешний | POSIX | Нет | Свободный, GNU GPL |
БизонС ++ | LALR (1) | ? | C ++ | Смешанный | внешний | POSIX | Нет | Свободный, GNU GPL |
BtYacc | Возврат Вверх дном | ? | C ++ | Смешанный | внешний | Все | Нет | Свободный, всеобщее достояние |
byacc | LALR (1) | Yacc | C | Смешанный | внешний | Все | Нет | Свободный, всеобщее достояние |
BYACC / J | LALR (1) | Yacc | C, Ява | Смешанный | внешний | Все | Нет | Свободный, всеобщее достояние |
CL-Yacc | LALR (1) | Лисп | Common Lisp | Смешанный | внешний | Все | Нет | Свободный, Массачусетский технологический институт |
Коко / Р | LL (1) | EBNF | C, C ++, C #, F #, Ява, Ада, Object Pascal, Delphi, Модула-2, Оберон, Рубин, Быстрый, Юникон, Visual Basic .NET | Смешанный | генерируется | Виртуальная машина Java, .NET Framework, Windows, POSIX (зависит от языка вывода) | Нет | Свободный, GNU GPL |
CookCC | LALR (1) | Аннотации Java | Ява | Смешанный | генерируется | Виртуальная машина Java | Нет | Свободный, Apache 2.0 |
CppCC | LL (k) | ? | C ++ | Смешанный | генерируется | POSIX | Нет | Свободный, GNU GPL |
CSP | LR (1) | ? | C ++ | Отдельный | генерируется | POSIX | Нет | Свободный, Apache 2.0 |
ЧАШКА | LALR (1) | ? | Ява | Смешанный | внешний | Виртуальная машина Java | Нет | Свободный, BSD -подобно |
Дракон | LR (1), LALR (1) | ? | C ++, Ява | Отдельный | генерируется | Все | Нет | Свободный, GNU GPL |
Эли | LALR (1) | ? | C | Смешанный | генерируется | POSIX | Нет | Свободный, GNU GPL, GNU LGPL |
Сущность | LR (?) | ? | Схема 48 | Смешанный | внешний | Все | Нет | Свободный, BSD |
Eyapp | LALR (1) | ? | Perl | Смешанный | внешний или сгенерированный | Все | Нет | Свободный, Художественный |
Хмуриться | LALR (k) | ? | Haskell 98 | Смешанный | внешний | Все | Нет | Свободный, GNU GPL |
Гейакк | LALR (1) | ? | Эйфель | Смешанный | внешний | Все | Нет | Свободный, Массачусетский технологический институт |
ЗОЛОТО | LALR (1) | BNF | язык ассемблера x86, ANSI C, C #, D, Ява, Паскаль, Object Pascal, Python, Visual Basic 6, Visual Basic .NET, Visual C ++ | Отдельный | генерируется | Windows | да | Свободный, zlib модифицированный |
GPPG | LALR (1) | Yacc | C # | Отдельный | внешний | Windows | да | Свободный, BSD |
Grammatica | LL (k) | BNF диалект | C #, Ява | Отдельный | генерируется | Виртуальная машина Java | Нет | Свободный, BSD |
HiLexed | LL (*) | EBNF или Java | Ява | Отдельный | внутренний | Виртуальная машина Java | Нет | Свободный, GNU LGPL |
Генератор парсеров Hime | LALR (1), GLR | BNF диалект | C #, Ява, Ржавчина | Отдельный | генерируется | .NET Framework, Виртуальная машина Java | Нет | Свободный, GNU LGPL |
Hyacc | LR (1), LALR (1), LR (0) | Yacc | C | Смешанный | внешний | Все | Нет | Свободный, GNU GPL |
iyacc | LALR (1) | Yacc | Значок | Смешанный | внешний | Все | Нет | Свободный, GNU LGPL |
Жак | LALR (1) | ? | Ява | Смешанный | внешний | Виртуальная машина Java | Нет | Свободный, BSD |
JavaCC | LL (k) | EBNF | Ява, C ++, JavaScript (через GWT компилятор)[4] | Смешанный | генерируется | Виртуальная машина Java | да | Свободный, BSD |
сойка | LALR (1) | Yacc | C #, Ява | Смешанный | никто | Виртуальная машина Java | Нет | Свободный, BSD |
JFLAP | LL (1), LALR (1) | ? | Ява | ? | ? | Виртуальная машина Java | да | ? |
JetPAG | LL (k) | ? | C ++ | Смешанный | генерируется | Все | Нет | Свободный, GNU GPL |
JS / CC | LALR (1) | EBNF | JavaScript, JScript, ECMAScript | Смешанный | внутренний | Все | да | Свободный, BSD |
KDevelop-PG-Qt | LL (1), возврат, маневровая площадка | ? | C ++ | Смешанный | генерируемый или внешний | Все, KDE | Нет | Свободный, GNU LGPL |
Кельбт | Возврат LALR (1) | ? | C ++ | Смешанный | генерируется | POSIX | Нет | Свободный, GNU GPL |
kmyacc | LALR (1) | ? | C, Ява, Perl, JavaScript | Смешанный | внешний | Все | Нет | Свободный, GNU GPL |
LALR (вкл. с LRSTAR) | LALR (1) | YACC, ANTLR, EBNF | C ++ | отделенный | генерируется | Windows | Visual Studio | BSD |
Lapg | LALR (1) | ? | C, C ++, C #, Ява, JavaScript | Смешанный | генерируется | Виртуальная машина Java | Нет | Свободный, GNU GPL |
Лимон | LALR (1) | ? | C | Смешанный | внешний | Все | Нет | Свободный, всеобщее достояние |
Лайм | LALR (1) | ? | PHP | Смешанный | внешний | Все | Нет | Свободный, GNU GPL |
ЛИЗА | LR (?), LL (?), LALR (?), SLR (?) | ? | Ява | Смешанный | генерируется | Виртуальная машина Java | да | Свободный, всеобщее достояние |
LLgen | LL (1) | ? | C | Смешанный | внешний | POSIX | Нет | Свободный, BSD |
LLnextgen | LL (1) | ? | C | Смешанный | внешний | Все | Нет | Свободный, GNU GPL |
LLLPG | LL (k) + синтаксический и семантические предикаты | ANTLR-подобный | C # | Смешанный | сгенерировано (?) | .NET Framework, Мононуклеоз | Visual Studio | Свободный, GNU LGPL |
СУГ | Возврат LALR (k) | ? | Ява | Смешанный | генерируется | Виртуальная машина Java | Нет | Свободный, EPL |
LRSTAR | LALR (*), LR (*) | YACC, ANTLR, EBNF | C ++ | отделенный | генерируется | Windows | Visual Studio | BSD |
Менгир | LR (1) | ? | OCaml | Смешанный | генерируется | Все | Нет | Свободный, QPL |
ML-Yacc | LALR (1) | ? | ML | Смешанный | внешний | Все | Нет | ? |
Обезьяна | LR (1) | ? | Ява | Отдельный | генерируется | Виртуальная машина Java | Нет | Свободный, GNU GPL |
Мста | LALR (k), LR (k) | YACC, EBNF | C, C ++ | Смешанный | внешний или сгенерированный | POSIX, Cygwin | Нет | Свободный, GNU GPL |
MTP (больше, чем парсинг) | LL (1) | ? | Ява | Отдельный | генерируется | Виртуальная машина Java | Нет | Свободный, GNU GPL |
MyParser | LL (*) | Markdown | C ++ 11 | Отдельный | внутренний | Любой со стандартным компилятором C ++ 11 | Нет | Свободный, Массачусетский технологический институт |
NLT | GLR | C # /BNF -подобно | C # | Смешанный | смешанный | .NET Framework | Нет | Свободный, Массачусетский технологический институт |
окамлячк | LALR (1) | ? | OCaml | Смешанный | внешний | Все | Нет | Свободный, QPL |
Олекс | LL (1) | ? | C ++ | Смешанный | генерируется | Все | Нет | Свободный, GNU GPL |
Парсек | LL, возврат | Haskell | Haskell | Смешанный | никто | Все | Нет | Свободный, BSD |
Разбор :: Япп | LALR (1) | ? | Perl | Смешанный | внешний | Все | Нет | Свободный, GNU GPL |
Объекты парсера | LL (k) | ? | Ява | Смешанный | ? | Виртуальная машина Java | Нет | Свободный, zlib |
PCCTS | LL | ? | C, C ++ | ? | ? | Все | Нет | ? |
PLY | LALR (1) | BNF | Python | Смешанный | генерируется | Все | Нет | Свободный, Массачусетский технологический институт |
PlyPlus | LALR (1) | EBNF | Python | Отдельный | генерируется | Все | Нет | Свободный, Массачусетский технологический институт |
PRECC | LL (k) | ? | C | Отдельный | генерируется | ДОС, POSIX | Нет | Свободный, GNU GPL |
QLALR | LALR (1) | ? | C ++ | Смешанный | внешний | Все | Нет | Свободный, GNU GPL |
SableCC | LALR (1) | ? | C, C ++, C #, Ява, OCaml, Python | Отдельный | генерируется | Виртуальная машина Java | Нет | Свободный, GNU LGPL |
SLK[5] | LL (k) LR (k) LALR (k) | EBNF | C, C ++, C #, Ява, JavaScript | Отдельный | внешний | Все | Нет | SLK[6] |
SLY | LALR (1) | BNF | Python | Смешанный | генерируется | Все | Нет | Свободный, Массачусетский технологический институт |
SP (простой парсер) | Рекурсивный спуск | Python | Python | Отдельный | генерируется | Все | Нет | Свободный, GNU LGPL |
Дух | Рекурсивный спуск | ? | C ++ | Смешанный | внутренний | Все | Нет | Свободный, Способствовать росту |
Стикс | LALR (1) | ? | C, C ++ | Отдельный | генерируется | Все | Нет | Свободный, GNU LGPL |
Sweet Parser | LALR (1) | ? | C ++ | Отдельный | генерируется | Windows | Нет | Свободный, zlib |
Кран | LL (1) | ? | C ++ | Смешанный | генерируется | Все | Нет | Свободный, GNU GPL |
TextTransformer | LL (k) | ? | C ++ | Смешанный | генерируется | Windows | да | Проприетарный |
TinyPG | LL (1) | ? | C #, Visual Basic | ? | ? | Windows | да | Частично, CPOL 1.0 |
Генератор парсеров игрушек | Рекурсивный спуск | ? | Python | Смешанный | генерируется | Все | Нет | Свободный, GNU LGPL |
TP Yacc | LALR (1) | ? | Турбо Паскаль | Смешанный | внешний | Все | да | Свободный, GNU GPL |
Tunnel Grammar Studio | Рекурсивный спуск, возврат | ABNF | C ++ | Отдельный | генерируется | Windows | да | Проприетарный |
UltraGram | LALR (1), LR (1), GLR | BNF | C ++, Java, C #, Visual Basic .NET. | Отдельный | внешний | Windows | да | Свободный, всеобщее достояние |
UniCC | LALR (1) | EBNF | C, C ++, Python, JavaScript, JSON, XML | Смешанный | генерируется | POSIX | Нет | Свободный, BSD |
UrchinCC | LL (1) | ? | Ява | ? | генерируется | Виртуальная машина Java | Нет | ? |
КИТ | LR (?), некоторые соединительные вещи, см. Китовый детеныш | ? | C ++ | Смешанный | внешний | Все | Нет | Проприетарный |
зубчик | LALR (1) | ? | C ++, Ява | Смешанный | внешний | Все | Нет | Свободный, GNU GPL |
Yacc AT&T /солнце | LALR (1) | Yacc | C | Смешанный | внешний | POSIX | Нет | Свободный, CPL & CDDL |
Yacc ++ | LR (1), LALR (1) | Yacc | C ++, C # | Смешанный | генерируемый или внешний | Все | Нет | Проприетарный |
Yapps | LL (1) | ? | Python | Смешанный | генерируется | Все | Нет | Свободный, Массачусетский технологический институт |
да | LALR (1) | ? | Erlang | Отдельный | генерируется | Все | Нет | Свободный, Apache 2.0 |
Визуальный BNF | LR (1), LALR (1) | ? | C # | Отдельный | генерируется | .NET Framework | да | Проприетарный |
YooParse | LR (1), LALR (1) | ? | C ++ | Смешанный | внешний | Все | Нет | Свободный, Массачусетский технологический институт |
Разобрать | LR (1) | BNF в C ++ типы | ? | ? | никто | Стандартный компилятор C ++ 11 | Нет | Свободный, Массачусетский технологический институт |
GGLL | LL (1) | График | Ява | Смешанный | генерируется | Windows | да | Свободный, Массачусетский технологический институт |
Товар | Парсинг алгоритм | Обозначение грамматики ввода | Языки вывода | Грамматика, код | Лексер | Платформа разработки | IDE | Лицензия |
Анализ грамматик выражений, детерминированных логических грамматик
В этой таблице сравниваются генераторы парсеров с анализ грамматик выражений, детерминированный логические грамматики.
Имя | Парсинг алгоритм | Языки вывода | Грамматика, код | Платформа разработки | Лицензия |
---|---|---|---|---|---|
AustenX | Пакрат (модифицированный) | Ява | Отдельный | Все | Свободный, BSD |
Зубр | Воришка | C, OCaml, Ява | Смешанный | Все | Свободный, GNU GPL |
BNFlite | Рекурсивный спуск | C ++ | Смешанный | Все | Свободный, Массачусетский технологический институт |
Навес | Воришка | Ява, JavaScript, Python, Рубин | Отдельный | Все | Свободный, GNU GPL |
CL-штифт | Воришка | Common Lisp | Смешанный | Все | Свободный, Массачусетский технологический институт |
Драт! | Воришка | D | Смешанный | Все | Свободный, GNU GPL |
Фрисби | Воришка | Haskell | Смешанный | Все | Свободный, BSD |
грамматика :: колышек | Воришка | Tcl | Смешанный | Все | Свободный, BSD |
Грако | Packrat + Cut + левая рекурсия | Python, C ++ (бета) | Отдельный | Все | Свободный, BSD |
IronMeta | Воришка | C # | Смешанный | Windows | Свободный, BSD |
Лаха | 2-фазный без сканера сверху вниз возврат + поддержка во время выполнения | Ява | Отдельный | Все | Свободный, GNU GPL |
lars :: Parser | Packrat (поддержка левой рекурсии и двусмысленности грамматики) | C ++ | Идентичный | Все | Свободный, BSD |
LPeg | Машина для разбора | Lua | Смешанный | Все | Свободный, Массачусетский технологический институт |
тяга | Машина для разбора | C ++ 17 | Смешанный | Все | Свободный, Массачусетский технологический институт |
Мышь | Рекурсивный спуск | Ява | Отдельный | Виртуальная машина Java | Свободный, Apache 2.0 |
Нарвал | Воришка | C | Смешанный | POSIX, Windows | Свободный, BSD |
Неарли | Эрли | JavaScript | Смешанный | Все | Свободный, Массачусетский технологический институт |
Nemerle.Peg | Рекурсивный спуск + Пратт | Nemerle | Отдельный | Все | Свободный, BSD |
неотома | Воришка | Erlang | Отдельный | Все | Свободный, Массачусетский технологический институт |
NPEG | Рекурсивный спуск | C # | Смешанный | Все | Свободный, Массачусетский технологический институт |
OMeta | Пакрат (модифицированная, частичная мемоизация) | JavaScript, Писк, Python | Смешанный | Все | Свободный, Массачусетский технологический институт |
PackCC | Пакрат (модифицированный) | C | Смешанный | Все | Свободный, Массачусетский технологический институт |
Воришка | Воришка | Схема | Смешанный | Все | Свободный, Массачусетский технологический институт |
Паппи | Воришка | Haskell | Смешанный | Все | Свободный, BSD |
пропаренный | Рекурсивный спуск | Ява, Scala | Смешанный | Виртуальная машина Java | Свободный, Apache 2.0 |
Лямбда-ПЭГ | Рекурсивный спуск | Ява | Смешанный | Виртуальная машина Java | Свободный, Apache 2.0 |
parsepp | Рекурсивный спуск | C ++ | Смешанный | Все | Свободный, всеобщее достояние |
Пастернак | Воришка | C ++ | Смешанный | Windows | Свободный, GNU GPL |
Узоры | Машина для разбора | Быстрый | Идентичный | Все | Свободный, Массачусетский технологический институт |
привязь | Рекурсивный спуск | C | Смешанный | Все | Свободный, Массачусетский технологический институт |
PEG.js | Пакрат (частичная мемоизация) | JavaScript | Смешанный | Все | Свободный, Массачусетский технологический институт |
Пегас | Рекурсивный спуск, Packrat (выборочно) | C # | Смешанный | Windows | Свободный, Массачусетский технологический институт |
привязка | Рекурсивный спуск | C | Смешанный | Все | Свободный, всеобщее достояние |
вредитель | Рекурсивный спуск | Ржавчина | Отдельный | Все | Свободный, MPL |
PetitParser | Воришка | Болтовня, Ява, Дротик | Смешанный | Все | Свободный, Массачусетский технологический институт |
PEGTL | Рекурсивный спуск | C ++ 11 | Смешанный | Все | Свободный, Массачусетский технологический институт |
Парсер грамматики (PGE) | Гибридный рекурсивный спуск / приоритет оператора[7] | Байт-код попугая | Смешанный | Виртуальная машина Parrot | Свободный, Художественный 2.0 |
PyPy rlib | Воришка | Python | Смешанный | Все | Свободный, Массачусетский технологический институт |
Крысы! | Воришка | Ява | Смешанный | Виртуальная машина Java | Свободный, GNU LGPL |
Spirit2 | Рекурсивный спуск | C ++ | Смешанный | Все | Свободный, Способствовать росту |
Верхушка дерева | Рекурсивный спуск | Рубин | Смешанный | Все | Свободный, Массачусетский технологический институт |
Площадка | Рекурсивный спуск | C ++ | Смешанный | Все | Свободный, Массачусетский технологический институт или же всеобщее достояние |
Восковой глаз | Машина для разбора | C, Ява, JavaScript, Python, Ракетка, Рубин | Отдельный | Все | Свободный, Массачусетский технологический институт |
PHP PEG | PEG Parser? | PHP | Смешанный | Все | Свободный, BSD |
Общие контекстно-свободные, конъюнктивные или логические языки
В этой таблице сравниваются языки генераторов парсеров с общими контекстно-свободная грамматика, а конъюнктивная грамматика, или логическая грамматика.
Имя | Парсинг алгоритм | Обозначение грамматики ввода | Языки вывода | Грамматика, код | Лексер | Платформа разработки | IDE | Лицензия |
---|---|---|---|---|---|---|---|---|
АКЦЕНТ | Эрли | Yacc вариант | C | Смешанный | внешний | Все | Нет | Свободный, GNU GPL |
APaGeD | GLR, LALR (1), LL (k) | ? | D | Смешанный | генерируется | Все | Нет | Свободный, Художественный |
Бизон | LALR (1), LR (1), IELR (1), GLR | Yacc | C, C ++, Ява, XML | Смешанный, кроме XML | внешний | Все | Нет | Свободный, GNU GPL |
Набор инструментов для реинжиниринга программного обеспечения DMS | GLR | ? | Parlanse | Смешанный | генерируется | Windows | Нет | Проприетарный |
DParser | GLR без сканирования | ? | C | Смешанный | без сканера | POSIX | Нет | Свободный, BSD |
Дипген | Расширяемый во время выполнения GLR | ? | OCaml | Смешанный | генерируется | Все | Нет | Свободный, CeCILL -B |
E3 | Эрли | ? | OCaml | Смешанный | внешний или без сканера | Все | Нет | ? |
Элкхаунд | GLR | ? | C ++, OCaml | Смешанный | внешний | Все | Нет | Свободный, BSD |
GDK | LALR (1), GLR | ? | C, Лекс, Haskell, HTML, Ява, Object Pascal, Yacc | Смешанный | генерируется | POSIX | Нет | Свободный, Массачусетский технологический институт |
Счастливый | LALR, GLR | ? | Haskell | Смешанный | внешний | Все | Нет | Свободный, BSD |
Генератор парсеров Hime | GLR | ? | C #, Ява, Ржавчина | Отдельный | генерируется | .NET Framework, Виртуальная машина Java | Нет | Свободный, GNU LGPL |
Библиотека IronText | LALR (1), GLR | C # | C # | Смешанный | генерируемый или внешний | .NET Framework | Нет | Свободный, Apache 2.0 |
Jison | LALR (1), LR (0), SLR (1) | Yacc | JavaScript, C #, PHP | Смешанный | генерируется | Все | Нет | Свободный, Массачусетский технологический институт |
Синтаксис | LALR (1), LR (0), SLR (1) CLR (1) LL (1) | JSON /Yacc | JavaScript, Python, PHP, Рубин, C #, Ржавчина, Ява | Смешанный | генерируется | Все | Нет | Свободный, Массачусетский технологический институт |
Лаха | Без сканера, двухфазный | Лаха | Ява | Отдельный | без сканера | Все | Нет | Свободный, GNU GPL |
ModelCC | Эрли | Аннотированная модель класса | Ява | Создано | генерируется | Все | Нет | Свободный, BSD |
P3 | Эрли – комбинаторы | BNF-подобный | OCaml | Смешанный | внешний или без сканера | Все | Нет | ? |
P4 | Комбинаторы Эрли, бесконечные CFG | BNF-подобный | OCaml | Смешанный | внешний или без сканера | Все | Нет | ? |
Булевский синтаксический анализатор без сканирования | GLR без сканирования (Булевы грамматики ) | ? | Haskell, Ява | Отдельный | без сканера | Виртуальная машина Java | Нет | Свободный, BSD |
SDF / SGLR | GLR без сканирования | SDF | C, Ява | Отдельный | без сканера | Все | да | Свободный, BSD |
SmaCC | GLR (1), LALR (1), LR (1) | ? | Болтовня | Смешанный | внутренний | Все | да | Свободный, Массачусетский технологический институт |
ИСКРА | Эрли | ? | Python | Смешанный | внешний | Все | Нет | Свободный, Массачусетский технологический институт |
Том | GLR | ? | C | Создано | никто | Все | Нет | Бесплатно, «Без лицензионных или авторских ограничений» |
UltraGram | LALR, LR, GLR | ? | C ++, C #, Ява, Visual Basic .NET | Отдельный | генерируется | Windows | да | Проприетарный |
Червоточина | Обрезка, LR, GLR, GLR без сканирования | ? | C, Python | Смешанный | без сканера | Windows | Нет | Свободный, Массачусетский технологический институт |
Китовый детеныш | Общие табличные, SLL (k), Линейная нормальная форма (конъюнктивные грамматики ), LR, Двоичная нормальная форма (Булевы грамматики ) | ? | C ++ | Отдельный | внешний | Все | Нет | Проприетарный |
ага | Эрли | Yacc -подобно | C | Смешанный | внешний | Все | Нет | Свободный, GNU LGPL |
Контекстно-зависимые грамматики
В этой таблице сравниваются генераторы парсеров с контекстно-зависимые грамматики.
Имя | Алгоритм разбора | Обозначение грамматики ввода | Булевы грамматические способности | Платформа разработки | Лицензия |
---|---|---|---|---|---|
LuZc[8][9] | дельта-цепь | модульный | Конъюнктивный, а не комплиментарный | POSIX | Проприетарный |
bnf2xml | Рекурсивный спуск (вывод текстового фильтра - xml) | просто BNF[требуется разъяснение ] грамматика (соответствие ввода), вывод - xml | ? | Бета, а не полноценный парсер EBNF | Свободный, GNU GPL |
Смотрите также
Примечания
- ^ Вилка Bison 1.19
Рекомендации
- ^ http://www.colm.net/open-source/ragel/
- ^ http://www.colm.net/open-source/ragel/[требуется проверка ]
- ^ «Адаптивный анализ LL (*): возможности динамического анализа» (PDF). Теренс Парр. Получено 2016-04-03.
- ^ «Создание парсеров для Интернета с помощью JavaCC и GWT (часть первая)». Крис Эйнсли. Получено 2014-05-04.
- ^ «Генератор парсера SLK поддерживает C, C ++, Java, JavaScript и C #, необязательный возврат с возвратом, бесплатно».
- ^ http://www.slkpg.org/license.txt
- ^ "Попугай: Грамматический движок". Фонд попугая. 2011 г.
Правила PGE предоставляют все возможности анализа рекурсивного спуска и анализа приоритета операторов.
- ^ "LuZ: контекстно-зависимый парсер". 2016-10-17. Архивировано из оригинал на 2016-10-17. Получено 2018-10-17.
- ^ «LuZc - конъюнктивный контекстно-зависимый парсер». luzc.zohosites.com. Получено 2018-10-17.