Comparison of parser generators
From Wikipedia, the free encyclopedia
This is a list of notable lexer generators and parser generators for various language classes.
[edit] Regular languages
| Name |
Website |
Lexer algorithm |
Output languages |
Grammar, code |
Development platform |
License |
| DFASTAR |
[1] |
DFA matrix tables,
DFA direct code |
C++ |
separate |
Windows |
BSD |
| Dolphin |
[2] |
DFA |
C++ |
separate |
all |
Proprietary |
| flex |
[3] |
DFA table driven |
C |
mixed |
all |
BSD |
| Alex |
[4] |
DFA |
Haskell |
mixed |
all |
BSD |
| JFlex |
[5] |
DFA |
Java |
mixed |
Java Virtual Machine |
GNU GPL |
| C# Flex |
[6] |
DFA |
C# |
mixed |
.NET CLR |
GNU GPL |
| JLex |
[7] |
DFA |
Java |
mixed |
Java Virtual Machine |
BSD-like [8] |
| C# Lex |
[9] |
DFA |
C# |
mixed |
.NET CLR |
? |
| CookCC |
[10] |
DFA |
Java |
mixed |
Java Virtual Machine |
BSD |
| gelex |
[11] |
DFA |
Eiffel |
mixed |
Eiffel |
MIT |
| gplex |
[12] |
DFA |
C# |
mixed |
.NET CLR |
BSD-like |
| lex |
[13] |
DFA |
C |
mixed |
POSIX |
Proprietary, CDDL |
| Quex |
[14] |
DFA direct code |
C, C++ |
mixed |
all |
GNU LGPL |
| Ragel |
[15] |
DFA |
C, C++, D, Java, Objective-C, Ruby |
mixed |
all |
GNU GPL |
| re2c |
[16] |
DFA direct code |
C |
mixed |
all |
MIT |
| Russ Cox's regular expression implementations |
[17] |
DFA, NFA |
Bytecode, x86 assembly language, interpreted |
separate |
all |
MIT |
| lexertl |
[18] |
DFA |
C++ |
|
all |
GNU LGPL |
[edit] Deterministic context-free languages
| Name |
Website |
Parsing algorithm |
Input grammar notation |
Output languages |
Grammar, code |
Lexer |
Development platform |
IDE |
License |
| ANTLR |
[19] |
LL(*) |
EBNF |
ActionScript, Ada95, C, C++, C#, Java, JavaScript, Objective-C, Perl, Python, Ruby |
mixed |
generated |
Java Virtual Machine |
Yes |
BSD |
| APG |
[20] |
Recursive descent, Backtracking |
ABNF |
C, C++, JavaScript, Java |
separate |
none |
all |
No |
GNU GPL |
| AXE |
[21] |
Recursive descent |
AXE/C++ |
C++11 |
mixed |
none |
any platform with standard C++11 compiler |
No |
Boost |
| Beaver |
[22] |
LALR(1) |
? |
Java |
mixed |
external |
Java Virtual Machine |
No |
BSD |
| Bison++ |
[23] |
LALR(1) |
? |
C++ |
mixed |
external |
POSIX |
No |
GNU GPL |
| Bisonc++ |
[24] |
LALR(1) |
? |
C++ |
mixed |
external |
POSIX |
No |
GNU GPL |
| BtYacc |
[25] |
Backtracking Bottom-up |
? |
C++ |
mixed |
external |
all |
No |
Public domain |
| byacc |
[26] |
LALR(1) |
YACC |
C |
mixed |
external |
all |
No |
Public domain |
| BYACC/J |
[27] |
LALR(1) |
? |
C, Java |
mixed |
external |
all |
No |
Public domain |
| CL-Yacc |
[28] |
LALR(1) |
? |
Common Lisp |
mixed |
external |
all |
No |
MIT |
| Coco/R |
[29] |
LL(k) |
? |
C, C++, C#, F#, Java, Ada, Pascal, Modula-2, Oberon, Ruby, Unicon, Visual Basic .NET |
mixed |
generated |
Java Virtual Machine, .NET Framework |
No |
GNU GPL |
| CookCC |
[30] |
LALR(1) |
? |
Java |
mixed |
generated |
Java Virtual Machine |
No |
BSD |
| CppCC |
[31] |
LL(k) |
? |
C++ |
mixed |
generated |
POSIX |
No |
GNU GPL |
| CSP |
[32] |
LR(1) |
? |
C++ |
separate |
generated |
POSIX |
No |
Apache License 2.0 |
| CUP |
[33] |
LALR(1) |
? |
Java |
mixed |
external |
Java Virtual Machine |
No |
GNU GPL |
| Dragon |
[34] |
LR(1), LALR(1) |
? |
C++, Java |
separate |
generated |
all |
No |
GNU GPL |
| eli |
[35] |
LALR(1) |
? |
C |
mixed |
generated |
POSIX |
No |
GNU GPL, GNU LGPL |
| Essence |
[36] |
LR(???) |
? |
Scheme 48 |
mixed |
external |
all |
No |
BSD |
| eyapp |
[37] |
LALR(1) |
? |
Perl |
mixed |
external or generated |
all |
No |
Perl |
| Frown |
[38] |
LALR(k) |
? |
Haskell 98 |
mixed |
external |
all |
No |
GNU GPL |
| geyacc |
[39] |
LALR(1) |
? |
Eiffel |
mixed |
external |
all |
No |
MIT |
| GOLD |
[40] |
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 |
[41] |
LALR(1) |
YACC |
C# |
separate |
external |
Microsoft Windows |
Yes |
BSD |
| Grammatica |
[42] |
LL(k) |
BNF dialect |
C#, Java |
separate |
generated |
Java Virtual Machine |
No |
GNU LGPL |
| HiLexed |
[43] |
LL(*) |
EBNF or Java |
Java |
separate |
internal |
Java Virtual Machine |
No |
GNU LGPL |
| Hime Parser Generator |
[44] |
LR(1), LALR(1), LR(0), LR(*) |
? |
C# |
separate |
generated |
.NET Framework |
No |
GNU LGPL |
| Hyacc |
[45] |
LR(1), LALR(1), LR(0) |
YACC |
C |
mixed |
external |
all |
No |
GNU GPL |
| jacc |
[46] |
LALR(1) |
? |
Java |
mixed |
external |
Java Virtual Machine |
No |
BSD |
| JavaCC |
[47] |
LL(k) |
? |
Java |
mixed |
generated |
Java Virtual Machine |
Yes |
BSD |
| jay |
[48] |
LALR(1) |
YACC |
C#, Java |
mixed |
none |
Java Virtual Machine |
No |
BSD |
| JFLAP |
[49] |
LL(1), LALR(1) |
? |
Java |
? |
? |
Java Virtual Machine |
Yes |
? |
| JetPAG |
[50] |
LL(k) |
? |
C++ |
mixed |
generated |
all |
No |
GNU GPL |
| JS/CC |
[51] |
LALR(1) |
EBNF |
JavaScript, JScript, ECMAScript |
mixed |
internal |
all |
Yes |
Artistic |
| KDevelop-PG-Qt |
[52] |
LL(1), Backtracking, Shunting yard |
? |
C++ |
mixed |
generated or external |
all, KDE |
No |
GNU LGPL |
| Kelbt |
[53] |
Backtracking LALR(1) |
? |
C++ |
mixed |
generated |
POSIX |
No |
GNU GPL |
| kmyacc |
[54] |
LALR(1) |
? |
C, Java, Perl, JavaScript |
mixed |
external |
all |
No |
GNU GPL |
| Lapg |
[55] |
LALR(1) |
? |
C, C++, C#, Java, JavaScript |
mixed |
generated |
Java Virtual Machine |
No |
GNU GPL |
| Lemon |
[56] |
LALR(1) |
? |
C |
mixed |
external |
all |
No |
Public domain |
| LEPL |
[57] |
Recursive descent |
Python |
Python (no generation, library) |
separate |
none |
all |
No |
MPL/GNU LGPL |
| Lime |
[58] |
LALR(1) |
? |
PHP |
mixed |
external |
all |
No |
GNU GPL |
| LISA |
[59] |
LR(?), LL(?), LALR(?), SLR(?) |
? |
Java |
mixed |
generated |
Java Virtual Machine |
Yes |
Public domain |
| LPG |
[60] |
Backtracking LALR(k) |
? |
Java |
mixed |
generated |
Java Virtual Machine |
No |
EPL |
| LLgen |
[61] |
LL(1) |
? |
C |
mixed |
external |
POSIX |
No |
BSD |
| LLnextgen |
[62] |
LL(1) |
? |
C |
mixed |
external |
POSIX |
No |
GNU GPL |
| LRSTAR |
[63] |
LALR(1), LALR(k) |
TBNF |
C++, Visual C++ |
separate |
Includes DFASTAR |
Microsoft Windows |
Microsoft Visual Studio |
BSD |
| Menhir |
[64] |
LR(1) |
? |
Objective Caml |
mixed |
generated |
all |
No |
QPL |
| Mini Parser Generator |
[65] |
? |
? |
Python |
mixed |
generated |
all |
No |
GNU LGPL |
| ML-Yacc |
[66] |
LALR(1) |
? |
ML |
mixed |
external |
all |
No |
? |
| Monkey |
[67] |
LR(1) |
? |
Java |
separate |
generated |
Java Virtual Machine |
No |
GNU GPL |
| More Than Parsing |
[68] |
LL(1) |
? |
Java |
separate |
generated |
Java Virtual Machine |
No |
GNU GPL |
| Msta |
[69] |
LALR(k), LR(k) |
YACC, EBNF |
C, C++ |
mixed |
external or generated |
POSIX, Cygwin |
No |
GNU GPL |
| ocamlyacc |
[70] |
LALR(1) |
? |
Objective Caml |
mixed |
external |
all |
No |
QPL |
| olex |
[71] |
LL(1) |
? |
C++ |
mixed |
generated |
all |
No |
GNU GPL |
| Parsec |
[72] |
LL, Backtracking |
? |
Haskell |
mixed |
none |
all |
No |
BSD |
| Parse::Yapp |
[73] |
LALR(1) |
? |
Perl |
mixed |
external |
all |
No |
GNU GPL |
| Parser Objects |
? |
LL(k) |
? |
Java |
mixed |
? |
Java Virtual Machine |
No |
zlib |
| PCCTS |
[74] |
LL |
? |
C, C++ |
? |
? |
all |
No |
? |
| PLY |
[75] |
LALR(1) |
? |
Python |
mixed |
generated |
all |
No |
MIT License |
| PRECC |
[76] |
LL(k) |
? |
C |
separate |
generated |
DOS, POSIX |
No |
GNU GPL |
| QLALR |
[77] |
LALR(1) |
? |
C++ |
mixed |
external |
all |
No |
GNU GPL |
| RPATK |
[78] |
Recursive descent, Backtracking |
BNF |
C (no generation, library) |
separate |
none |
all |
No |
GNU GPL |
| SableCC |
[79] |
LALR(1) |
? |
C, C++, C#, Java, Objective Caml, Python |
separate |
generated |
all |
No |
GNU LGPL |
| Simple Parser |
[80] |
Recursive descent |
Python |
Python |
separate |
generated |
all |
No |
GNU LGPL |
| SLK |
[81] |
LL(k) |
? |
C, C++, C#, Java |
separate |
external |
all |
No |
Proprietary |
| Spirit |
[82] |
Recursive descent |
? |
C++ |
mixed |
internal |
all |
No |
Boost |
| Styx |
[83] |
LALR(1) |
? |
C, C++ |
separate |
generated |
all |
No |
GNU LGPL |
| Sweet Parser |
[84] |
LALR(1) |
? |
C++ |
separate |
generated |
Microsoft Windows |
No |
zlib |
| Tap |
[85] |
LL(1) |
? |
C++ |
mixed |
generated |
all |
No |
GNU GPL |
| TextTransformer |
[86] |
LL(k) |
? |
C++ |
mixed |
generated |
Microsoft Windows |
Yes |
Proprietary |
| TinyPG |
[87] |
LL(1) |
? |
C#, Visual Basic |
? |
? |
Microsoft Windows |
Yes |
CPOL 1.0 |
| Toy Parser Generator |
[88] |
Recursive descent |
? |
Python |
mixed |
generated |
all |
No |
GNU LGPL |
| TP Yacc |
[89] |
LALR(1) |
? |
Turbo Pascal |
mixed |
external |
all |
Yes |
GNU GPL |
| UniCC |
[90] |
LALR(1) |
EBNF |
C, target-language independent |
mixed |
generated |
POSIX |
No |
Artistic 2.0 |
| Whale |
[91] |
LR(?), some conjunctive stuff, see Whale Calf |
? |
C++ |
mixed |
external |
all |
No |
Proprietary |
| Wisent |
[92] |
LALR(1) |
? |
C++, Java |
mixed |
external |
Java Virtual Machine |
No |
GNU GPL |
| Yacc (AT&T)/Sun |
[93]/[94] |
LALR(1) |
YACC |
C |
mixed |
external |
POSIX |
No |
CPL & CDDL |
| Yacc++ |
[95] |
LR(1), LALR(1) |
YACC |
C++, C# |
mixed |
generated or external |
all |
No |
Proprietary |
| Yapps |
[96] |
LL(1) |
? |
Python |
mixed |
generated |
all |
No |
MIT |
| yecc |
[97] |
LALR(1) |
? |
Erlang |
separate |
generated |
all |
No |
Erlang |
| VisualLangLab |
[98] |
LL(*) |
visual tree (JTree) |
All JVM Languages, though Scala is particularly well supported because of its pattern matching capabilities |
mixed |
generated |
Scala |
Yes |
GNU GPL |
| Visual BNF |
[99] |
LR(1), LALR(1) |
? |
C# |
separate |
generated |
.NET Framework |
Yes |
Proprietary |
| Visual Parse++ |
[100] |
LALR(???) |
? |
C, C++, C#, Java |
separate |
generated |
Microsoft Windows |
Yes |
Proprietary |
| YooParse |
[101] |
LR(1), LALR(1) |
? |
C++ |
mixed |
external |
all |
No |
MIT |
| Product |
Website |
Parsing algorithm |
Input grammar notation |
Output languages |
Grammar, code |
Lexer |
Development platform |
IDE |
License |
[edit] Parsing expression grammars, deterministic boolean grammars
| Name |
Website |
Parsing algorithm |
Output languages |
Grammar, code |
Development platform |
License |
| Aurochs |
[102] |
Packrat |
C, Objective Caml, Java |
mixed |
all |
GNU GPL |
| CL-peg |
[103] |
Packrat |
Common Lisp |
mixed |
all |
MIT |
| Drat! |
[104] |
Packrat |
D |
mixed |
all |
GNU GPL |
| Frisby |
[105] |
Packrat |
Haskell |
mixed |
all |
BSD |
| grammar::peg |
[106] |
Packrat |
Tcl |
mixed |
all |
BSD |
| IronMeta |
[107] |
Packrat |
C# |
mixed |
Microsoft Windows |
BSD |
| Katahdin |
[108] |
Packrat (modified), mutating interpreter |
C# |
mixed |
all |
Public domain |
| Laja |
[109] |
2-phase scannerless top-down backtracking + runtime support |
Java |
separate |
all |
GNU GPL |
| LPeg |
[110] |
Parsing Machine |
Lua |
mixed |
all |
MIT |
| Mouse |
[111] |
Recursive descent |
Java |
separate |
Java Virtual Machine |
Apache License 2.0 |
| Narwhal |
[112] |
Packrat |
C |
mixed |
POSIX, Microsoft Windows |
BSD |
| Nemerle.Peg |
[113] |
Recursive descent + Pratt |
Nemerle |
separate |
all |
BSD |
| neotoma |
[114] |
Packrat |
Erlang |
separate |
all |
MIT |
| NPEG |
[115] |
Recursive descent |
C# |
mixed |
all |
MIT |
| OMeta |
[116] |
Packrat (modified) |
JavaScript, Squeak, Python |
mixed |
all |
MIT |
| Packrat |
[117] |
Packrat |
Scheme |
mixed |
all |
MIT |
| Pappy |
[118] |
Packrat |
Haskell |
mixed |
all |
Proprietary |
| parboiled |
[119] |
Recursive descent |
Java, Scala |
mixed |
Java Virtual Machine |
Apache License 2.0 |
| parsepp |
[120] |
? |
C++ |
mixed |
all |
Public domain |
| Parsnip |
[121] |
Packrat |
C++ |
mixed |
Microsoft Windows |
GNU GPL |
| peg |
[122] |
Recursive descent |
C |
mixed |
all |
MIT |
| PEG.js |
[123] |
Packrat |
JavaScript |
mixed |
all |
MIT |
| peg-parser |
[124] |
PEG parser interpreter |
Dylan |
separate |
all |
|
| pegc |
[125] |
? |
C |
mixed |
all |
Public domain |
| PetitParser |
[126] |
Packrat |
Smalltalk, JavaScript |
mixed |
all |
MIT |
| PEGTL |
[127] |
Recursive descent |
C++0x |
mixed |
POSIX |
MIT |
| PGE |
Parser Grammar Engine |
Recursive descent |
Parrot bytecode |
mixed |
Parrot virtual machine |
Artistic 2.0 |
| PyPy rlib |
[128] |
Packrat |
Python |
mixed |
all |
MIT |
| pyPEG |
[129] |
PEG parser interpreter, Packrat |
Python |
mixed |
all |
GNU GPL |
| Rats! |
[130] |
Packrat |
Java |
mixed |
Java Virtual Machine |
GNU LGPL |
| Spirit2 |
[131] |
Recursive descent |
C++ |
mixed |
all |
Boost |
| Treetop |
[132] |
Recursive descent |
Ruby |
mixed |
all |
MIT |
| Yard |
[133] |
Recursive descent |
C++ |
mixed |
all |
MIT or Public domain |
| Waxeye |
[134] |
Packrat |
C, Java, JavaScript, Python, Ruby, Scheme |
separate |
all |
MIT |
| PHP PEG |
[135] |
? (PEG Parser?) |
PHP |
mixed |
all |
BSD |
[edit] General context-free, conjunctive or boolean languages
| Name |
Website |
Parsing algorithm |
Input grammar notation |
Output languages |
Grammar, code |
Lexer |
Development platform |
IDE |
License |
| ACCENT |
[136] |
Earley |
? |
C |
mixed |
external |
all |
No |
GNU GPL |
| APaGeD |
[137] |
GLR, LALR(1), LL(k) |
? |
D |
mixed |
generated |
all |
No |
Artistic |
| Bison |
[138] |
LALR(1), LR(1), IELR(1), GLR |
YACC |
C, C++, Java |
mixed |
external |
all |
No |
GNU GPL |
| DMS Software Reengineering Toolkit |
[139] |
GLR |
? |
Parlanse |
mixed |
generated |
Microsoft Windows |
No |
Proprietary |
| DParser |
[140] |
Scannerless GLR |
? |
C |
mixed |
scannerless |
POSIX |
No |
BSD |
| Dypgen |
[141] |
runtime-extensible GLR |
? |
Objective Caml |
mixed |
generated |
all |
No |
CeCILL-B |
| Elkhound |
[142] |
GLR |
? |
C++, Objective Caml |
mixed |
external |
all |
No |
BSD |
| eu.h8me.Parsing |
[143] |
GLR |
? |
N/A (state machine is runtime generated) |
separate |
external |
.NET Framework |
No |
BSD |
| GDK |
[144] |
LALR(1), GLR |
? |
C, Lex, Haskell, HTML, Java, Object Pascal, Yacc |
mixed |
generated |
POSIX |
No |
MIT |
| Happy |
[145] |
LALR, GLR |
? |
Haskell |
mixed |
external |
all |
No |
BSD |
| Hime Parser Generator |
[146] |
GLR |
? |
C# |
separate |
generated |
.NET Framework |
No |
GNU LGPL |
| Jison |
[147] |
LALR(1), LR(0), SLR(1) |
YACC |
JavaScript |
mixed |
generated |
all |
No |
MIT |
| Laja |
[148] |
Scannerless, two phase |
Laja |
Java |
separate |
scannerless |
all |
No |
GNU GPL |
| Scannerless Boolean Parser |
[149] |
Scannerless GLR (Boolean grammars) |
? |
Haskell, Java |
separate |
scannerless |
Java Virtual Machine |
No |
BSD |
| SDF/SGLR |
[150] |
Scannerless GLR |
SDF |
C, Java |
separate |
scannerless |
all |
Yes |
BSD |
| SmaCC |
[151] |
GLR(1), LALR(1), LR(1) |
? |
Smalltalk |
mixed |
internal |
all |
Yes |
MIT |
| SPARK |
[152] |
Earley |
? |
Python |
mixed |
external |
all |
No |
MIT |
| Tom |
[153] |
GLR |
? |
C |
generated |
none |
all |
No |
Proprietary |
| UltraGram |
[154] |
LALR, LR, GLR |
? |
C++, C#, Java, Visual Basic .NET |
separate |
generated |
Microsoft Windows |
Yes |
Proprietary |
| Wormhole |
[155] |
Pruning, LR, GLR, Scannerless GLR |
? |
C, Python |
mixed |
scannerless |
Microsoft Windows |
No |
MIT |
| Whale Calf |
[156] |
General tabular, SLL(k), Linear normal form (Conjunctive grammars), LR, Binary normal form (Boolean grammars) |
? |
C++ |
separate |
external |
all |
No |
Proprietary |
[edit] See also
[edit] External links