Сравнение генераторов парсеров - Comparison of parser generators

Это список примечательных лексические генераторы и генераторы парсеров для разных языковых классов.

Обычные языки

Обычные языки являются категорией языков (иногда их называют Хомский Тип 3 ), которому может соответствовать конечный автомат (точнее, детерминированный конечный автомат или недетерминированный конечный автомат ) построенный из регулярное выражение. В частности, обычный язык может сопоставлять такие конструкции, как «A следует за B», «Либо A, либо B», «A, за которым следует ноль или более экземпляров B», но не может сопоставлять конструкции, которые требуют согласованности между несмежными элементами, например как «несколько экземпляров A, за которыми следует такое же количество экземпляров B», а также не могут выражать концепцию рекурсивной «вложенности» («за каждым A в конечном итоге следует соответствующий B»). Классическим примером проблемы, которую не может решить обычная грамматика, является вопрос о том, содержит ли данная строка правильно вложенные скобки. (Обычно это обрабатывается грамматикой Хомского типа 2, также называемой контекстно-свободная грамматика.)

ИмяАлгоритм лексераЯзыки выводаГрамматика, кодПлатформа разработкиЛицензия
АлексDFAHaskellСмешанныйВсеСвободный, BSD
AnnoFlexDFAЯваСмешанныйВиртуальная машина JavaСвободный, BSD
АстирDFA настольный, с разветвлениемC ++Только грамматика (действует)ВсеСвободный, Массачусетский технологический институт
AustenXDFAЯваОтдельныйВсеСвободный, BSD
C # FlexDFAC #Смешанный.NET CLRСвободный, GNU GPL
C # LexDFAC #Смешанный.NET CLR?
CookCCDFAЯваСмешанныйВиртуальная машина JavaСвободный, Apache 2.0
DFA
(вкл. с LRSTAR)
Сжатая матрица DFAC ++ОтдельныйVisual StudioBSD
ДельфинDFAC ++ОтдельныйВсеПроприетарный
FlexDFA управляемый столомC, C ++СмешанныйВсеСвободный, BSD
гелексDFAЭйфельСмешанныйЭйфельСвободный, Массачусетский технологический институт
голексDFAИдтиСмешанныйИдтиСвободный, BSD -стиль
gplexDFAC #Смешанный.NET CLRСвободный, BSD -подобно
JFlexDFAЯваСмешанныйВиртуальная машина JavaСвободный, BSD
JLexDFAЯваСмешанныйВиртуальная машина JavaСвободный, BSD -подобно
lexDFACСмешанныйPOSIXЧастично, проприетарный, CDDL
LexertlDFAC ++?ВсеСвободный, GNU LGPL
QuexDFA прямой кодC, C ++СмешанныйВсеСвободный, GNU LGPL
РагельDFAИдти, C, C ++, сборкаСмешанныйВсеСвободный, GNU GPL, Массачусетский технологический институт[1][2]
РефлексDFA прямой код, таблица DFA и NFA библиотеки регулярных выраженийC ++СмешанныйВсеСвободный, BSD
re2cDFA прямой кодCСмешанныйВсеСвободный, всеобщее достояние

Детерминированные контекстно-свободные языки

Бесконтекстные языки являются категорией языков (иногда называемых Хомский Тип 2 ), которым может соответствовать последовательность правил замены, каждое из которых по существу отображает каждый нетерминальный элемент в последовательность конечных элементов и / или других нетерминальных элементов. Грамматики этого типа могут соответствовать всему, что может быть сопоставлено регулярная грамматика, и, более того, может обрабатывать концепцию рекурсивного «вложения» («за каждым A в конечном итоге следует соответствующий B»), например, вопрос о том, содержит ли данная строка правильно вложенные круглые скобки. Однако правила контекстно-свободных грамматик являются чисто локальными и поэтому не могут обрабатывать вопросы, требующие нелокального анализа, такие как «Существует ли объявление для каждой переменной, которая используется в функции?». Для этого технически потребовалась бы более сложная грамматика, такая как грамматика Хомского типа 1, также называемая контекстно-зависимая грамматика. Однако генераторы парсеров для контекстно-свободных грамматик часто поддерживают возможность написанного пользователем кода вводить ограниченное количество контекстной чувствительности. (Например, при обнаружении объявления переменной написанный пользователем код может сохранить имя и тип переменной во внешней структуре данных, чтобы их можно было проверить на соответствие более поздним ссылкам на переменные, обнаруженным анализатором.)

