| Name |
Parsing algorithm |
Input grammar notation |
Output languages |
Grammar, code |
Lexer |
Development platform |
IDE |
License |
| ANTLR4 |
ALL(*)[2] |
EBNF |
C#, Java, Python, JavaScript, C++, Swift, Go |
mixed |
generated |
Java Virtual Machine |
Yes |
BSD |
| ANTLR3 |
LL(*) |
EBNF |
ActionScript, Ada95, C, C++, C#, Java, JavaScript, Objective-C, Perl, Python, Ruby |
mixed |
generated |
Java Virtual Machine |
Yes |
BSD |
| APG |
Recursive descent, Backtracking |
ABNF |
C, C++, JavaScript, Java |
separate |
none |
all |
No |
GNU GPL |
| AXE |
Recursive descent |
AXE/C++ |
C++11 |
mixed |
none |
any platform with standard C++11 compiler |
No |
Boost |
| Beaver |
LALR(1) |
EBNF |
Java |
mixed |
external |
Java Virtual Machine |
No |
BSD |
| Bison |
LALR(1), LR(1), IELR(1), GLR |
? |
C, C++, Java |
mixed |
external |
all |
No |
GNU GPL |
| Bison++[note 1] |
LALR(1) |
? |
C++ |
mixed |
external |
POSIX |
No |
GNU GPL |
| Bisonc++ |
LALR(1) |
? |
C++ |
mixed |
external |
POSIX |
No |
GNU GPL |
| BtYacc |
Backtracking Bottom-up |
? |
C++ |
mixed |
external |
all |
No |
Public domain |
| byacc |
LALR(1) |
YACC |
C |
mixed |
external |
all |
No |
Public domain |
| BYACC/J |
LALR(1) |
YACC |
C, Java |
mixed |
external |
all |
No |
Public domain |
| CL-Yacc |
LALR(1) |
Lisp |
Common Lisp |
mixed |
external |
all |
No |
MIT |
| Coco/R |
LL(1) |
EBNF |
C, C++, C#, F#, Java, Ada, Object Pascal, Delphi, Modula-2, Oberon, Ruby, Swift, Unicon, Visual Basic .NET |
mixed |
generated |
Java Virtual Machine, .NET Framework, Microsoft Windows, POSIX (depends on output language) |
No |
GNU GPL |
| CookCC |
LALR(1) |
Java annotations |
Java |
mixed |
generated |
Java Virtual Machine |
No |
BSD |
| CppCC |
LL(k) |
? |
C++ |
mixed |
generated |
POSIX |
No |
GNU GPL |
| CSP |
LR(1) |
? |
C++ |
separate |
generated |
POSIX |
No |
Apache License 2.0 |
| CUP |
LALR(1) |
? |
Java |
mixed |
external |
Java Virtual Machine |
No |
BSD-like |
| Dragon |
LR(1), LALR(1) |
? |
C++, Java |
separate |
generated |
all |
No |
GNU GPL |
| eli |
LALR(1) |
? |
C |
mixed |
generated |
POSIX |
No |
GNU GPL, GNU LGPL |
| Essence |
LR(???) |
? |
Scheme 48 |
mixed |
external |
all |
No |
BSD |
| Eto.Parse |
LL(k) |
BNF, EBNF or C# |
N/A (state machine is runtime generated) |
separate |
internal |
.NET Framework |
No |
MIT |
| eyapp |
LALR(1) |
? |
Perl |
mixed |
external or generated |
all |
No |
Perl |
| Frown |
LALR(k) |
? |
Haskell 98 |
mixed |
external |
all |
No |
GNU GPL |
| geyacc |
LALR(1) |
? |
Eiffel |
mixed |
external |
all |
No |
MIT |
| GOLD |
LALR(1) |
BNF |
x86 assembly language, ANSI C, C#, D, Java, Pascal, Object Pascal, Python, Visual Basic 6, Visual Basic .NET, Visual C++ |
separate |
generated |
Microsoft Windows |
Yes |
Modified Zlib |
| GPPG |
LALR(1) |
YACC |
C# |
separate |
external |
Microsoft Windows |
Yes |
BSD |
| Grammatica |
LL(k) |
BNF dialect |
C#, Java |
separate |
generated |
Java Virtual Machine |
No |
BSD |
| HiLexed |
LL(*) |
EBNF or Java |
Java |
separate |
internal |
Java Virtual Machine |
No |
GNU LGPL |
| Hime Parser Generator |
LR(1), LALR(1), LR(0) |
BNF dialect |
C#, Java, Rust |
separate |
generated |
.NET Framework, Java Virtual Machine |
No |
GNU LGPL |
| Hyacc |
LR(1), LALR(1), LR(0) |
YACC |
C |
mixed |
external |
all |
No |
GNU GPL |
| Irony |
LALR(1) |
C# |
N/A (state machine is runtime generated) |
separate |
internal |
.NET Framework |
Yes |
MIT |
| iyacc |
LALR(1) |
YACC |
Icon |
mixed |
external |
all |
No |
GNU GPL |
| jacc |
LALR(1) |
? |
Java |
mixed |
external |
Java Virtual Machine |
No |
BSD |
| JavaCC |
LL(k) |
EBNF |
Java, C++, JavaScript (via GWT compiler)[3] |
mixed |
generated |
Java Virtual Machine |
Yes |
BSD |
| jay |
LALR(1) |
YACC |
C#, Java |
mixed |
none |
Java Virtual Machine |
No |
BSD |
| JFLAP |
LL(1), LALR(1) |
? |
Java |
? |
? |
Java Virtual Machine |
Yes |
? |
| JetPAG |
LL(k) |
? |
C++ |
mixed |
generated |
all |
No |
GNU GPL |
| JS/CC |
LALR(1) |
EBNF |
JavaScript, JScript, ECMAScript |
mixed |
internal |
all |
Yes |
Artistic |
| KDevelop-PG-Qt |
LL(1), Backtracking, Shunting yard |
? |
C++ |
mixed |
generated or external |
all, KDE |
No |
GNU LGPL |
| Kelbt |
Backtracking LALR(1) |
? |
C++ |
mixed |
generated |
POSIX |
No |
GNU GPL |
| kmyacc |
LALR(1) |
? |
C, Java, Perl, JavaScript |
mixed |
external |
all |
No |
GNU GPL |
| Lapg |
LALR(1) |
? |
C, C++, C#, Java, JavaScript |
mixed |
generated |
Java Virtual Machine |
No |
GNU GPL |
| Lemon |
LALR(1) |
? |
C |
mixed |
external |
all |
No |
Public domain |
| LEPL |
Recursive descent |
Python |
Python (no generation, library) |
separate |
none |
all |
No |
MPL/GNU LGPL |
| Lime |
LALR(1) |
? |
PHP |
mixed |
external |
all |
No |
GNU GPL |
| LISA |
LR(?), LL(?), LALR(?), SLR(?) |
? |
Java |
mixed |
generated |
Java Virtual Machine |
Yes |
Public domain |
| LLgen |
LL(1) |
? |
C |
mixed |
external |
POSIX |
No |
BSD |
| LLnextgen |
LL(1) |
? |
C |
mixed |
external |
all |
No |
GNU GPL |
| LLLPG |
LL(k) + syntactic and semantic predicates |
ANTLR-like |
C# |
mixed |
generated (?) |
.NET Framework, Mono |
Visual Studio |
GNU LGPL |
| LPG |
Backtracking LALR(k) |
? |
Java |
mixed |
generated |
Java Virtual Machine |
No |
EPL |
| LRSTAR |
Minimal LR(1), LR(k) |
TBNF or
Yacc-like |
C++ |
separate |
generated |
Windows |
Visual Studio |
Proprietary |
| Menhir |
LR(1) |
? |
OCaml |
mixed |
generated |
all |
No |
QPL |
| ML-Yacc |
LALR(1) |
? |
ML |
mixed |
external |
all |
No |
? |
| Monkey |
LR(1) |
? |
Java |
separate |
generated |
Java Virtual Machine |
No |
GNU GPL |
| Msta |
LALR(k), LR(k) |
YACC, EBNF |
C, C++ |
mixed |
external or generated |
POSIX, Cygwin |
No |
GNU GPL |
| MTP (More Than Parsing) |
LL(1) |
? |
Java |
separate |
generated |
Java Virtual Machine |
No |
GNU GPL |
| MyParser |
LL(*) |
Markdown |
C++11 |
separate |
internal |
any platform with standard C++11 compiler |
No |
MIT License |
| NLT |
GLR |
C#/BNF-like |
C# |
mixed |
mixed |
.NET Framework |
No |
MIT |
| ocamlyacc |
LALR(1) |
? |
OCaml |
mixed |
external |
all |
No |
QPL |
| olex |
LL(1) |
? |
C++ |
mixed |
generated |
all |
No |
GNU GPL |
| parglare |
Scannerless LALR(1)/SLR(1)/GLR |
BNF-like, Python |
N/A (state machine is runtime generated) |
mixed |
none |
all |
No |
MIT |
| Parsec |
LL, Backtracking |
Haskell |
Haskell |
mixed |
none |
all |
No |
BSD |
| Parse::Yapp |
LALR(1) |
? |
Perl |
mixed |
external |
all |
No |
GNU GPL |
| Parser Objects |
LL(k) |
? |
Java |
mixed |
? |
Java Virtual Machine |
No |
zlib |
| PCCTS |
LL |
? |
C, C++ |
? |
? |
all |
No |
? |
| PLY |
LALR(1) |
BNF |
Python |
mixed |
generated |
all |
No |
MIT License |
| PlyPlus |
LALR(1) |
EBNF |
Python |
separate |
generated |
all |
No |
MIT License |
| PRECC |
LL(k) |
? |
C |
separate |
generated |
DOS, POSIX |
No |
GNU GPL |
| QLALR |
LALR(1) |
? |
C++ |
mixed |
external |
all |
No |
GNU GPL |
| RPATK |
Recursive descent, Backtracking |
BNF |
C (no generation, library) |
separate |
none |
all |
No |
GNU GPL |
| SableCC |
LALR(1) |
? |
C, C++, C#, Java, OCaml, Python |
separate |
generated |
all |
No |
GNU LGPL |
| SLK |
LL(k) LR(k) LALR(k) |
EBNF |
C, C++, C#, Java, JavaScript |
separate |
external |
all |
No |
MIT-like |
| SP (Simple Parser) |
Recursive descent |
Python |
Python |
separate |
generated |
all |
No |
GNU LGPL |
| Spirit |
Recursive descent |
? |
C++ |
mixed |
internal |
all |
No |
Boost |
| Sprache |
LL, Backtracking |
C# |
interpreted |
mixed |
internal |
.NET Framework |
No |
MIT |
| Styx |
LALR(1) |
? |
C, C++ |
separate |
generated |
all |
No |
GNU LGPL |
| Sweet Parser |
LALR(1) |
? |
C++ |
separate |
generated |
Microsoft Windows |
No |
zlib |
| Tap |
LL(1) |
? |
C++ |
mixed |
generated |
all |
No |
GNU GPL |
| TextTransformer |
LL(k) |
? |
C++ |
mixed |
generated |
Microsoft Windows |
Yes |
Proprietary |
| TinyPG |
LL(1) |
? |
C#, Visual Basic |
? |
? |
Microsoft Windows |
Yes |
CPOL 1.0 |
| Toy Parser Generator |
Recursive descent |
? |
Python |
mixed |
generated |
all |
No |
GNU LGPL |
| TP Yacc |
LALR(1) |
? |
Turbo Pascal |
mixed |
external |
all |
Yes |
GNU GPL |
| UltraGram |
LALR(1), LR(1), GLR |
BNF |
C++, Java, C#, Visual Basic .NET |
separate |
external |
Microsoft Windows |
Yes |
Public domain |
| UniCC |
LALR(1) |
EBNF |
C, Python, XML |
mixed |
generated |
POSIX |
No |
BSD |
| UrchinCC |
LL(1) |
? |
Java |
? |
generated |
Java Virtual Machine |
No |
? |
| Whale |
LR(?), some conjunctive stuff, see Whale Calf |
? |
C++ |
mixed |
external |
all |
No |
Proprietary |
| wisent |
LALR(1) |
? |
C++, Java |
mixed |
external |
all |
No |
GNU GPL |
| Yacc AT&T/Sun |
LALR(1) |
YACC |
C |
mixed |
external |
POSIX |
No |
CPL & CDDL |
| Yacc++ |
LR(1), LALR(1) |
YACC |
C++, C# |
mixed |
generated or external |
all |
No |
Proprietary |
| Yapps |
LL(1) |
? |
Python |
mixed |
generated |
all |
No |
MIT |
| yecc |
LALR(1) |
? |
Erlang |
separate |
generated |
all |
No |
Erlang |
| Visual BNF |
LR(1), LALR(1) |
? |
C# |
separate |
generated |
.NET Framework |
Yes |
Proprietary |
| YooParse |
LR(1), LALR(1) |
? |
C++ |
mixed |
external |
all |
No |
MIT |
| Parse |
LR(1) |
BNF in C++ types |
? |
? |
none |
C++11 compliant compiler |
No |
MIT |
| GGLL |
LL(1) |
Graph |
Java |
mixed |
generated |
Windows |
Yes |
MIT |
| Product |
Parsing algorithm |
Input grammar notation |
Output languages |
Grammar, code |
Lexer |
Development platform |
IDE |
License |
| Name |
Parsing algorithm |
Output languages |
Grammar, code |
Development platform |
License |
| Arpeggio |
PEG parser interpreter, Packrat |
Python (no generation, interpreted) |
mixed |
all |
MIT |
| AustenX |
Packrat (modified) |
Java |
separate |
all |
BSD |
| Aurochs |
Packrat |
C, OCaml, Java |
mixed |
all |
GNU GPL |
| Canopy |
Packrat |
Java, JavaScript, Python, Ruby |
separate |
all |
GNU GPL |
| CL-peg |
Packrat |
Common Lisp |
mixed |
all |
MIT |
| Drat! |
Packrat |
D |
mixed |
all |
GNU GPL |
| Frisby |
Packrat |
Haskell |
mixed |
all |
BSD |
| grammar::peg |
Packrat |
Tcl |
mixed |
all |
BSD |
| Grako |
Packrat + Cut + Left Recursion |
Python / C++ (beta) |
separate |
all |
BSD |
| IronMeta |
Packrat |
C# |
mixed |
Microsoft Windows |
BSD |
| Katahdin |
Packrat (modified), mutating interpreter |
C# |
mixed |
all |
Public domain |
| Laja |
2-phase scannerless top-down backtracking + runtime support |
Java |
separate |
all |
GNU GPL |
| lars::parser |
Packrat (modified to support left-recursion and resolve grammar ambiguity) |
C++ |
identical |
all |
GNU GPL, commercial license available on request |
| LPeg |
Parsing Machine |
Lua |
mixed |
all |
MIT |
| lug |
Parsing Machine |
C++17 |
mixed |
all |
MIT |
| Mouse |
Recursive descent |
Java |
separate |
Java Virtual Machine |
Apache License 2.0 |
| Narwhal |
Packrat |
C |
mixed |
POSIX, Microsoft Windows |
BSD |
| Nearley |
Earley |
JavaScript |
mixed |
all |
MIT |
| Nemerle.Peg |
Recursive descent + Pratt |
Nemerle |
separate |
all |
BSD |
| neotoma |
Packrat |
Erlang |
separate |
all |
MIT |
| NPEG |
Recursive descent |
C# |
mixed |
all |
MIT |
| OMeta |
Packrat (modified, partial memoization) |
JavaScript, Squeak, Python |
mixed |
all |
MIT |
| PackCC |
Packrat (modified) |
C |
mixed |
all |
MIT |
| Packrat |
Packrat |
Scheme |
mixed |
all |
MIT |
| Pappy |
Packrat |
Haskell |
mixed |
all |
Proprietary |
| parboiled |
Recursive descent |
Java, Scala |
mixed |
Java Virtual Machine |
Apache License 2.0 |
| Lambda PEG |
Recursive descent |
Java |
mixed |
Java Virtual Machine |
Apache License 2.0 |
| parsepp |
Recursive descent |
C++ |
mixed |
all |
Public domain |
| Parsnip |
Packrat |
C++ |
mixed |
Microsoft Windows |
GNU GPL |
| peg |
Recursive descent |
C |
mixed |
all |
MIT |
| PEG.js |
Packrat (partial memoization) |
JavaScript |
mixed |
all |
MIT |
| peg-parser |
PEG parser interpreter |
Dylan |
separate |
all |
|
| Pegasus |
Recursive descent / Packrat (selectively) |
C# |
mixed |
Microsoft Windows |
MIT |
| pegc |
Recursive descent |
C |
mixed |
all |
Public domain |
| pest |
Recursive descent |
Rust |
separate |
all |
MPL |
| PetitParser |
Packrat |
Smalltalk, Java, Dart |
mixed |
all |
MIT |
| PEGTL |
Recursive descent |
C++11 |
mixed |
all |
MIT |
| PGE |
Hybrid recursive descent / operator precedence[4] |
Parrot bytecode |
mixed |
Parrot virtual machine |
Artistic 2.0 |
| PyPy rlib |
Packrat |
Python |
mixed |
all |
MIT |
| pyPEG |
PEG parser interpreter, Packrat |
Python |
mixed |
all |
GNU GPL |
| Rats! |
Packrat |
Java |
mixed |
Java Virtual Machine |
GNU LGPL |
| Spirit2 |
Recursive descent |
C++ |
mixed |
all |
Boost |
| textX |
PEG parser interpreter, Packrat |
Python (no generation, interpreted) |
separate |
all |
MIT |
| Treetop |
Recursive descent |
Ruby |
mixed |
all |
MIT |
| Yard |
Recursive descent |
C++ |
mixed |
all |
MIT or Public domain |
| Waxeye |
Parsing Machine |
C, Java, JavaScript, Python, Racket, Ruby |
separate |
all |
MIT |
| PHP PEG |
? (PEG Parser?) |
PHP |
mixed |
all |
BSD |
| Name |
Parsing algorithm |
Input grammar notation |
Output languages |
Grammar, code |
Lexer |
Development platform |
IDE |
License |
| ACCENT |
Earley |
YACC variant |
C |
mixed |
external |
all |
No |
GNU GPL |
| APaGeD |
GLR, LALR(1), LL(k) |
? |
D |
mixed |
generated |
all |
No |
Artistic |
| Bison |
LALR(1), LR(1), IELR(1), GLR |
YACC |
C, C++, Java, XML |
mixed (except XML) |
external |
all |
No |
GNU GPL |
| DMS Software Reengineering Toolkit |
GLR |
? |
Parlanse |
mixed |
generated |
Microsoft Windows |
No |
Proprietary |
| DParser |
Scannerless GLR |
? |
C |
mixed |
scannerless |
POSIX |
No |
BSD |
| Dypgen |
runtime-extensible GLR |
? |
OCaml |
mixed |
generated |
all |
No |
CeCILL-B |
| E3 |
Earley |
? |
OCaml |
mixed |
external, or scannerless |
all |
No |
? |
| Elkhound |
GLR |
? |
C++, OCaml |
mixed |
external |
all |
No |
BSD |
| eu.h8me.Parsing |
GLR |
? |
N/A (state machine is runtime generated) |
separate |
external |
.NET Framework |
No |
BSD |
| GDK |
LALR(1), GLR |
? |
C, Lex, Haskell, HTML, Java, Object Pascal, Yacc |
mixed |
generated |
POSIX |
No |
MIT |
| Happy |
LALR, GLR |
? |
Haskell |
mixed |
external |
all |
No |
BSD |
| Hime Parser Generator |
GLR |
? |
C#, Java, Rust |
separate |
generated |
.NET Framework, Java Virtual Machine |
No |
GNU LGPL |
| IronText Library |
LALR(1), GLR |
C# |
C# |
mixed |
generated or external |
.NET Framework |
No |
Apache License 2.0 |
| Jison |
LALR(1), LR(0), SLR(1) |
YACC |
JavaScript, C#, PHP |
mixed |
generated |
all |
No |
MIT |
| Syntax |
LALR(1), LR(0), SLR(1) CLR(1) LL(1) |
JSON/YACC |
JavaScript, Python, PHP, Ruby, C#, Rust |
mixed |
generated |
all |
No |
MIT |
| Laja |
Scannerless, two phase |
Laja |
Java |
separate |
scannerless |
all |
No |
GNU GPL |
| ModelCC |
Earley |
Annotated class model |
Java |
generated |
generated |
all |
No |
BSD |
| parglare |
Scannerless LR/GLR |
BNF-like |
Python interpreted, automata run-time generated |
mixed |
scannerless |
all |
No |
MIT |
| P1 |
Combinators |
BNF-like |
OCaml |
mixed |
external, or scannerless |
all |
No |
? |
| P3 |
Earley/combinators |
BNF-like |
OCaml |
mixed |
external, or scannerless |
all |
No |
? |
| P4 |
Earley/combinators, infinitary CFGs |
BNF-like |
OCaml |
mixed |
external, or scannerless |
all |
No |
? |
| Scannerless Boolean Parser |
Scannerless GLR (Boolean grammars) |
? |
Haskell, Java |
separate |
scannerless |
Java Virtual Machine |
No |
BSD |
| SDF/SGLR |
Scannerless GLR |
SDF |
C, Java |
separate |
scannerless |
all |
Yes |
BSD |
| SmaCC |
GLR(1), LALR(1), LR(1) |
? |
Smalltalk |
mixed |
internal |
all |
Yes |
MIT |
| SPARK |
Earley |
? |
Python |
mixed |
external |
all |
No |
MIT |
| Tom |
GLR |
? |
C |
generated |
none |
all |
No |
"No licensing or copyright restrictions" |
| UltraGram |
LALR, LR, GLR |
? |
C++, C#, Java, Visual Basic .NET |
separate |
generated |
Microsoft Windows |
Yes |
Proprietary |
| Wormhole |
Pruning, LR, GLR, Scannerless GLR |
? |
C, Python |
mixed |
scannerless |
Microsoft Windows |
No |
MIT |
| Whale Calf |
General tabular, SLL(k), Linear normal form (Conjunctive grammars), LR, Binary normal form (Boolean grammars) |
? |
C++ |
separate |
external |
all |
No |
Proprietary |
| yaep |
Earley |
yacc like |
C |
mixed |
external |
all |
No |
LGPL |
| Zecc |
Recursive Pattern Matching |
Zecc/Zacc |
Linkable Library |
mixed |
scannerless |
macOS |
Yes |
Proprietary |