Comparison of parser generators
Appearance
![]() | This article's use of external links may not follow Wikipedia's policies or guidelines. (August 2010) |
![]() | This article may be confusing or unclear to readers. (March 2014) |
This is a list of notable lexer generators and parser generators for various language classes.
Regular languages
Deterministic context-free languages
Name | Website | Parsing algorithm | Input grammar notation | Output languages | Grammar, code | Lexer | Development platform | IDE | License |
---|---|---|---|---|---|---|---|---|---|
ANTLR4 | [20] | LL(*) | EBNF | C#, Java | mixed | generated | Java Virtual Machine | Yes | BSD |
ANTLR3 | [21] | LL(*) | EBNF | ActionScript, Ada95, C, C++, C#, Java, JavaScript, Objective-C, Perl, Python, Ruby | mixed | generated | Java Virtual Machine | Yes | BSD |
APG | [22] | Recursive descent, Backtracking | ABNF | C, C++, JavaScript, Java | separate | none | all | No | GNU GPL |
AXE | [23] | Recursive descent | AXE/C++ | C++11 | mixed | none | any platform with standard C++11 compiler | No | Boost |
Beaver | [24] | LALR(1) | EBNF | Java | mixed | external | Java Virtual Machine | No | BSD |
Bison++ | [25] | LALR(1) | ? | C++ | mixed | external | POSIX | No | GNU GPL |
Bisonc++ | [26] | LALR(1) | ? | C++ | mixed | external | POSIX | No | GNU GPL |
BtYacc | [27] | Backtracking Bottom-up | ? | C++ | mixed | external | all | No | Public domain |
byacc | [28] | LALR(1) | YACC | C | mixed | external | all | No | Public domain |
BYACC/J | [29] | LALR(1) | ? | C, Java | mixed | external | all | No | Public domain |
CL-Yacc | [30] | LALR(1) | Lisp | Common Lisp | mixed | external | all | No | MIT |
Coco/R | [31] | LL(1) | ? | 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 | [32] | LALR(1) | Java annotations | Java | mixed | generated | Java Virtual Machine | No | BSD |
CppCC | [33] | LL(k) | ? | C++ | mixed | generated | POSIX | No | GNU GPL |
CSP | [34] | LR(1) | ? | C++ | separate | generated | POSIX | No | Apache License 2.0 |
CUP | [35] | LALR(1) | ? | Java | mixed | external | Java Virtual Machine | No | GNU GPL |
Dragon | [36] | LR(1), LALR(1) | ? | C++, Java | separate | generated | all | No | GNU GPL |
eli | [37] | LALR(1) | ? | C | mixed | generated | POSIX | No | GNU GPL, GNU LGPL |
Essence | [38] | LR(???) | ? | Scheme 48 | mixed | external | all | No | BSD |
eyapp | [39] | LALR(1) | ? | Perl | mixed | external or generated | all | No | Perl |
Frown | [40] | LALR(k) | ? | Haskell 98 | mixed | external | all | No | GNU GPL |
geyacc | [41] | LALR(1) | ? | Eiffel | mixed | external | all | No | MIT |
GOLD | [42] | 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 | [43] | LALR(1) | YACC | C# | separate | external | Microsoft Windows | Yes | BSD |
Grammatica | [44] | LL(k) | BNF dialect | C#, Java | separate | generated | Java Virtual Machine | No | GNU LGPL |
HiLexed | [45] | LL(*) | EBNF or Java | Java | separate | internal | Java Virtual Machine | No | GNU LGPL |
Hime Parser Generator | [46] | LR(1), LALR(1), LR(0), LR(*) | BNF dialect | C# | separate | generated | .NET Framework | No | GNU LGPL |
Hyacc | [47] | LR(1), LALR(1), LR(0) | YACC | C | mixed | external | all | No | GNU GPL |
Irony | [48] | LALR(1) | C# | N/A (state machine is runtime generated) | separate | internal | .NET Framework | Yes | MIT |
jacc | [49] | LALR(1) | ? | Java | mixed | external | Java Virtual Machine | No | BSD |
JavaCC | [50] | LL(k) | EBNF | Java, C++, JavaScript (via GWT compiler)[1] | mixed | generated | Java Virtual Machine | Yes | BSD |
jay | [51] | LALR(1) | YACC | C#, Java | mixed | none | Java Virtual Machine | No | BSD |
JFLAP | [52] | LL(1), LALR(1) | ? | Java | ? | ? | Java Virtual Machine | Yes | ? |
JetPAG | [53] | LL(k) | ? | C++ | mixed | generated | all | No | GNU GPL |
JS/CC | [54] | LALR(1) | EBNF | JavaScript, JScript, ECMAScript | mixed | internal | all | Yes | Artistic |
KDevelop-PG-Qt | [55] | LL(1), Backtracking, Shunting yard | ? | C++ | mixed | generated or external | all, KDE | No | GNU LGPL |
Kelbt | [56] | Backtracking LALR(1) | ? | C++ | mixed | generated | POSIX | No | GNU GPL |
kmyacc | [57] | LALR(1) | ? | C, Java, Perl, JavaScript | mixed | external | all | No | GNU GPL |
Lapg | [58] | LALR(1) | ? | C, C++, C#, Java, JavaScript | mixed | generated | Java Virtual Machine | No | GNU GPL |
Lemon | [59] | LALR(1) | ? | C | mixed | external | all | No | Public domain |
LEPL | [60] | Recursive descent | Python | Python (no generation, library) | separate | none | all | No | MPL/GNU LGPL |
Lime | [61] | LALR(1) | ? | PHP | mixed | external | all | No | GNU GPL |
LISA | [62] | LR(?), LL(?), LALR(?), SLR(?) | ? | Java | mixed | generated | Java Virtual Machine | Yes | Public domain |
LLgen | [63] | LL(1) | ? | C | mixed | external | POSIX | No | BSD |
LLnextgen | [64] | LL(1) | ? | C | mixed | external | all | No | GNU GPL |
LLLPG | [65] | LL(k) + syntactic and semantic predicates | ANTLR-like | C# | mixed | generated (?) | .NET Framework, Mono | Visual Studio | GNU LGPL |
LPG | [66] | Backtracking LALR(k) | ? | Java | mixed | generated | Java Virtual Machine | No | EPL |
LRSTAR | [67] | LALR(1), Canonical LR(1), Minimal LR(1), LR(k) |
EBNF, TBNF | C++ | separate | generated by DFASTAR |
all | Visual Studio C++ | BSD |
Menhir | [68] | LR(1) | ? | OCaml | mixed | generated | all | No | QPL |
ML-Yacc | [69] | LALR(1) | ? | ML | mixed | external | all | No | ? |
Monkey | [70] | LR(1) | ? | Java | separate | generated | Java Virtual Machine | No | GNU GPL |
More Than Parsing | [71] | LL(1) | ? | Java | separate | generated | Java Virtual Machine | No | GNU GPL |
Msta | [72] | LALR(k), LR(k) | YACC, EBNF | C, C++ | mixed | external or generated | POSIX, Cygwin | No | GNU GPL |
NLT | [73] | forking LALR(k) | C#/BNF-like | C# | mixed | mixed | .NET Framework | No | MIT |
ocamlyacc | [74] | LALR(1) | ? | OCaml | mixed | external | all | No | QPL |
olex | [75] | LL(1) | ? | C++ | mixed | generated | all | No | GNU GPL |
Parsec | [76] | LL, Backtracking | ? | Haskell | mixed | none | all | No | BSD |
Parse::Yapp | [77] | LALR(1) | ? | Perl | mixed | external | all | No | GNU GPL |
Parser Objects | ? | LL(k) | ? | Java | mixed | ? | Java Virtual Machine | No | zlib |
PCCTS | [78] | LL | ? | C, C++ | ? | ? | all | No | ? |
PLY | [79] | LALR(1) | ? | Python | mixed | generated | all | No | MIT License |
PlyPlus | [80] | LALR(1) | EBNF | Python | separate | generated | all | No | MIT License |
PRECC | [81] | LL(k) | ? | C | separate | generated | DOS, POSIX | No | GNU GPL |
QLALR | [82] | LALR(1) | ? | C++ | mixed | external | all | No | GNU GPL |
RPATK | [83] | Recursive descent, Backtracking | BNF | C (no generation, library) | separate | none | all | No | GNU GPL |
SableCC | [84] | LALR(1) | ? | C, C++, C#, Java, OCaml, Python | separate | generated | all | No | GNU LGPL |
Simple Parser | [85] | Recursive descent | Python | Python | separate | generated | all | No | GNU LGPL |
SLK | [86] | LL(k) SLR(k) | EBNF | C, C++, C#, Java | separate | external | all | No | Proprietary |
Spirit | [87] | Recursive descent | ? | C++ | mixed | internal | all | No | Boost |
Sprache | [88] | LL, Backtracking | C# | interpreted | mixed | internal | .NET Framework | No | MIT |
Styx | [89] | LALR(1) | ? | C, C++ | separate | generated | all | No | GNU LGPL |
Sweet Parser | [90] | LALR(1) | ? | C++ | separate | generated | Microsoft Windows | No | zlib |
Tap | [91] | LL(1) | ? | C++ | mixed | generated | all | No | GNU GPL |
TextTransformer | [92] | LL(k) | ? | C++ | mixed | generated | Microsoft Windows | Yes | Proprietary |
TinyPG | [93] | LL(1) | ? | C#, Visual Basic | ? | ? | Microsoft Windows | Yes | CPOL 1.0 |
Toy Parser Generator | [94] | Recursive descent | ? | Python | mixed | generated | all | No | GNU LGPL |
TP Yacc | [95] | LALR(1) | ? | Turbo Pascal | mixed | external | all | Yes | GNU GPL |
UniCC | [96] | LALR(1) | EBNF | C, target-language independent | mixed | generated | POSIX | No | Artistic 2.0 |
Whale | [97] | LR(?), some conjunctive stuff, see Whale Calf | ? | C++ | mixed | external | all | No | Proprietary |
Wisent | [98] | LALR(1) | ? | C++, Java | mixed | external | Java Virtual Machine | No | GNU GPL |
Yacc (AT&T)/Sun | [99]/[100] | LALR(1) | YACC | C | mixed | external | POSIX | No | CPL & CDDL |
Yacc++ | [101] | LR(1), LALR(1) | YACC | C++, C# | mixed | generated or external | all | No | Proprietary |
Yapps | [102] | LL(1) | ? | Python | mixed | generated | all | No | MIT |
yecc | [103] | LALR(1) | ? | Erlang | separate | generated | all | No | Erlang |
Visual BNF | [104] | LR(1), LALR(1) | ? | C# | separate | generated | .NET Framework | Yes | Proprietary |
YooParse | [105] | LR(1), LALR(1) | ? | C++ | mixed | external | all | No | MIT |
Parse | [106] | LR(1) | BNF in C++ types | ? | ? | none | C++11 compliant compiler | No | MIT |
Product | Website | Parsing algorithm | Input grammar notation | Output languages | Grammar, code | Lexer | Development platform | IDE | License |
Parsing expression grammars, deterministic boolean grammars
Name | Website | Parsing algorithm | Output languages | Grammar, code | Development platform | License |
---|---|---|---|---|---|---|
Arpeggio | [107] | PEG parser interpreter, Packrat | Python | mixed | all | MIT |
AustenX | [108] | Packrat (modified) | Java | separate | all | BSD |
Aurochs | [109] | Packrat | C, OCaml, Java | mixed | all | GNU GPL |
CL-peg | [110] | Packrat | Common Lisp | mixed | all | MIT |
Drat! | [111] | Packrat | D | mixed | all | GNU GPL |
Frisby | [112] | Packrat | Haskell | mixed | all | BSD |
grammar::peg | [113] | Packrat | Tcl | mixed | all | BSD |
Grako | [114] | Packrat | Python | separate | all | BSD |
IronMeta | [115] | Packrat | C# | mixed | Microsoft Windows | BSD |
Katahdin | [116] | Packrat (modified), mutating interpreter | C# | mixed | all | Public domain |
Laja | [117] | 2-phase scannerless top-down backtracking + runtime support | Java | separate | all | GNU GPL |
LPeg | [118] | Parsing Machine | Lua | mixed | all | MIT |
Mouse | [119] | Recursive descent | Java | separate | Java Virtual Machine | Apache License 2.0 |
Narwhal | [120] | Packrat | C | mixed | POSIX, Microsoft Windows | BSD |
Nemerle.Peg | [121] | Recursive descent + Pratt | Nemerle | separate | all | BSD |
neotoma | [122] | Packrat | Erlang | separate | all | MIT |
NPEG | [123] | Recursive descent | C# | mixed | all | MIT |
OMeta | [124] | Packrat (modified) | JavaScript, Squeak, Python | mixed | all | MIT |
Packrat | [125] | Packrat | Scheme | mixed | all | MIT |
Pappy | [126] | Packrat | Haskell | mixed | all | Proprietary |
parboiled | [127] | Recursive descent | Java, Scala | mixed | Java Virtual Machine | Apache License 2.0 |
parsepp | [128] | ? | C++ | mixed | all | Public domain |
Parsnip | [129] | Packrat | C++ | mixed | Microsoft Windows | GNU GPL |
peg | [130] | Recursive descent | C | mixed | all | MIT |
PEG.js | [131] | Packrat | JavaScript | mixed | all | MIT |
peg-parser | [132] | PEG parser interpreter | Dylan | separate | all | |
Pegasus | [133] | Recursive descent / Packrat (selectively) | C# | mixed | Microsoft Windows | MIT |
pegc | [134] | ? | C | mixed | all | Public domain |
PetitParser | [135] | Packrat | Smalltalk, Java, Dart | mixed | all | MIT |
PEGTL | [136] | Recursive descent | C++0x | mixed | POSIX | MIT |
PGE | Parser Grammar Engine | Hybrid recursive descent / operator precedence[2] | Parrot bytecode | mixed | Parrot virtual machine | Artistic 2.0 |
PyPy rlib | [137] | Packrat | Python | mixed | all | MIT |
pyPEG | [138] | PEG parser interpreter, Packrat | Python | mixed | all | GNU GPL |
Rats! | [139] | Packrat | Java | mixed | Java Virtual Machine | GNU LGPL |
Spirit2 | [140] | Recursive descent | C++ | mixed | all | Boost |
Treetop | [141] | Recursive descent | Ruby | mixed | all | MIT |
Yard | [142] | Recursive descent | C++ | mixed | all | MIT or Public domain |
Waxeye | [143] | Packrat | C, Java, JavaScript, Python, Ruby, Scheme | separate | all | MIT |
PHP PEG | [144] | ? (PEG Parser?) | PHP | mixed | all | BSD |
General context-free, conjunctive or boolean languages
Name | Website | Parsing algorithm | Input grammar notation | Output languages | Grammar, code | Lexer | Development platform | IDE | License |
---|---|---|---|---|---|---|---|---|---|
ACCENT | [145] | Earley | ? | C | mixed | external | all | No | GNU GPL |
APaGeD | [146] | GLR, LALR(1), LL(k) | ? | D | mixed | generated | all | No | Artistic |
Bison | [147] | LALR(1), LR(1), IELR(1), GLR | YACC | C, C++, Java | mixed | external | all | No | GNU GPL |
DMS Software Reengineering Toolkit | [148] | GLR | ? | Parlanse | mixed | generated | Microsoft Windows | No | Proprietary |
DParser | [149] | Scannerless GLR | ? | C | mixed | scannerless | POSIX | No | BSD |
Dypgen | [150] | runtime-extensible GLR | ? | OCaml | mixed | generated | all | No | CeCILL-B |
Elkhound | [151] | GLR | ? | C++, OCaml | mixed | external | all | No | BSD |
eu.h8me.Parsing | [152] | GLR | ? | N/A (state machine is runtime generated) | separate | external | .NET Framework | No | BSD |
GDK | [153] | LALR(1), GLR | ? | C, Lex, Haskell, HTML, Java, Object Pascal, Yacc | mixed | generated | POSIX | No | MIT |
Happy | [154] | LALR, GLR | ? | Haskell | mixed | external | all | No | BSD |
Hime Parser Generator | [155] | GLR | ? | C# | separate | generated | .NET Framework | No | GNU LGPL |
IronText Library | [156] | LALR(1), GLR | C# | C# | mixed | generated or external | .NET Framework | No | Apache License 2.0 |
Jison | [157] | LALR(1), LR(0), SLR(1) | YACC | JavaScript, C#, PHP | mixed | generated | all | No | MIT |
Laja | [158] | Scannerless, two phase | Laja | Java | separate | scannerless | all | No | GNU GPL |
P3 | [159] | Earley/combinators | BNF-like | OCaml | mixed | external, or scannerless | all | No | ? |
Scannerless Boolean Parser | [160] | Scannerless GLR (Boolean grammars) | ? | Haskell, Java | separate | scannerless | Java Virtual Machine | No | BSD |
SDF/SGLR | [161] | Scannerless GLR | SDF | C, Java | separate | scannerless | all | Yes | BSD |
SmaCC | [162] | GLR(1), LALR(1), LR(1) | ? | Smalltalk | mixed | internal | all | Yes | MIT |
SPARK | [163] | Earley | ? | Python | mixed | external | all | No | MIT |
Tom | [164] | GLR | ? | C | generated | none | all | No | "No licensing or copyright restrictions" |
UltraGram | [165] | LALR, LR, GLR | ? | C++, C#, Java, Visual Basic .NET | separate | generated | Microsoft Windows | Yes | Proprietary |
Wormhole | [166] | Pruning, LR, GLR, Scannerless GLR | ? | C, Python | mixed | scannerless | Microsoft Windows | No | MIT |
Whale Calf | [167] | General tabular, SLL(k), Linear normal form (Conjunctive grammars), LR, Binary normal form (Boolean grammars) | ? | C++ | separate | external | all | No | Proprietary |
See also
References
- ^ "Building parsers for the web with JavaCC & GWT (Part one)". Chris Ainsley. Retrieved 2014-05-04.
- ^ "Parrot: Grammar Engine". The Parrot Foundation. 2011. "PGE rules provide the full power of recursive descent parsing and operator precedence parsing."