Это список известных генераторов лексера и генераторов парсеров для различных языковые классы.
Обычные языки - это категория языков (иногда называемая Тип Хомского 3 ), которому может соответствовать конечный автомат (более конкретно, детерминированный конечный автомат или недетерминированный конечный автомат ), построенный из регулярного выражения . В частности, обычный язык может сопоставлять такие конструкции, как «A следует за B», «Либо A, либо B», «A, за которым следует ноль или более экземпляров B», но не может сопоставлять конструкции, которые требуют согласованности между несмежными элементами, например как «несколько экземпляров A, за которыми следует такое же количество экземпляров B», а также не могут выражать концепцию рекурсивной «вложенности» («за каждым A в конечном итоге следует соответствующий B»). Классическим примером проблемы, которую не может решить обычная грамматика, является вопрос о том, содержит ли данная строка правильно вложенные скобки. (Обычно это обрабатывается грамматикой Хомского типа 2, также называемой контекстно-свободной грамматикой.)
Имя | алгоритм лексера | Языки вывода | Грамматика, код | Платформа разработки | Лицензия |
---|---|---|---|---|---|
Alex | DFA | Haskell | Mixed | All | Free, BSD |
AnnoFlex | DFA | Java | Смешанная | Виртуальная машина Java | Бесплатно, BSD |
Astir | DFA с управлением таблицей, с ветвлением | C ++ | Только грамматика (задействована) | Все | Бесплатно, MIT |
AustenX | DFA | Java | Отдельно | Все | Бесплатно, BSD |
C # Flex | DFA | C# | Смешанное | .NET CLR | Бесплатно, GNU GPL |
C # Lex | DFA | C# | Смешанный | .NET CLR | ? |
CookCC | DFA | Java | Смешанный | виртуальная машина Java | Бесплатно, Apache 2.0 |
Dolphin | DFA | C ++ | Отдельно | Все | Собственный |
Flex | DFA управляемый таблицей | C, C ++ | Смешанный | Все | Бесплатно, BSD |
gelex | DFA | Eiffel | Mixed | Eiffel | Free, MIT |
golex | DFA | Go | Mixed | Go | Free, BSD -style |
gplex | DFA | C# | Mixed | .NET CLR | Free, BSD -подобный |
JFlex | DFA | Java | Mixed | Java virtual machine | Free, BSD |
JLex | DFA | Java | смешанный | виртуальная машина Java | бесплатно, BSD -подобный |
lex | DFA | C | смешанный | POSIX | частичный, проприетарный, CDDL |
lexertl | DFA | C++ | ? | Все | бесплатно, GNU LGPL |
Quex | DFA прямой код | C, C ++ | Смешанный | Все | Бесплатно, GNU LGPL |
Ragel | DFA | Go, C, C ++, сборка | Mixed | All | Free, GNU GPL, MIT [1] |
RE / flex | DFA прямой код, управляемые таблицей DFA и NFA библиотеки регулярных выражений | C ++ | Смешанное | Все | Бесплатно, BSD |
re2c | DFA прямой код | C | Смешанный | Все | Бесплатно, общественное достояние |
Контекстно-свободные языки - это категория языков (иногда называемый Тип 2 Хомского ), которому может соответствовать последовательность правил замены, каждое из которых по существу отображает каждый нетерминальный элемент на последовательность конечных элементов и / или других нетерминальных элементов. Грамматики этого типа могут соответствовать чему угодно, чему может соответствовать обычная грамматика, и, кроме того, могут обрабатывать концепцию рекурсивного "вложения" ("за каждым A в конечном итоге следует соответствующее B"), например вопрос о том, содержит ли данная строка правильно вложенные скобки. Однако правила контекстно-свободных грамматик являются чисто локальными и поэтому не могут обрабатывать вопросы, требующие нелокального анализа, такие как «Существует ли объявление для каждой переменной, которая используется в функции?». Для этого технически потребуется более сложная грамматика, такая как грамматика Хомского типа 1, также называемая контекстно-зависимой грамматикой. Однако генераторы парсеров для контекстно-свободных грамматик часто поддерживают возможность написанного пользователем кода вводить ограниченное количество контекстной чувствительности. (Например, обнаружив объявление переменной, написанный пользователем код может сохранить имя и тип переменной во внешней структуре данных, чтобы их можно было проверить на соответствие более поздним ссылкам на переменные, обнаруженным анализатором.)
детерминированные контекстно-свободные языки представляют собой надлежащее подмножество контекстно-свободных языков, которые могут быть эффективно проанализированы детерминированными автоматами выталкивания.
Имя | Парсинг алгоритмом | Входная нотация грамматики | Языки вывода | Грамматика, код | Lexer | Платформа разработки | IDE | Лицензия |
---|---|---|---|---|---|---|---|---|
AGL | GLR | EBNF | Java, JavaScript, (другие цели Kotlin) | Отдельно | нет | Любая целевая платформа Kotlin | No | Бесплатно, Apache 2.0 |
ANTLR 4 | Адаптивный LL (*) | EBNF | C#, Java, Python, JavaScript, C ++, Swift, Go, PHP | Отдельная | сгенерированная | виртуальная машина Java | Да | Бесплатно, BSD |
ANTLR 3 | LL (*) | EBNF | ActionScript, Ada95, C, C ++, C#, Java, JavaScript, Objective-C, Perl, Python, Ruby | Mixed | сгенерированный | виртуальная машина Java | Да | Бесплатно, BSD |
APG | Рекурсивный спуск, возврат | ABNF | C, C ++, JavaScript, Java | Отдельный | нет | Все | No | Бесплатно, GNU GPL |
Astir | LL (k), LL (конечный), LL (*) | Иерархическая грамматика Astir | C ++ | Только грамматика (задействована) | сгенерирована | Все | Код Visual Studio | Бесплатно, MIT |
AX | Рекурсивный спуск | AX / C ++ | C ++ 17, C++11 | Mixed | none | Any со стандартным компилятором C ++ 17 или C ++ 11 | No | Free, Boost |
Beaver | LALR (1) | EBNF | Java | Смешанная | внешняя | виртуальная машина Java | No | Free, BSD |
Belr | Рекурсивный спуск | ABNF | C ++ 17, C++11 | Отдельно | включая ded | POSIX | No | Partial, GNU GPL, проприетарный |
Bison | LALR (1), LR (1), ( 1), GLR | Yacc | C, C ++, Java | Mixed | external | All | No | Free, GNU GPL с исключением |
Bison++ | LALR (1) | ? | C++ | Mixed | external | POSIX | No | Free, GNU GPL |
Bisonc ++ | LALR (1) | ? | C ++ | Mixed | external | POSIX | No | Free, GNU GPL |
BtYacc | Отслеживание с возвратом Внизу-вверх | ? | C++ | Смешанное | внешнее | Все | No | Бесплатно, общественное достояние |
byacc | LALR (1) | Yacc | C | Смешанный | внешний | Все | No | Бесплатно, общественное достояние |
BYACC / J | LALR (1) | Yacc | C, Java | Mixed | external | All | No | Free, public domain |
CL-Yacc | LALR (1) | Lisp | Common Lisp | Mixed | external | All | No | Free, MIT |
Coco / R | LL (1) | EBNF | C, C ++, C#, F#, Java, Ada, Object Pascal, Delphi, Modula-2, Oberon, Ruby, Swift, Unicon, Visual Basic.NET | смешанный | сгенерированная | виртуальная машина Java, .NET Framework, Windows, POSIX (зависит от языка вывода) | No | Бесплатно, GNU GPL |
CookCC | LALR (1) | Аннотации Java | Java | Смешанные | сгенерированные | виртуальные Java машина | No | бесплатно, Apache 2.0 |
CppCC | LL (k) | ? | C++ | Mixed | сгенерировано | POSIX | No | бесплатно, GNU GPL |
CSP | LR (1) | ? | C ++ | Отдельный | сгенерированный | POSIX | No | Free, Apache 2.0 |
CUP | LALR (1) | ? | Java | Смешанная | внешняя | виртуальная машина Java | No | Бесплатная, BSD -подобная |
Dragon | LR (1), LALR (1) | ? | C ++, Java | Отдельно | сгенерировано | Все | No | Бесплатно, GNU GPL |
eli | LALR (1) | ? | C | Смешанный | сгенерированный | POSIX | No | Free, GNU GPL, GNU LGPL |
Сущность | LR (?) | ? | Схема 48 | Смешанная | внешний | Все | No | Бесплатно, BSD |
eyapp | LALR (1) | ? | Perl | Mixed | внешний или сгенерированный | Все | No | Свободный, Художественный |
Frown | LALR (k) | ? | Haskell 98 | Смешанный | external | Все | No | Бесплатно, GNU GPL |
geyacc | LALR (1) | ? | Eiffel | Mixed | external | Все | No | Бесплатно, MIT |
GOLD | LALR (1) | BNF | ассемблер x86, ANSI C, C#, D, Java, Pascal, 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 | Отдельно | сгенерированный | виртуальная машина Java | No | Бесплатно, BSD |
HiLexed | LL (*) | EBNF или Java | Java | Отдельно | внутренний | Виртуальная машина Java | No | Бесплатно, GNU LGPL |
Генератор парсера Hime | LALR (1), GLR | диалект BNF | C#, Java, Rust | Отдельный | сгенерированный | .NET Framework, виртуальная машина Java | No | Бесплатно, GNU LGPL |
Hyacc | LR (1), LALR (1), LR (0) | Yacc | C | Смешанный | внешний | Все | No | Бесплатно, GNU GPL |
iyacc | LALR (1) | Yacc | Icon | Mixed | external | All | No | Free, GNU LGPL |
jacc | LALR (1) | ? | Java | Mixed | external | Java virtual machine | No | Free, BSD |
JavaCC | LL (k) | EBNF | Java, C ++, JavaScript (через GWT compiler) | Смешанный | сгенерирована | виртуальная машина Java | Да | Бесплатно, BSD |
jay | LALR (1) | Yacc | C#, Java | Mixed | нет | виртуальная машина Java | No | Бесплатно, BSD |
JFLAP | LL (1), LALR (1) | ? | Java | ? | ? | Виртуальная машина Java | Да | ? |
JetPAG | LL (k) | ? | C ++ | Смешанный | сгенерировано | Все | No | Бесплатно, GNU GPL |
JS / CC | LALR (1) | EBNF | JavaScript, JScript, ECMAScript | Mixed | internal | All | Да | Free, BSD |
KDevelop-PG-Qt | LL (1), backtracking, shunting-yard | ? | C++ | Mixed | сгенерированный или внешний | Все, KDE | No | Бесплатно, GNU LGPL |
Kelbt | Отслеживание с возвратом LALR (1) | ? | C ++ | Смешанное | сгенерировано | POSIX | No | бесплатно, GNU GPL |
kmyacc | LALR (1) | ? | C, Java, Perl, JavaScript | Смешанный | внешний | Все | No | Бесплатно, GNU GPL |
Lapg | LALR (1) | ? | C, C ++, C#, Java, JavaScript | Mixed | сгенерированный | виртуальная машина Java | No | Free, GNU GPL |
Lemon | LALR (1) | ? | C | Смешанный | внешний | Все | No | Бесплатно, общественное достояние |
Lime | LALR (1) | ? | PHP | Смешанный | внешний | Все | No | Бесплатно, GNU GPL |
LISA | LR (?), LL ( ?), LALR (?), SLR (?) | ? | Java | Mixed | сгенерированный | виртуальная машина Java | Да | бесплатно, общественное достояние |
LLgen | LL (1) | ? | C | смешанное | внешнее | POSIX | No | бесплатно, BSD |
LLnextgen | LL (1) | ? | C | Mixed | external | All | No | Free, GNU GPL |
LLLPG | LL (k) + синтаксис и семантические предикаты | ANTLR-подобные | C# | Смешанные | сгенерированные (?) | .NET Framework, Mono | Visual Studio | Бесплатно, GNU LGPL |
LPG | Отслеживание с возвратом LALR (k) | ? | Java | Смешанное | сгенерированное | виртуальная машина Java | No | Бесплатно, EPL |
LRSTAR | LALR (*), LR (*) | YACC, ANTLR, EBNF | C ++ | разделенный | сгенерированный | Windows | Visual Studio | BSD |
Menhir | LR (1) | ? | OCaml | смешанный | сгенерированный | Все | No | Бесплатно, QPL |
ML-Yacc | LALR (1) | ? | ML | Mixed | external | Все | No | ? |
Monkey | LR (1) | ? | Java | Отдельный | сгенерировано | Виртуальная машина Java | No | Бесплатно, GNU GPL |
Msta | LALR (k), LR (k) | YACC, EBNF | C, C ++ | Смешанный | внешний или сгенерированный | POSIX, Cygwin | No | Free, GNU GPL |
MTP (больше, чем парсинг) | LL (1) | ? | Java | Отдельная | сгенерированная | виртуальная машина Java | No | Бесплатно, GNU GPL |
MyParser | LL (*) | Markdown | C ++ 11 | Отдельный | внутренний | Любой со стандартным компилятором C ++ 11 | No | Free, MIT |
NLT | GLR | C# /BNF -like | C# | Mixed | mixed | .NET Framework | No | Free, MIT |
ocamlyacc | LALR (1) | ? | OCaml | Смешанный | внешний | Все | No | Свободный, QPL |
olex | LL (1) | ? | C ++ | Смешанный | сгенерировано | Все | No | Бесплатно, GNU GPL |
Parsec | LL, с возвратом | Haskell | Haskell | Смешанное | нет | Все | No | Бесплатно, BSD |
Parse::Yapp | LALR (1) | ? | Perl | Mixed | external | Все | No | Бесплатно, GNU GPL |
Объекты синтаксического анализатора | LL (k) | ? | Ja va | Смешанная | ? | виртуальная машина Java | No | Бесплатно, zlib |
PCCTS | LL | ? | C, C ++ | ? | ? | Все | No | ? |
PLY | LALR (1) | BNF | Python | Смешанный | сгенерированный | Все | No | Бесплатно, MIT |
PlyPlus | LALR (1) | EBNF | Python | Отдельно | сгенерировано | Все | No | Бесплатно, MIT |
PRECC | LL (k) | ? | C | Отдельно | сгенерировано | DOS, POSIX | No | Free, GNU GPL |
QLALR | LALR (1) | ? | C ++ | Смешанный | внешний | Все | No | Бесплатно, GNU GPL |
SableCC | LALR (1) | ? | C, C ++, C#, Java, OCaml, Python | Отдельный | сгенерированный | виртуальная машина Java | No | Бесплатно, GNU LGPL |
SLK | LL (k) LR (k) LALR (k) | EBNF | C, C ++, C#, Java, JavaScript | Отдельный | внешний | Все | No | SLK |
SLY | LALR (1) | BNF | Python | Смешанный | сгенерированный | Все | No | Бесплатно, MIT |
SP (Simple Parser) | Рекурсивный спуск | Python | Python | Отдельно | generated | All | No | Free, GNU LGPL |
Spirit | Рекурсивный спуск | ? | C ++ | Смешанный | внутренний | Все | No | Бесплатно, Boost |
Styx | LALR (1) | ? | C, C++ | Separate | generated | Все | No | Бесплатно, GNU LGPL |
Sweet Parser | LALR (1) | ? | C ++ | Отдельно | сгенерировано | Windows | No | Бесплатно, zlib |
Нажмите | LL (1) | ? | C ++ | Смешанный | сгенерированный | Все | No | Бесплатно, GNU GPL |
TextTransformer | LL (k) | ? | C ++ | Смешанный | сгенерированный | Windows | Да | Собственный |
TinyPG | LL (1) | ? | C#, Visual Basic | ? | ? | Windows | Да | Частичный, CPOL 1.0 |
Рекурсивный спуск | ? | Python | Смешанный | сгенерированный | Все | No | Бесплатно, GNU LGPL | |
TP Yacc | LALR (1) | ? | Turbo Pascal | Смешанный | внешний | Все | Да | Бесплатно, 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 | No | бесплатно, BSD |
LL (1) | ? | Java | ? | сгенерировано | виртуальная машина Java | No | ? | |
Whale | LR (?), Некоторая конъюнктивная прочее, см. Whale Calf | ? | C ++ | Mixed | external | All | No | Proprietary |
wisent | LALR (1) | ? | C ++, Java | Mixed | external | All | No | Free, GNU GPL |
Yacc ATT / Sun | LALR (1) | Yacc | C | Mixed | external | POSIX | No | Free, CPL CDDL |
Yacc ++ | LR (1), LALR (1) | Yacc | C++, C# | Mixed | сгенерированный или внешний | Все | No | Собственный |
Yapps | LL (1) | ? | Python | Смешанный | сгенерированный | Все | No | Бесплатно, MIT |
yecc | LALR (1) | ? | Erlang | Отдельно | сгенерировано | Все | No | Бесплатно, Apache 2.0 |
LR (1), LALR (1) | ? | C# | Отдельный | сгенерированный | .NET Framework | Да | Собственный | |
YooParse | LR (1), LALR (1) | ? | C++ | Mixed | external | All | No | Free, MIT |
Анализировать | LR (1) | BNF в C++ типах | ? | ? | нет | стандартный компилятор C ++ 11 | No | Бесплатно, MIT |
GGLL | LL (1) | Graph | Java | Mixed | generated | Windows | Да | Бесплатно, MIT |
Продукт | Парсинг алгоритм | Нотация грамматики ввода | Языки вывода | Грамматика, код | Lexer | Платформа разработки | IDE | Лицензия |
В этой таблице сравниваются генераторы синтаксического анализатора с грамматиками синтаксического анализа, детерминированными логическими грамматиками.
Имя | Разбор алгоритм | Языки вывода | Грамматика, код | Платформа разработки | Лицензия |
---|---|---|---|---|---|
AustenX | Packrat (измененная) | Java | Отдельно | Все | Бесплатно, BSD |
Aurochs | Packrat | C, OCaml, Java | Mixed | All | Free, GNU GPL |
BNFlite | Рекурсивный спуск | C ++ | Смешанный | Все | Бесплатно, MIT |
Canopy | Packrat | Java, JavaScript, Python, Ruby | Отдельно | Все | бесплатно, GNU GPL |
CL-peg | Packrat | Common Lisp | Mixed | All | Free, MIT |
Drat! | Packrat | D | Mixed | All | Free, GNU GPL |
Frisby | Packrat | Haskell | Mixed | Все | бесплатно, BSD |
грамма::peg | Packrat | Tcl | Mixed | Все | бесплатно, BSD |
Grako | Packrat + Cut + Left Recursion | Python, C++ (beta) | Отдельно | Все | Бесплатно, BSD |
IronMeta | Packrat | C# | Смешанное | Wi ndows | Бесплатно, BSD |
Laja | 2-фазный без сканирования сверху вниз с возвратом + поддержка времени выполнения | Java | Отдельно | Все | Бесплатно, GNU GPL |
lars :: Parser | Packrat (с поддержкой левой рекурсии и двусмысленности грамматики) | C ++ | Идентичный | Все | Бесплатно, BSD |
LPeg | Машина синтаксического анализа | Lua | Смешанное | Все | Бесплатно, MIT |
lug | Машина синтаксического анализа | C ++ 17 | Смешанное | Все | Бесплатно, MIT |
Мышь | Рекурсивный спуск | Java | Отдельная | виртуальная машина Java | Бесплатно, Apache 2.0 |
Нарвал | Packrat | C | Смешанный | POSIX, Windows | Free, BSD |
Nearley | Earley | JavaScript | Mixed | Все | Бесплатно, MIT |
Nemerle.Peg | Рекурсивный спуск + Pratt | Nemerle | Отдельно | Все | Бесплатно, BSD |
neotoma | Packrat | Erlang | Separate | All | Free, MIT |
NPEG | Recur sive descent | C# | Mixed | All | Free, MIT |
OMeta | Packrat (модифицированный, частичная мемоизация) | JavaScript, Squeak, Python | Mixed | All | Free, MIT |
PackCC | Packrat (изменено) | C | Mixed | Все | Бесплатно, MIT |
Packrat | Packrat | Scheme | Mixed | All | Free, MIT |
Pappy | Packrat | Haskell | Mixed | All | Free, BSD |
parboiled | Рекурсивный спуск | Java, Scala | Смешанная | виртуальная машина Java | Бесплатно, Apache 2.0 |
Lambda PEG | Рекурсивный спуск | Java | Смешанная | виртуальная машина Java | Бесплатно, Apache 2.0 |
parsepp | Рекурсивный спуск | C ++ | Смешанная | Все | Бесплатно, общественное достояние |
Parsnip | Packrat | C ++ | Смешанное | Windows | Бесплатно, GNU GPL |
Шаблоны | Машина синтаксического анализа | Swift | Идентичный | Все | Бесплатно, MIT |
peg | Рекурсивный спуск | C | Смешанный | Все | Бесплатно, MIT |
PEG.js | Packrat (частичная мемоизация) | JavaScript | Смешанный | Все | Бесплатно, MIT |
Пегас | Рекурсивный спуск, Packrat (выборочно) | C# | Смешанное | Windows | Бесплатно, MIT |
pegc | Рекурсивный спуск | C | Смешанный | Все | Бесплатно, общественное достояние |
pest | Рекурсивный спуск | Rust | Отдельно | Все | Бесплатно, MPL |
PetitParser | Packrat | Smalltalk, Java, Dart | Mixed | All | Free, MIT |
PEGTL | Рекурсивный спуск | C ++ 11 | Смешанный | Все | Бесплатно, MIT |
Parser Grammar Engine (PGE) | Гибридный рекурсивный спуск / приоритет оператора | байт-код Parrot | Смешанная | Виртуальная машина Parrot | Бесплатная, Художественная 2.0 |
PyPy rlib | Packrat | Python | Смешанная | Все | Бесплатно, MIT |
Rats! | Packrat | Java | Mixed | Java virtua l машина | Бесплатно, GNU LGPL |
Spirit2 | Рекурсивный спуск | C ++ | Смешанное | Все | Бесплатно, Boost |
Treetop | Рекурсивный спуск | Ruby | Mixed | All | Free, MIT |
Yard | Рекурсивный спуск | C ++ | Смешанный | Все | Бесплатно, MIT или общественное достояние |
Waxeye | Машина синтаксического анализа | C, Java, JavaScript, Python, Racket, Ruby | Отдельно | Все | Бесплатно, MIT |
PHP PEG | PEG Parser? | PHP | Mixed | All | Free, BSD |
В этой таблице сравниваются языки-генераторы синтаксического анализатора с общей контекстно-свободной грамматикой, конъюнктивной грамматикой или логическая грамматика.
Имя | Анализ алгоритм | Нотация входной грамматики | Языки вывода | Грамматика, код | Lexer | Платформа разработки | IDE | Лицензия |
---|---|---|---|---|---|---|---|---|
ACCENT | Earley | Yacc вариант | C | Смешанный | внешний | Все | No | Бесплатно, GNU GPL |
APaGeD | GLR, LALR (1), LL (k) | ? | D | Mixed | generated | All | No | Free, Artistic |
Bison | LALR (1), LR (1), (1), GLR | Yacc | C, C ++, Java, XML | Смешанный, кроме XML | внешний | Все | No | Бесплатно, GNU GPL |
DMS Software Reengineering Toolkit | GLR | ? | Parlanse | Смешанный | сгенерировано | Windows | No | Собственное |
DParser | GLR без сканирования | ? | C | Смешанное | без сканирования | POSIX | No | Бесплатно, BSD |
Dypgen | Расширяемый во время выполнения GLR | ? | OCaml | Смешанный | сгенерированный | Все | No | Бесплатно, CeCILL -B |
E3 | Эрли | ? | OCaml | Смешанный | внешний или без сканера | Все | No | ? |
Elkhound | GLR | ? | C ++, OCaml | Смешанный | внешний | Все | No | Бесплатно, BSD |
GDK | LALR (1), GLR | ? | C, Lex, Haskell, HTML, Java, Объект Pascal, Yacc | Mixed | сгенерировано | POSIX | No | Free, MIT |
Happy | LALR, GLR | ? | Haskell | Mixed | external | All | No | Free, BSD |
Hime Parser Generator | GLR | ? | C#, Java, Rust | Отдельный | сгенерированный | .NET Framework, виртуальная машина Java | No | Бесплатно, GNU LGPL |
Библиотека IronText | LALR (1), GLR | C# | C# | Mixed | сгенерированный или внешний | .NET Framework | No | Free, Apache 2.0 |
Jison | LALR (1), LR (0), SLR (1) | Yacc | JavaScript, C#, PHP | Mixed | сгенерировано | Все | No | Свободно, MIT |
Синтаксис | LALR (1), LR (0), SLR ( 1) CLR (1) LL (1) | JSON / Yacc | JavaScript, Python, PHP, Ruby, C#, Rust, Java | Mixed | generated | All | No | Free, MIT |
Laja | Без сканера, двухфазный | Laja | Java | Отдельный | сканер ess | Все | No | Бесплатно, GNU GPL |
ModelCC | Earley | Модель классов с аннотациями | Java | Сгенерировано | сгенерировано | Все | No | Бесплатно, BSD |
P3 | Earley–комбинаторы | BNF-like | OCaml | Смешанные | внешние или без сканера | Все | No | ? |
P4 | Комбинаторы Эрли, бесконечные CFG | BNF-подобные | OCaml | Смешанные | внешние или без сканирования | Все | No | ? |
Булевский синтаксический анализатор без сканирования | GLR без сканирования (логические грамматики ) | ? | Haskell, Java | Отдельно | без сканирования | виртуальная машина Java | No | бесплатно, BSD |
SDF / SGLR | Без сканера GLR | SDF | C, Java | Отдельно | без сканера | Все | Да | Бесплатно, BSD |
SmaCC | GLR (1), LALR (1), LR (1) | ? | Smalltalk | Смешанный | внутренний | Все | Да | Бесплатно, MIT |
SPARK | Earley | ? | Python | Mixed | внешний | Все | No | Бесплатно, MIT |
Tom | GLR | ? | C | Generated | нет | Все | No | Free, «Отсутствие лицензионных или авторских ограничений» |
UltraGram | LALR, LR, GLR | ? | C ++, C#, Java, Visual Basic.NET | Отдельный | сгенерированный | Windows | Да | Собственный |
Wormhole | Удаление, LR, GLR, GLR без сканирования | ? | C, Python | Смешанный | без сканера | Windows | No | Free, MIT |
Whale Calf | Общая табличная, SLL (k), линейная нормальная форма (конъюнктивные грамматики ), LR, двоичная нормальная форма (логические грамматики ) | ? | C ++ | отдельные | внешние | все | No | проприетарные |
yaep | Earley | Yacc -подобный | C | Смешанный | внешний | Все | No | Бесплатно, GNU LGPL |
В этой таблице сравнивается генераторы парсеров с контекстно-зависимыми грамматиками.
Имя | Алгоритм синтаксического анализа | Нотация входной грамматики | Возможности логической грамматики | Платформа разработки | Лицензия |
---|---|---|---|---|---|
LuZc | дельта-цепочка | модульная | Конъюнктивная, а не дополнительная | POSIX | Собственная |
bnf2xml | Рекурсивный спуск (вывод текстового фильтра - xml) | простая грамматика BNF (входное соответствие), вывод xml | ? | Бета, а не полный анализатор EBNF | Бесплатно, GNU GPL |