В детерминированные контекстно-свободные языки являются правильным подмножеством контекстно-свободных языков, которые могут быть эффективно проанализированы детерминированные автоматы выталкивания.

ИмяПарсинг алгоритмОбозначение грамматики вводаЯзыки выводаГрамматика, кодЛексерПлатформа разработкиIDEЛицензия
AGLGLREBNFЯва, JavaScript, (другие цели Kotlin)ОтдельныйниктоЛюбая целевая платформа KotlinНетСвободный, Apache 2.0
ANTLR 4Адаптивный LL (*)[3]EBNFC #, Ява, Python, JavaScript, C ++, Быстрый, Идти, PHPОтдельныйгенерируетсяВиртуальная машина JavaдаСвободный, BSD
ANTLR 3LL (*)EBNFActionScript, Ada95, C, C ++, C #, Ява, JavaScript, Цель-C, Perl, Python, РубинСмешанныйгенерируетсяВиртуальная машина JavaдаСвободный, BSD
ПНГРекурсивный спуск, возвратABNFC, C ++, JavaScript, ЯваОтдельныйниктоВсеНетСвободный, GNU GPL
АстирLL (k), LL (конечный), LL (*)Иерархическая грамматика AstirC ++Только грамматика (действует)генерируетсяВсеКод Visual StudioСвободный, Массачусетский технологический институт
ТОПОРРекурсивный спускAX / C ++C ++ 17, C ++ 11СмешанныйниктоЛюбой с C ++ 17 или же C ++ 11 стандартный компиляторНетСвободный, Способствовать росту
БобрLALR (1)EBNFЯваСмешанныйвнешнийВиртуальная машина JavaНетСвободный, BSD
BelrРекурсивный спускABNFC ++ 17, C ++ 11ОтдельныйвключеныPOSIXНетЧастично, GNU GPL, проприетарный
БизонLALR (1), LR (1), IELR (1), GLRYaccC, C ++, ЯваСмешанныйвнешнийВсеНетСвободный, GNU GPL за исключением
Бизон ++[примечание 1]LALR (1)?C ++СмешанныйвнешнийPOSIXНетСвободный, GNU GPL
БизонС ++LALR (1)?C ++СмешанныйвнешнийPOSIXНетСвободный, GNU GPL
BtYaccВозврат Вверх дном?C ++СмешанныйвнешнийВсеНетСвободный, всеобщее достояние
byaccLALR (1)YaccCСмешанныйвнешнийВсеНетСвободный, всеобщее достояние
BYACC / JLALR (1)YaccC, ЯваСмешанныйвнешнийВсеНетСвободный, всеобщее достояние
CL-YaccLALR (1)ЛиспCommon LispСмешанныйвнешнийВсеНетСвободный, Массачусетский технологический институт
Коко / РLL (1)EBNFC, C ++, C #, F #, Ява, Ада, Object Pascal, Delphi, Модула-2, Оберон, Рубин, Быстрый, Юникон, Visual Basic .NETСмешанныйгенерируетсяВиртуальная машина Java, .NET Framework, Windows, POSIX (зависит от языка вывода)НетСвободный, GNU GPL
CookCCLALR (1)Аннотации JavaЯваСмешанныйгенерируетсяВиртуальная машина JavaНетСвободный, Apache 2.0
CppCCLL (k)?C ++СмешанныйгенерируетсяPOSIXНетСвободный, GNU GPL
CSPLR (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
EyappLALR (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 модифицированный
GPPGLALR (1)YaccC #ОтдельныйвнешнийWindowsдаСвободный, BSD
GrammaticaLL (k)BNF диалектC #, ЯваОтдельныйгенерируетсяВиртуальная машина JavaНетСвободный, BSD
HiLexedLL (*)EBNF или JavaЯваОтдельныйвнутреннийВиртуальная машина JavaНетСвободный, GNU LGPL
Генератор парсеров HimeLALR (1), GLRBNF диалектC #, Ява, РжавчинаОтдельныйгенерируется.NET Framework, Виртуальная машина JavaНетСвободный, GNU LGPL
HyaccLR (1), LALR (1), LR (0)YaccCСмешанныйвнешнийВсеНетСвободный, GNU GPL
iyaccLALR (1)YaccЗначокСмешанныйвнешнийВсеНетСвободный, GNU LGPL
ЖакLALR (1)?ЯваСмешанныйвнешнийВиртуальная машина JavaНетСвободный, BSD
JavaCCLL (k)EBNFЯва, C ++, JavaScript (через GWT компилятор)[4]СмешанныйгенерируетсяВиртуальная машина JavaдаСвободный, BSD
сойкаLALR (1)YaccC #, ЯваСмешанныйниктоВиртуальная машина JavaНетСвободный, BSD
JFLAPLL (1), LALR (1)?Ява??Виртуальная машина Javaда?
JetPAGLL (k)?C ++СмешанныйгенерируетсяВсеНетСвободный, GNU GPL
JS / CCLALR (1)EBNFJavaScript, JScript, ECMAScriptСмешанныйвнутреннийВседаСвободный, BSD
KDevelop-PG-QtLL (1), возврат, маневровая площадка?C ++Смешанныйгенерируемый или внешнийВсе, KDEНетСвободный, GNU LGPL
КельбтВозврат LALR (1)?C ++СмешанныйгенерируетсяPOSIXНетСвободный, GNU GPL
kmyaccLALR (1)?C, Ява, Perl, JavaScriptСмешанныйвнешнийВсеНетСвободный, GNU GPL
LALR
(вкл. с LRSTAR)
LALR (1)YACC, ANTLR, EBNFC ++отделенныйгенерируетсяWindowsVisual StudioBSD
LapgLALR (1)?C, C ++, C #, Ява, JavaScriptСмешанныйгенерируетсяВиртуальная машина JavaНетСвободный, GNU GPL
ЛимонLALR (1)?CСмешанныйвнешнийВсеНетСвободный, всеобщее достояние
ЛаймLALR (1)?PHPСмешанныйвнешнийВсеНетСвободный, GNU GPL
ЛИЗАLR (?), LL (?), LALR (?), SLR (?)?ЯваСмешанныйгенерируетсяВиртуальная машина JavaдаСвободный, всеобщее достояние
LLgenLL (1)?CСмешанныйвнешнийPOSIXНетСвободный, BSD
LLnextgenLL (1)?CСмешанныйвнешнийВсеНетСвободный, GNU GPL
LLLPGLL (k) + синтаксический и семантические предикатыANTLR-подобныйC #Смешанныйсгенерировано (?).NET Framework, МононуклеозVisual StudioСвободный, GNU LGPL
СУГВозврат LALR (k)?ЯваСмешанныйгенерируетсяВиртуальная машина JavaНетСвободный, EPL
LRSTARLALR (*), LR (*)YACC, ANTLR, EBNFC ++отделенныйгенерируетсяWindowsVisual StudioBSD
МенгирLR (1)?OCamlСмешанныйгенерируетсяВсеНетСвободный, QPL
ML-YaccLALR (1)?MLСмешанныйвнешнийВсеНет?
ОбезьянаLR (1)?ЯваОтдельныйгенерируетсяВиртуальная машина JavaНетСвободный, GNU GPL
МстаLALR (k), LR (k)YACC, EBNFC, C ++Смешанныйвнешний или сгенерированныйPOSIX, CygwinНетСвободный, GNU GPL
MTP (больше, чем парсинг)LL (1)?ЯваОтдельныйгенерируетсяВиртуальная машина JavaНетСвободный, GNU GPL
MyParserLL (*)MarkdownC ++ 11ОтдельныйвнутреннийЛюбой со стандартным компилятором C ++ 11НетСвободный, Массачусетский технологический институт
NLTGLRC # /BNF -подобноC #Смешанныйсмешанный.NET FrameworkНетСвободный, Массачусетский технологический институт
окамлячкLALR (1)?OCamlСмешанныйвнешнийВсеНетСвободный, QPL
ОлексLL (1)?C ++СмешанныйгенерируетсяВсеНетСвободный, GNU GPL
ПарсекLL, возвратHaskellHaskellСмешанныйниктоВсеНетСвободный, BSD
Разбор :: ЯппLALR (1)?PerlСмешанныйвнешнийВсеНетСвободный, GNU GPL
Объекты парсераLL (k)?ЯваСмешанный?Виртуальная машина JavaНетСвободный, zlib
PCCTSLL?C, C ++??ВсеНет?
PLYLALR (1)BNFPythonСмешанныйгенерируетсяВсеНетСвободный, Массачусетский технологический институт
PlyPlusLALR (1)EBNFPythonОтдельныйгенерируетсяВсеНетСвободный, Массачусетский технологический институт
PRECCLL (k)?CОтдельныйгенерируетсяДОС, POSIXНетСвободный, GNU GPL
QLALRLALR (1)?C ++СмешанныйвнешнийВсеНетСвободный, GNU GPL
SableCCLALR (1)?C, C ++, C #, Ява, OCaml, PythonОтдельныйгенерируетсяВиртуальная машина JavaНетСвободный, GNU LGPL
SLK[5]LL (k) LR (k) LALR (k)EBNFC, C ++, C #, Ява, JavaScriptОтдельныйвнешнийВсеНетSLK[6]
SLYLALR (1)BNFPythonСмешанныйгенерируетсяВсеНетСвободный, Массачусетский технологический институт
SP (простой парсер)Рекурсивный спускPythonPythonОтдельныйгенерируетсяВсеНетСвободный, GNU LGPL
ДухРекурсивный спуск?C ++СмешанныйвнутреннийВсеНетСвободный, Способствовать росту
СтиксLALR (1)?C, C ++ОтдельныйгенерируетсяВсеНетСвободный, GNU LGPL
Sweet ParserLALR (1)?C ++ОтдельныйгенерируетсяWindowsНетСвободный, zlib
КранLL (1)?C ++СмешанныйгенерируетсяВсеНетСвободный, GNU GPL
TextTransformerLL (k)?C ++СмешанныйгенерируетсяWindowsдаПроприетарный
TinyPGLL (1)?C #, Visual Basic??WindowsдаЧастично, CPOL 1.0
Генератор парсеров игрушекРекурсивный спуск?PythonСмешанныйгенерируетсяВсеНетСвободный, GNU LGPL
TP YaccLALR (1)?Турбо ПаскальСмешанныйвнешнийВседаСвободный, GNU GPL
Tunnel Grammar StudioРекурсивный спуск, возвратABNFC ++ОтдельныйгенерируетсяWindowsдаПроприетарный
UltraGramLALR (1), LR (1), GLRBNFC ++, Java, C #, Visual Basic .NET.ОтдельныйвнешнийWindowsдаСвободный, всеобщее достояние
UniCCLALR (1)EBNFC, C ++, Python, JavaScript, JSON, XMLСмешанныйгенерируетсяPOSIXНетСвободный, BSD
UrchinCCLL (1)?Ява?генерируетсяВиртуальная машина JavaНет?
КИТLR (?), некоторые соединительные вещи, см. Китовый детеныш?C ++СмешанныйвнешнийВсеНетПроприетарный
зубчикLALR (1)?C ++, ЯваСмешанныйвнешнийВсеНетСвободный, GNU GPL
Yacc AT&T /солнцеLALR (1)YaccCСмешанныйвнешнийPOSIXНетСвободный, CPL & CDDL
Yacc ++LR (1), LALR (1)YaccC ++, C #Смешанныйгенерируемый или внешнийВсеНетПроприетарный
YappsLL (1)?PythonСмешанныйгенерируетсяВсеНетСвободный, Массачусетский технологический институт
даLALR (1)?ErlangОтдельныйгенерируетсяВсеНетСвободный, Apache 2.0
Визуальный BNFLR (1), LALR (1)?C #Отдельныйгенерируется.NET FrameworkдаПроприетарный
YooParseLR (1), LALR (1)?C ++СмешанныйвнешнийВсеНетСвободный, Массачусетский технологический институт
РазобратьLR (1)BNF в C ++ типы??никтоСтандартный компилятор C ++ 11НетСвободный, Массачусетский технологический институт
GGLLLL (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 :: ParserPackrat (поддержка левой рекурсии и двусмысленности грамматики)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 PEGPEG Parser?PHPСмешанныйВсеСвободный, BSD

Общие контекстно-свободные, конъюнктивные или логические языки

В этой таблице сравниваются языки генераторов парсеров с общими контекстно-свободная грамматика, а конъюнктивная грамматика, или логическая грамматика.

ИмяПарсинг алгоритмОбозначение грамматики вводаЯзыки выводаГрамматика, кодЛексерПлатформа разработкиIDEЛицензия
АКЦЕНТЭрлиYacc вариантCСмешанныйвнешнийВсеНетСвободный, GNU GPL
APaGeDGLR, LALR (1), LL (k)?DСмешанныйгенерируетсяВсеНетСвободный, Художественный
БизонLALR (1), LR (1), IELR (1), GLRYaccC, C ++, Ява, XMLСмешанный, кроме XMLвнешнийВсеНетСвободный, GNU GPL
Набор инструментов для реинжиниринга программного обеспечения DMSGLR?ParlanseСмешанныйгенерируетсяWindowsНетПроприетарный
DParserGLR без сканирования?CСмешанныйбез сканераPOSIXНетСвободный, BSD
ДипгенРасширяемый во время выполнения GLR?OCamlСмешанныйгенерируетсяВсеНетСвободный, CeCILL -B
E3Эрли?OCamlСмешанныйвнешний или без сканераВсеНет?
ЭлкхаундGLR?C ++, OCamlСмешанныйвнешнийВсеНетСвободный, BSD
GDKLALR (1), GLR?C, Лекс, Haskell, HTML, Ява, Object Pascal, YaccСмешанныйгенерируетсяPOSIXНетСвободный, Массачусетский технологический институт
СчастливыйLALR, GLR?HaskellСмешанныйвнешнийВсеНетСвободный, BSD
Генератор парсеров HimeGLR?C #, Ява, РжавчинаОтдельныйгенерируется.NET Framework, Виртуальная машина JavaНетСвободный, GNU LGPL
Библиотека IronTextLALR (1), GLRC #C #Смешанныйгенерируемый или внешний.NET FrameworkНетСвободный, Apache 2.0
JisonLALR (1), LR (0), SLR (1)YaccJavaScript, C #, PHPСмешанныйгенерируетсяВсеНетСвободный, Массачусетский технологический институт
СинтаксисLALR (1), LR (0), SLR (1) CLR (1) LL (1)JSON /YaccJavaScript, Python, PHP, Рубин, C #, Ржавчина, ЯваСмешанныйгенерируетсяВсеНетСвободный, Массачусетский технологический институт
ЛахаБез сканера, двухфазныйЛахаЯваОтдельныйбез сканераВсеНетСвободный, GNU GPL
ModelCCЭрлиАннотированная модель классаЯваСозданогенерируетсяВсеНетСвободный, BSD
P3Эрли – комбинаторыBNF-подобныйOCamlСмешанныйвнешний или без сканераВсеНет?
P4Комбинаторы Эрли, бесконечные CFGBNF-подобныйOCamlСмешанныйвнешний или без сканераВсеНет?
Булевский синтаксический анализатор без сканированияGLR без сканирования (Булевы грамматики )?Haskell, ЯваОтдельныйбез сканераВиртуальная машина JavaНетСвободный, BSD
SDF / SGLRGLR без сканированияSDFC, ЯваОтдельныйбез сканераВседаСвободный, BSD
SmaCCGLR (1), LALR (1), LR (1)?БолтовняСмешанныйвнутреннийВседаСвободный, Массачусетский технологический институт
ИСКРАЭрли?PythonСмешанныйвнешнийВсеНетСвободный, Массачусетский технологический институт
ТомGLR?CСозданониктоВсеНетБесплатно, «Без лицензионных или авторских ограничений»
UltraGramLALR, 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

Смотрите также

Примечания

  1. ^ Вилка Bison 1.19

Рекомендации

  1. ^ http://www.colm.net/open-source/ragel/
  2. ^ http://www.colm.net/open-source/ragel/[требуется проверка ]
  3. ^ «Адаптивный анализ LL (*): возможности динамического анализа» (PDF). Теренс Парр. Получено 2016-04-03.
  4. ^ «Создание парсеров для Интернета с помощью JavaCC и GWT (часть первая)». Крис Эйнсли. Получено 2014-05-04.
  5. ^ «Генератор парсера SLK поддерживает C, C ++, Java, JavaScript и C #, необязательный возврат с возвратом, бесплатно».
  6. ^ http://www.slkpg.org/license.txt
  7. ^ "Попугай: Грамматический движок". Фонд попугая. 2011 г. Правила PGE предоставляют все возможности анализа рекурсивного спуска и анализа приоритета операторов.
  8. ^ "LuZ: контекстно-зависимый парсер". 2016-10-17. Архивировано из оригинал на 2016-10-17. Получено 2018-10-17.
  9. ^ «LuZc - конъюнктивный контекстно-зависимый парсер». luzc.zohosites.com. Получено 2018-10-17.

внешняя ссылка