Comparison of parser generators

{{short description|None}}

{{More citations needed|date=July 2023}}

This is a list of notable lexer generators and parser generators for various language classes.

Regular languages

Regular languages are a category of languages (sometimes termed Chomsky Type 3) which can be matched by a state machine (more specifically, by a deterministic finite automaton or a nondeterministic finite automaton) constructed from a regular expression. In particular, a regular language can match constructs like "A follows B", "Either A or B", "A, followed by zero or more instances of B", but cannot match constructs which require consistency between non-adjacent elements, such as "some instances of A followed by the same number of instances of B", and also cannot express the concept of recursive "nesting" ("every A is eventually followed by a matching B"). A classic example of a problem which a regular grammar cannot handle is the question of whether a given string contains correctly nested parentheses. (This is typically handled by a Chomsky Type 2 grammar, also termed a context-free grammar.)

class="wikitable sortable" style="text-align: center; font-size: 85%; width: auto;"
NameLexer algorithmOutput languagesGrammar, codeDevelopment platformLicense
AlexDFAHaskell{{D-A|Mixed}}{{Yes|All}}{{Free}}, BSD
AnnoFlexDFAJava{{D-A|Mixed}}{{Some|Java virtual machine}}{{Free}}, BSD
AstirDFA table driven, with branchingC++{{D-P|Only grammar (actioned)}}{{Yes|All}}{{Free}}, MIT
AustenXDFAJava{{D-P|Separate}}{{Yes|All}}{{Free}}, BSD
C# FlexDFAC#{{D-A|Mixed}}{{Some|.NET CLR}}{{Free}}, GNU GPL
C# LexDFAC#{{D-A|Mixed}}{{Some|.NET CLR}}?
CookCCDFAJava{{D-A|Mixed}}{{Some|Java virtual machine}}{{Free}}, Apache 2.0
DFADFA compressed matrixC, C++{{D-P|Separate}}Windows, Visual StudioBSD
DolphinDFAC++{{D-P|Separate}}{{Yes|All}}{{Proprietary}}
FlexDFA table drivenC, C++{{D-A|Mixed}}{{Yes|All}}{{Free}}, BSD
gelexDFAEiffel{{D-A|Mixed}}{{Some|Eiffel}}{{Free}}, MIT
golexDFAGo{{D-A|Mixed}}{{Some|Go}}{{Free}}, BSD-style
gplexDFAC#{{D-A|Mixed}}{{Some|.NET CLR}}{{Free}}, BSD-like
JFlexDFAJava{{D-A|Mixed}}{{Some|Java virtual machine}}{{Free}}, BSD
JLexDFAJava{{D-A|Mixed}}{{Some|Java virtual machine}}{{Free}}, BSD-like
lexDFAC{{D-A|Mixed}}{{Some|POSIX}}{{Partial}}, proprietary, CDDL
lexertlDFAC++?{{Yes|All}}{{Free}}, GNU LGPL
QuexDFA direct codeC, C++{{D-A|Mixed}}{{Yes|All}}{{Free}}, GNU LGPL
RagelDFAGo, C, C++, Java, assembly{{D-A|Mixed}}{{Yes|All}}{{Free}}, GNU GPL, MIT{{Cite web|url=http://www.colm.net/open-source/ragel/|title = Ragel State Machine Compiler}}http://www.colm.net/open-source/ragel/ {{verify source |date=November 2020 |reason=This ref was deleted Special:Diff/987467678 by a bug in VisualEditor and later restored by a bot from the original cite located at Special:Permalink/987467450 cite #1 - verify the cite is accurate and delete this template. User:GreenC bot/Job 18}}
RE/flexDFA direct code, DFA table driven, and NFA regex librariesC++{{D-A|Mixed}}{{Yes|All}}{{Free}}, BSD
re2cDFA direct codeC, C++, Go, Rust{{D-A|Mixed}}{{Yes|All}}{{Free}}, public domain

Deterministic context-free languages

Context-free languages are a category of languages (sometimes termed Chomsky Type 2) which can be matched by a sequence of replacement rules, each of which essentially maps each non-terminal element to a sequence of terminal elements and/or other nonterminal elements. Grammars of this type can match anything that can be matched by a regular grammar, and furthermore, can handle the concept of recursive "nesting" ("every A is eventually followed by a matching B"), such as the question of whether a given string contains correctly nested parentheses. The rules of Context-free grammars are purely local, however, and therefore cannot handle questions that require non-local analysis such as "Does a declaration exist for every variable that is used in a function?". To do so technically would require a more sophisticated grammar, like a Chomsky Type 1 grammar, also termed a context-sensitive grammar. However, parser generators for context-free grammars often support the ability for user-written code to introduce limited amounts of context-sensitivity. (For example, upon encountering a variable declaration, user-written code could save the name and type of the variable into an external data structure, so that these could be checked against later variable references detected by the parser.)

The deterministic context-free languages are a proper subset of the context-free languages which can be efficiently parsed by deterministic pushdown automata.

class="wikitable sortable" style="text-align: center; font-size: 85%; width: auto;"
NameParsing algorithmInput grammar notationOutput languagesGrammar, codeLexerDevelopment platformIDELicense
ANTLR4Adaptive LL(*){{Cite web |url=http://www.antlr.org/papers/allstar-techreport.pdf |title=Adaptive LL(*) Parsing: The Power of Dynamic Analysis |access-date=2016-04-03 |publisher=Terence Parr}}EBNFC#, Java, Python, JavaScript, C++, Swift, Go, PHP{{D-P|Separate}}generated{{Some|Java virtual machine}}{{Yes}}{{Free}}, BSD
ANTLR3LL(*)EBNFActionScript, Ada95, C, C++, C#, Java, JavaScript, Objective-C, Perl, Python, Ruby{{D-A|Mixed}}generated{{Some|Java virtual machine}}{{Yes}}{{Free}}, BSD
APG{{cn|date=January 2025}}Recursive descent, backtrackingABNFPython, JavaScript, C, Java{{D-P|Separate}}none{{Yes|All}}{{No}}{{Free}}, BSD
Beaver{{Cite journal |last1=Boyland |first1=John |last2=Spiewak |first2=Daniel |date=2010-09-17 |title=Tool Paper: ScalaBison Recursive Ascent-Descent Parser Generator |journal=Electronic Notes in Theoretical Computer Science |series=Proceedings of the Ninth Workshop on Language Descriptions Tools and Applications (LDTA 2009) |volume=253 |issue=7 |pages=65–74 |doi=10.1016/j.entcs.2010.08.032 |issn=1571-0661|doi-access=free }}{{Cite web |title=Beaver - a LALR Parser Generator |url=https://beaver.sourceforge.net/ |access-date=2023-09-16 |website=beaver.sourceforge.net}}LALR(1)EBNFJava{{D-A|Mixed}}external{{Some|Java virtual machine}}{{No}}{{Free}}, BSD
BisonLALR(1), LR(1), IELR(1), GLRYaccC, C++, D, Java{{D-A|Mixed}}external{{Yes|All}}{{No}}{{Free}}, GNU GPL with exception
BtYaccBacktracking Bottom-up?C++{{D-A|Mixed}}external{{Yes|All}}{{No}}{{Free}}, public domain
byaccLALR(1)YaccC{{D-A|Mixed}}external{{Yes|All}}{{No}}{{Free}}, public domain
CL-Yacc{{Cite journal |last1=Newton |first1=Jim E. |last2=Demaille |first2=Akim |last3=Verna |first3=Didier |date=2016-05-09 |title=Type-Checking of Heterogeneous Sequences in Common Lisp |url=https://www.lrde.epita.fr/dload/papers/newton.16.rte.report.pdf |journal=Proceedings of the 9th European Lisp Symposium on European Lisp Symposium |series=ELS2016 |location=Kraków, Poland |publisher=European Lisp Scientific Activities Association |pages=13–20 |isbn=978-2-9557474-0-7}}{{Cite web |title=CL-Yacc — a LALR(1) parser generator for Common Lisp |url=https://www.irif.fr/~jch/software/cl-yacc/ |access-date=2023-09-16 |website=www.irif.fr}}LALR(1)LispCommon Lisp{{D-A|Mixed}}external{{Yes|All}}{{No}}{{Free}}, MIT
Coco/RLL(1) + semantic predicatesEBNFC, C++, C#, F#, Java, Ada, Object Pascal, Delphi, Modula-2, Oberon, Ruby, Swift, Unicon, Visual Basic .NET{{D-A|Mixed}}generated{{Some|Java virtual machine, .NET framework, Windows, POSIX (depends on output language)}}{{No}}{{Free}}, GNU GPL
CppCC{{Cite journal |last1=Hosseinpour |first1=Sahereh |last2=Alavi Milani |first2=Mir Mohammad Reza |last3=Pehlivan |first3=Hüseyin |date=July 2018 |title=A Step-by-Step Solution Methodology for Mathematical Expressions |journal=Symmetry |language=en |volume=10 |issue=7 |pages=285 |doi=10.3390/sym10070285 |bibcode=2018Symm...10..285H |issn=2073-8994 |doi-access=free }}{{Cite web |title=CppCC's Home Page |url=https://cppcc.sourceforge.net/ |access-date=2023-09-16 |website=cppcc.sourceforge.net}}LL(k)?C++{{D-A|Mixed}}generated{{Some|POSIX}}{{No}}{{Free}}, GNU GPL
CUP{{Cite web |title=Java Cup |url=https://pages.cs.wisc.edu/~fischer/cs536.s06/course.hold/html/NOTES/4a.JAVA-CUP.html |access-date=2023-09-16 |website=pages.cs.wisc.edu}}{{Cite web |title=CUP |url=http://www2.cs.tum.edu/projects/cup/docs.php |access-date=2023-09-16 |website=www2.cs.tum.edu}}LALR(1)?Java{{D-A|Mixed}}external{{Some|Java virtual machine}}{{No}}{{Free}}, BSD-like

| Eli{{Cite journal |last1=Thiemann |first1=Peter |last2=Neubauer |first2=Matthias |date=2004-12-31 |title=Parameterized LR Parsing |journal=Electronic Notes in Theoretical Computer Science |series=Proceedings of the Fourth Workshop on Language Descriptions, Tools, and Applications (LDTA 2004) |volume=110 |pages=115–132 |doi=10.1016/j.entcs.2004.06.007 |issn=1571-0661|doi-access=free }}{{Cite journal |last1=Gray |first1=Robert W. |last2=Levi |first2=Steven P. |last3=Heuring |first3=Vincent P. |last4=Sloane |first4=Anthony M. |last5=Waite |first5=William M. |title=Eli: a complete, flexible compiler construction system |journal=Communications of the ACM |date=1992 |language=en |volume=35 |issue=2 |pages=121–130 |doi=10.1145/129630.129637 |s2cid=5121773 |issn=0001-0782|doi-access=free }}

LALR(1)?C{{D-A|Mixed}}generated{{Some|POSIX}}{{No}}{{Free}}, GNU GPL, GNU LGPL
Essence{{Cite journal |last1=Owens |first1=Scott |last2=Flatt |first2=M. |last3=Shivers |first3=O. |last4=McMullan |first4=Benjamin |date=2004-10-01 |title=Lexer and Parser Generators in Scheme |url=https://www.khoury.northeastern.edu/home/shivers/papers/scmparse.pdf |journal=Scheme 2004: Proceedings of the Fifth Workshop on Scheme and Functional Programming}}LR(?)?Scheme 48{{D-A|Mixed}}external{{Yes|All}}{{No}}{{Free}}, BSD
eyapp{{Cite journal |last1=Areias |first1=Hugo |last2=Simões |first2=Alberto |last3=Henriques |first3=P. |last4=Cruz |first4=Daniela Carneiro da |date=2010-09-01 |title=Parser generation in Perl : an overview and available tools |url=https://core.ac.uk/download/pdf/55615107.pdf |journal=}}LALR(1)?Perl{{D-A|Mixed}}external or generated{{Yes|All}}{{No}}{{Free}}, Artistic
GOLD{{Cite web |last=Volkman |first=Victor |date=2007-07-19 |title=Let Your Parser Go for the GOLD |url=https://www.developer.com/java/let-your-parser-go-for-the-gold/ |access-date=2023-11-04 |website=Developer.com |language=en-US}}LALR(1)BNFx86 assembly language, ANSI C, C#, D, Java, Pascal, Object Pascal, Python, Visual Basic 6, Visual Basic .NET, Visual C++{{D-P|Separate}}generated{{Some|Windows}}{{Yes}}{{Free}}, zlib modified
Hime Parser Generator{{Cite web |title=Parsing in C#: All the Tools and Libraries You Can Use (Part 2) - DZone |url=https://dzone.com/articles/parsing-in-c-all-the-tools-and-libraries-you-can-u-1 |access-date=2023-11-04 |website=dzone.com |language=en}}LALR(1), GLRBNF dialectC#, Java, Rust{{D-P|Separate}}generated{{Some|.NET framework, Java virtual machine}}{{No}}{{Free}}, GNU LGPL
Hyacc{{Cite journal |last1=Ortin |first1=Francisco |last2=Quiroga |first2=Jose |last3=Rodriguez-Prieto |first3=Oscar |last4=Garcia |first4=Miguel |date=2022-03-03 |title=An empirical evaluation of Lex/Yacc and ANTLR parser generation tools |journal=PLOS ONE |language=en |volume=17 |issue=3 |pages=e0264326 |doi=10.1371/journal.pone.0264326 |issn=1932-6203 |pmc=8893623 |pmid=35239695 |bibcode=2022PLoSO..1764326O |doi-access=free }}LR(1), LALR(1), LR(0)YaccC{{D-A|Mixed}}external{{Yes|All}}{{No}}{{Free}}, GNU GPL
JavaCC{{Cite web |last=Enseling |first=Oliver |date=2000-12-29 |title=Build your own languages with JavaCC |url=https://www.infoworld.com/article/2076269/build-your-own-languages-with-javacc.html |access-date=2023-11-04 |website=InfoWorld |language=en}}{{Cite web |title=JavaCC |url=https://javacc.github.io/javacc/ |access-date=2023-11-04 |website=JavaCC |language=en-US}}LL(k)EBNFJava, C++, JavaScript (via GWT compiler){{Cite web |url=http://consoliii.blogspot.co.uk/2014/04/creating-gwt-compatible-parser-using.html |title=Building parsers for the web with JavaCC & GWT (Part one) |date=14 April 2014 |access-date=2014-05-04 |publisher=Chris Ainsley}}{{D-A|Mixed}}generated{{Some|Java virtual machine}}{{Yes}}{{Free}}, BSD
JFLAPLL(1), LALR(1)?Java??{{Some|Java virtual machine}}{{Yes}}?
JetPAGLL(k)?C++{{D-A|Mixed}}generated{{Yes|All}}{{No}}{{Free}}, GNU GPL
JS/CCLALR(1)EBNFJavaScript, JScript, ECMAScript{{D-A|Mixed}}internal{{Yes|All}}{{Yes}}{{Free}}, BSD
KDevelop-PG-QtLL(1), backtracking, shunting-yard?C++{{D-A|Mixed}}generated or external{{Yes|All, KDE}}{{No}}{{Free}}, GNU LGPL
KelbtBacktracking LALR(1)?C++{{D-A|Mixed}}generated{{Some|POSIX}}{{No}}{{Free}}, GNU GPL
kmyaccLALR(1)?C, Java, Perl, JavaScript{{D-A|Mixed}}external{{Yes|All}}{{No}}{{Free}}, GNU GPL
LapgLALR(1)?C, C++, C#, Java, JavaScript{{D-A|Mixed}}generated{{Some|Java virtual machine}}{{No}}{{Free}}, GNU GPL
LarkLALR(1), Earley (SPPF)EBNFPython, JavaScript{{D-A|Mixed}}generated{{Yes|All}}{{Yes}}{{Free}}, MIT
LemonLALR(1)BNF dialect{{Cite web |title=The Lemon Parser Generator |url=https://sqlite.org/src/doc/trunk/doc/lemon.html#syntax |access-date=2023-11-30 |website=sqlite.org}}C{{D-A|Mixed}}external{{Yes|All}}{{No}}{{Free}}, public domain
Lezer{{Cite web |url=https://lezer.codemirror.net/ |title=The Lezer Parser System}}{{Cite news |title=Building a ShopifyQL Code Editor |language=en |work=Shopify |url=https://shopify.engineering/building-a-shopifyql-code-editor |access-date=2023-12-06}}{{Cite web |date=2022-03-11 |title=Sponsoring the Lezer parser system {{!}} Tines |url=https://www.tines.com/blog/sponsoring-the-lezer-parser-system/ |access-date=2023-12-06 |website=www.tines.com}}LR(1), GLREBNF dialectJavaScript{{D-P|Separate}}generatedNode.js, JavaScript{{No}}{{Free}}, MIT
LimeLALR(1)?PHP{{D-A|Mixed}}external{{Yes|All}}{{No}}{{Free}}, GNU GPL
LISALR(?), LL(?), LALR(?), SLR(?)?Java{{D-A|Mixed}}generated{{Some|Java virtual machine}}{{Yes}}{{Free}}, public domain
LLgenLL(1)?C{{D-A|Mixed}}external{{Some|POSIX}}{{No}}{{Free}}, BSD
LLnextgenLL(1)?C{{D-A|Mixed}}external{{Yes|All}}{{No}}{{Free}}, GNU GPL
LLLPGLL(k) + syntactic and semantic predicatesANTLR-likeC#{{D-A|Mixed}}generated (?){{Some|.NET framework, Mono}}{{Yes|Visual Studio}}{{Free}}, GNU LGPL
LPGBacktracking LALR(k)?Java{{D-A|Mixed}}generated{{Some|Java virtual machine}}{{No}}{{Free}}, EPL
LRSTAR{{Cite web |url=http://lrstar.cc/ |title=An LR(*) parser generator for C++}}LALR(1), LALR(*)YACC, ANTLR, EBNFC++{{D-P|Separate}}generated{{Some|Windows}}{{Yes|Visual Studio}}{{Free}}, BSD
MenhirLR(1)?OCaml{{D-A|Mixed}}generated{{Yes|All}}{{No}}{{Free}}, QPL
ML-YaccLALR(1)?ML{{D-A|Mixed}}external{{Yes|All}}{{No}}?
MonkeyLR(1)?Java{{D-P|Separate}}generated{{Some|Java virtual machine}}{{No}}{{Free}}, GNU GPL
MstaLALR(k), LR(k)YACC, EBNFC, C++{{D-A|Mixed}}external or generated{{Some|POSIX, Cygwin}}{{No}}{{Free}}, GNU GPL
MTP (More Than Parsing)LL(1)?Java{{D-P|Separate}}generated{{Some|Java virtual machine}}{{No}}{{Free}}, GNU GPL
MyParserLL(*)MarkdownC++11{{D-P|Separate}}internal{{Some|Any with standard C++11 compiler}}{{No}}{{Free}}, MIT
NLTGLRC#/BNF-likeC#{{D-A|Mixed}}mixed{{Some|.NET framework}}{{No}}{{Free}}, MIT
ocamlyaccLALR(1)?OCaml{{D-A|Mixed}}external{{Yes|All}}{{No}}{{Free}}, QPL
olexLL(1)?C++{{D-A|Mixed}}generated{{Yes|All}}{{No}}{{Free}}, GNU GPL
ParsecLL, backtrackingHaskellHaskell{{D-A|Mixed}}none{{Yes|All}}{{No}}{{Free}}, BSD
yappLALR(1)?Perl{{D-A|Mixed}}external{{Yes|All}}{{No}}{{Free}}, GNU GPL
Parser ObjectsLL(k)?Java{{D-A|Mixed}}?{{Some|Java virtual machine}}{{No}}{{Free}}, zlib
PCCTSLL?C, C++??{{Yes|All}}{{No}}?
PLYLALR(1)BNFPython{{D-A|Mixed}}generated{{Yes|All}}{{No}}{{Free}}, MIT
PlyPlusLALR(1)EBNFPython{{D-P|Separate}}generated{{Yes|All}}{{No}}{{Free}}, MIT
PRECCLL(k)?C{{D-P|Separate}}generated{{Some|DOS, POSIX}}{{No}}{{Free}}, GNU GPL
QLALRLALR(1)?C++{{D-A|Mixed}}external{{Yes|All}}{{No}}{{Free}}, GNU GPL
racc{{Cite web|title=Racc|url=https://i.loveruby.net/en/projects/racc/|access-date=2021-11-26|website=i.loveruby.net}}

|LALR(1)

|BNF-like, yacc-like{{Cite web|title=Racc Grammar File Reference|url=https://i.loveruby.net/en/projects/racc/doc/grammar.html|access-date=2021-11-26|website=i.loveruby.net}}

|Ruby

|{{D-A|Mixed}}

| ?

|{{D-A|Windows, Linux, macOS, FreeBSD, NetBSD}}

|{{No}}

|{{Free|LGPL}}

REX{{Cite web |url=https://www.bottlecaps.de/rex/ |title=The REX Parser Generator supports C, C++, Java, JavaScript, C#, Go, Haxe, Python, Scala, Typescript, XQuery, and XSLT}}LL(1) sLL(k) LR(k) LALR(k) GLR PEG DFA Context-dependent lexingEBNFC++, C#, Java, JavaScript, Go, Haxe, Python, Scala, Typescript, XQuery, XSLT{{D-P|Separate}}generated{{Yes|All}}{{No}}{{Free}}, Apache License 2.0
SableCCLALR(1)?C, C++, C#, Java, OCaml, Python{{D-P|Separate}}generated{{Some|Java virtual machine}}{{No}}{{Free}}, GNU LGPL
SLK{{Cite web |url=http://www.slkpg.com/ |title=The SLK Parser Generator supports C, C++, Java, JavaScript, and C#, optional backtracking, free}}LL(k) LR(k) LALR(k)EBNFC, C++, C#, Java, JavaScript{{D-P|Separate}}external{{Yes|All}}{{No}}SLKhttp://www.slkpg.com/license.txt {{Bare URL plain text|date=March 2022}}
SLY{{Cite web |url=https://sly.readthedocs.io/en/latest/sly.html |title=SLY (Sly Lex Yacc)}}LALR(1)BNFPython{{D-A|Mixed}}generated{{Yes|All}}{{No}}{{Free}}, BSD
SP (Simple Parser)Recursive descentPythonPython{{D-P|Separate}}generated{{Yes|All}}{{No}}{{Free}}, GNU LGPL
SpiritRecursive descent?C++{{D-A|Mixed}}internal{{Yes|All}}{{No}}{{Free}}, Boost
StyxLALR(1)?C, C++{{D-P|Separate}}generated{{Yes|All}}{{No}}{{Free}}, GNU LGPL
Sweet ParserLALR(1)?C++{{D-P|Separate}}generated{{Some|Windows}}{{No}}{{Free}}, zlib
TapLL(1)?C++{{D-A|Mixed}}generated{{Yes|All}}{{No}}{{Free}}, GNU GPL
TextTransformerLL(k)?C++{{D-A|Mixed}}generated{{Some|Windows}}{{Yes}}{{Proprietary}}
TinyPGLL(1)?C#, Visual Basic??{{Some|Windows}}{{Yes}}{{Partial}}, CPOL 1.0
Toy Parser GeneratorRecursive descent?Python{{D-A|Mixed}}generated{{Yes|All}}{{No}}{{Free}}, GNU LGPL
TP YaccLALR(1)?Turbo Pascal{{D-A|Mixed}}external{{Yes|All}}{{Yes}}{{Free}}, GNU GPL
Tree-Sitter{{Cite web |url=https://tree-sitter.github.io/ |title=Tree-Sitter - An incremental parsing system for programming tools}}LR(1), GLRJavaScript DSL, JSONC, bindings (Rust, WebAssembly, JavaScript, Python, many other){{D-P|Separate}}generated + external{{Yes|All}}{{D-A|Neovim, Helix, GNU Emacs, Lapce, Zed}}{{Free}}, MIT
Tunnel Grammar StudioTunnel ParsingABNFC++{{D-P|Separate}}generated{{Some|Windows}}{{Yes}}{{Proprietary}}
UltraGramLALR(1), LR(1), GLRBNFC++, Java, C#, Visual Basic .NET{{D-P|Separate}}external{{Some|Windows}}{{Yes}}{{Free}}, public domain
UniCCLALR(1)EBNFC, C++, Python, JavaScript, JSON, XML{{D-A|Mixed}}generated{{Some|POSIX}}{{No}}{{Free}}, BSD
UrchinCCLL(1)?Java?generated{{Some|Java virtual machine}}{{No}}?

| Yacc AT&T/Sun

LALR(1)YaccC{{D-A|Mixed}}external{{Some|POSIX}}{{No}}{{Free}}, CPL & CDDL
Yacc++LR(1), LALR(1)YaccC++, C#{{D-A|Mixed}}generated or external{{Yes|All}}{{No}}{{Proprietary}}
YappsLL(1)?Python{{D-A|Mixed}}generated{{Yes|All}}{{No}}{{Free}}, MIT
yeccLALR(1)?Erlang{{D-P|Separate}}generated{{Yes|All}}{{No}}{{Free}}, Apache 2.0
Visual BNFLR(1), LALR(1)?C#{{D-P|Separate}}generated{{Some|.NET framework}}{{Yes}}{{Proprietary}}
YooParseLR(1), LALR(1)?C++{{D-A|Mixed}}external{{Yes|All}}{{No}}{{Free}}, MIT
Parse{{Cite web |url=https://github.com/MathiasVP/Parse/ |title=Parse - Compile time (LR) type safe parser generator for C++|website=GitHub|date=30 December 2021}}LR(1)BNF in C++ types??none{{Some|C++11 standard compiler}}{{No}}{{Free}}, MIT
GGLLLL(1)GraphJava{{D-A|Mixed}}generated{{Some|Windows}}{{Yes}}{{Free}}, MIT
class="sortbottom"

! Product !! Parsing algorithm !! Input grammar notation !! Output languages !! Grammar, code !! Lexer !! Development platform !! IDE !! License

Parsing expression grammars, deterministic Boolean grammars

This table compares parser generators with parsing expression grammars, deterministic Boolean grammars.

class="wikitable sortable" style="text-align: center; font-size: 85%; width: auto;"
NameParsing algorithmOutput languagesGrammar, codeDevelopment platformLicense
AustenXPackrat (modified)Java{{D-P|Separate}}{{Yes|All}}{{Free}}, BSD
AurochsPackratC, OCaml, Java{{D-A|Mixed}}{{Yes|All}}{{Free}}, GNU GPL
BNFliteRecursive descentC++{{D-A|Mixed}}{{Yes|All}}{{Free}}, MIT
CanopyPackratJava, JavaScript, Python, Ruby{{D-P|Separate}}{{Yes|All}}{{Free}}, GNU GPL
CL-pegPackratCommon Lisp{{D-A|Mixed}}{{Yes|All}}{{Free}}, MIT
Drat!PackratD{{D-A|Mixed}}{{Yes|All}}{{Free}}, GNU GPL
FrisbyPackratHaskell{{D-A|Mixed}}{{Yes|All}}{{Free}}, BSD
grammar::pegPackratTcl{{D-A|Mixed}}{{Yes|All}}{{Free}}, BSD
GrakoPackrat + Cut + Left RecursionPython, C++ (beta){{D-P|Separate}}{{Yes|All}}{{Free}}, BSD
IronMetaPackratC#{{D-A|Mixed}}{{Some|Windows}}{{Free}}, BSD
Laja2-phase scannerless top-down backtracking + runtime supportJava{{D-P|Separate}}{{Yes|All}}{{Free}}, GNU GPL
lars::ParserPackrat (supporting left-recursion and grammar ambiguity)C++Identical{{Yes|All}}{{Free}}, BSD
LPegParsing machineLua{{D-A|Mixed}}{{Yes|All}}{{Free}}, MIT
lugParsing machineC++17{{D-A|Mixed}}{{Yes|All}}{{Free}}, MIT
MouseRecursive descent (modified, limited memoization and left-recursion)Java{{D-P|Separate}}{{Some|Java virtual machine}}{{Free}}, Apache 2.0
NarwhalPackratC{{D-A|Mixed}}{{Some|POSIX, Windows}}{{Free}}, BSD
NearleyEarleyJavaScript{{D-A|Mixed}}{{Yes|All}}{{Free}}, MIT
Nemerle.PegRecursive descent + PrattNemerle{{D-P|Separate}}{{Yes|All}}{{Free}}, BSD
neotomaPackratErlang{{D-P|Separate}}{{Yes|All}}{{Free}}, MIT
nez{{Citation |title=Nez: practical open grammar language |date=2015-11-26 |arxiv=1511.08307 |last1=Kuramitsu |first1=Kimio }}Parsing machineJava, C{{D-P|Separate}}{{Some|Java virtual machine}}{{Free}}, BSD
NPEGRecursive descentC#{{D-A|Mixed}}{{Yes|All}}{{Free}}, MIT
OMetaPackrat (modified, partial memoization)JavaScript, Squeak, Python{{D-A|Mixed}}{{Yes|All}}{{Free}}, MIT
PackCCPackrat (modified, left-recursion support)C{{D-A|Mixed}}{{Yes|All}}{{Free}}, MIT
PackratPackratScheme{{D-A|Mixed}}{{Yes|All}}{{Free}}, MIT
PappyPackratHaskell{{D-A|Mixed}}{{Yes|All}}{{Free}}, BSD
parboiledRecursive descentJava, Scala{{D-A|Mixed}}{{Some|Java virtual machine}}{{Free}}, Apache 2.0
Lambda PEGRecursive descentJava{{D-A|Mixed}}{{Some|Java virtual machine}}{{Free}}, Apache 2.0
parseppRecursive descentC++{{D-A|Mixed}}{{Yes|All}}{{Free}}, public domain
ParsnipPackratC++{{D-A|Mixed}}{{Some|Windows}}{{Free}}, GNU GPL
PatternsParsing machineSwiftIdentical{{Yes|All}}{{Free}}, MIT
pegRecursive descentC{{D-A|Mixed}}{{Yes|All}}{{Free}}, MIT
PEG.jsPackrat (partial memoization)JavaScript{{D-A|Mixed}}{{Yes|All}}{{Free}}, MIT
PeggyMaintained fork of PEG.jsPackrat (partial memoization)JavaScript{{D-A|Mixed}}{{Yes|All}}{{Free}}, MIT
PegasusRecursive descent, Packrat (selectively)C#{{D-A|Mixed}}{{Some|Windows}}{{Free}}, MIT
pegcRecursive descentC{{D-A|Mixed}}{{Yes|All}}{{Free}}, public domain
pestRecursive descentRust{{D-P|Separate}}{{Yes|All}}{{Free}}, MIT, Apache 2.0
PetitParserPackratSmalltalk, Java, Dart{{D-A|Mixed}}{{Yes|All}}{{Free}}, MIT
PEGTL{{Citation |title=taocpp/PEGTL |date=2024-03-14 |url=https://github.com/taocpp/PEGTL |access-date=2024-03-16 |publisher=The Art of C++}}Recursive descentC++11, C++17{{D-A|Mixed}}{{Yes|All}}{{Free}}, Boost
Parser Grammar Engine (PGE)Hybrid recursive descent / operator precedence{{cite web |url=https://parrot.github.com/html/docs/book/pct/ch04_pge.pod.html |title=Parrot: Grammar Engine |year=2011 |publisher=The Parrot Foundation |quote=PGE rules provide the full power of recursive descent parsing and operator precedence parsing.}}Parrot bytecode{{D-A|Mixed}}{{Some|Parrot virtual machine}}{{Free}}, Artistic 2.0
PyPy rlibPackratPython{{D-A|Mixed}}{{Yes|All}}{{Free}}, MIT
Rats!PackratJava{{D-A|Mixed}}{{Some|Java virtual machine}}{{Free}}, GNU LGPL
Spirit2Recursive descentC++{{D-A|Mixed}}{{Yes|All}}{{Free}}, Boost
TreetopRecursive descentRuby{{D-A|Mixed}}{{Yes|All}}{{Free}}, MIT
YardRecursive descentC++{{D-A|Mixed}}{{Yes|All}}{{Free}}, MIT or public domain
WaxeyeParsing machineC, Java, JavaScript, Python, Racket, Ruby{{D-P|Separate}}{{Yes|All}}{{Free}}, MIT
PHP PEGPEG Parser?PHP{{D-A|Mixed}}{{Yes|All}}{{Free}}, BSD

General context-free, conjunctive, or Boolean languages

This table compares parser generator languages with a general context-free grammar, a conjunctive grammar, or a Boolean grammar.

class="wikitable sortable" style="text-align: center; font-size: 85%; width: auto;"
NameParsing algorithmInput grammar notation || Output languagesGrammar, codeLexerDevelopment platformIDELicense
ACCENTEarleyYacc variantC{{D-A|Mixed}}external{{Yes|All}}{{No}}{{Free}}, GNU GPL
APaGeDGLR, LALR(1), LL(k)?D{{D-A|Mixed}}generated{{Yes|All}}{{No}}{{Free}}, Artistic
BisonLALR(1), LR(1), IELR(1), GLRYaccC, C++, D,{{cite web |title=Decl Summary (Bison 3.8.1) |url=https://www.gnu.org/software/bison/manual/html_node/Decl-Summary.html |website=www.gnu.org}} Java, XML{{D-A|Mixed}}, except XMLexternal{{Yes|All}}{{No}}{{Free}}, GNU GPL
DMS Software Reengineering ToolkitGLR?Parlanse{{D-A|Mixed}}generated{{Some|Windows}}{{No}}{{Proprietary}}
DParserScannerless GLR?C{{D-A|Mixed}}scannerless{{Some|POSIX}}{{No}}{{Free}}, BSD
DypgenRuntime-extensible GLR?OCaml{{D-A|Mixed}}generated{{Yes|All}}{{No}}{{Free}}, CeCILL-B
E3Earley?OCaml{{D-A|Mixed}}external, or scannerless{{Yes|All}}{{No}}?
ElkhoundGLR?C++, OCaml{{D-A|Mixed}}external{{Yes|All}}{{No}}{{Free}}, BSD
GDKLALR(1), GLR?C, Lex, Haskell, HTML, Java, Object Pascal, Yacc{{D-A|Mixed}}generated{{Some|POSIX}}{{No}}{{Free}}, MIT
HappyLALR, GLR?Haskell{{D-A|Mixed}}external{{Yes|All}}{{No}}{{Free}}, BSD
Hime Parser GeneratorGLR?C#, Java, Rust{{D-P|Separate}}generated{{Some|.NET framework, Java virtual machine}}{{No}}{{Free}}, GNU LGPL
IronText LibraryLALR(1), GLRC#C#{{D-A|Mixed}}generated or external{{Some|.NET framework}}{{No}}{{Free}}, Apache 2.0
JisonLALR(1), LR(0), SLR(1)YaccJavaScript, C#, PHP{{D-A|Mixed}}generated{{Yes|All}}{{No}}{{Free}}, MIT
SyntaxLALR(1), LR(0), SLR(1) CLR(1) LL(1)JSON/YaccJavaScript, Python, PHP, Ruby, C++, C#, Rust, Java{{D-A|Mixed}}generated{{Yes|All}}{{No}}{{Free}}, MIT
LajaScannerless, two phaseLajaJava{{D-P|Separate}}scannerless{{Yes|All}}{{No}}{{Free}}, GNU GPL
ModelCCEarleyAnnotated class modelJavaGeneratedgenerated{{Yes|All}}{{No}}{{Free}}, BSD
P3Earley–combinatorsBNF-likeOCaml{{D-A|Mixed}}external, or scannerless{{Yes|All}}{{No}}?
P4Earley–combinators, infinitary CFGsBNF-likeOCaml{{D-A|Mixed}}external, or scannerless{{Yes|All}}{{No}}?
Scannerless Boolean ParserScannerless GLR (Boolean grammars)?Haskell, Java{{D-P|Separate}}scannerless{{Some|Java virtual machine}}{{No}}{{Free}}, BSD
SDF/SGLRScannerless GLRSDFC, Java{{D-P|Separate}}scannerless{{Yes|All}}{{Yes}}{{Free}}, BSD
SmaCCGLR(1), LALR(1), LR(1)?Smalltalk{{D-A|Mixed}}internal{{Yes|All}}{{Yes}}{{Free}}, MIT
SPARKEarley?Python{{D-A|Mixed}}external{{Yes|All}}{{No}}{{Free}}, MIT
TomGLR?CGeneratednone{{Yes|All}}{{No}}{{Free}}, "No licensing or copyright restrictions"
UltraGramLALR, LR, GLR?C++, C#, Java, Visual Basic .NET{{D-P|Separate}}generated{{Some|Windows}}{{Yes}}{{Proprietary}}
WormholePruning, LR, GLR, Scannerless GLR?C, Python{{D-A|Mixed}}scannerless{{Some|Windows}}{{No}}{{Free}}, MIT
Whale CalfGeneral tabular, SLL(k), Linear normal form (conjunctive grammars), LR, Binary normal form (Boolean grammars)?C++{{D-P|Separate}}external{{Yes|All}}{{No}}{{Proprietary}}
yaepEarleyYacc-likeC{{D-A|Mixed}}external{{Yes|All}}{{No}}{{Free}}, GNU LGPL

Context-sensitive grammars

This table compares parser generators with context-sensitive grammars.

class="wikitable sortable"

! Name !! Parsing algorithm !! Input grammar notation !! Boolean grammar abilities !! Development platform !! License

[http://sourceforge.net/p/bnf2xml/ bnf2xml]Recursive descent (is a text filter output is xml)simple BNF{{clarify|Only context-free grammars can be denoted in BNF.|date=January 2018}} grammar (input matching), output is xml?Beta, and not a full EBNF parser{{Free}}, GNU GPL

See also

Notes

References

{{Reflist}}