Comparison of parser generators
From Infogalactic: the planetary knowledge core
Lua error in package.lua at line 80: module 'strict' not found.
This is a list of notable lexer generators and parser generators for various language classes.
Contents
Regular languages
<templatestyles src="Module:Hatnote/styles.css"></templatestyles>
Name | Website | Lexer algorithm | Output languages | Grammar, code | Development platform | License |
---|---|---|---|---|---|---|
Alex | [1] | DFA | Haskell | mixed | all | BSD |
AustenX | [2] | DFA | Java | separate | all | BSD |
C# Flex | [3] | DFA | C# | mixed | .NET CLR | GNU GPL |
C# Lex | [4] | DFA | C# | mixed | .NET CLR | ? |
CookCC | [5] | DFA | Java | mixed | Java Virtual Machine | BSD |
DFAlex | [6] | DFA | no code generation required | Java | Java | Apache License 2.0 |
Dolphin | [7] | DFA | C++ | separate | all | Proprietary |
flex | [8] | DFA table driven | C, C++ | mixed | all | BSD |
gelex | [9] | DFA | Eiffel | mixed | Eiffel | MIT |
golex | [10] | DFA | Go | mixed | Go | BSD-style |
gplex | [11] | DFA | C# | mixed | .NET CLR | BSD-like |
JFlex | [12] | DFA | Java | mixed | Java Virtual Machine | GNU GPL |
JLex | [13] | DFA | Java | mixed | Java Virtual Machine | BSD-like [14] |
lex | [15] | DFA | C | mixed | POSIX | Proprietary, CDDL |
lexertl | [16] | DFA | C++ | all | GNU LGPL | |
Quex | [17] | DFA direct code | C, C++ | mixed | all | GNU LGPL |
Ragel | [18] | DFA | C, C++, D, Go, Java, Objective-C, Ruby | mixed | all | GNU GPL |
re2c | [19] | DFA direct code | C | mixed | all | Public domain |
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, Python, JavaScript | 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), LR(1), IELR(1), GLR | ? | C, C++ | mixed | external | all | No | GNU GPL |
Bison++ | [26] | LALR(1) | ? | C++ | mixed | external | POSIX | No | GNU GPL |
Bisonc++ | [27] | LALR(1) | ? | C++ | mixed | external | POSIX | No | GNU GPL |
BtYacc | [28] | Backtracking Bottom-up | ? | C++ | mixed | external | all | No | Public domain |
byacc | [29] | LALR(1) | YACC | C | mixed | external | all | No | Public domain |
BYACC/J | [30] | LALR(1) | ? | C, Java | mixed | external | all | No | Public domain |
CL-Yacc | [31] | LALR(1) | Lisp | Common Lisp | mixed | external | all | No | MIT |
Coco/R | [32] | LL(1) | EBNF | 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 | [33] | LALR(1) | Java annotations | Java | mixed | generated | Java Virtual Machine | No | BSD |
CppCC | [34] | LL(k) | ? | C++ | mixed | generated | POSIX | No | GNU GPL |
CSP | [35] | LR(1) | ? | C++ | separate | generated | POSIX | No | Apache License 2.0 |
CUP | [36] | LALR(1) | ? | Java | mixed | external | Java Virtual Machine | No | GNU GPL |
Dragon | [37] | LR(1), LALR(1) | ? | C++, Java | separate | generated | all | No | GNU GPL |
eli | [38] | LALR(1) | ? | C | mixed | generated | POSIX | No | GNU GPL, GNU LGPL |
Essence | [39] | LR(???) | ? | Scheme 48 | mixed | external | all | No | BSD |
Eto.Parse | [40] | LL(k) | BNF, EBNF or C# | N/A (state machine is runtime generated) | separate | internal | .NET Framework | No | MIT |
eyapp | [41] | LALR(1) | ? | Perl | mixed | external or generated | all | No | Perl |
Frown | [42] | LALR(k) | ? | Haskell 98 | mixed | external | all | No | GNU GPL |
geyacc | [43] | LALR(1) | ? | Eiffel | mixed | external | all | No | MIT |
GOLD | [44] | 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 | [45] | LALR(1) | YACC | C# | separate | external | Microsoft Windows | Yes | BSD |
Grammatica | [46] | LL(k) | BNF dialect | C#, Java | separate | generated | Java Virtual Machine | No | GNU LGPL |
HiLexed | [47] | LL(*) | EBNF or Java | Java | separate | internal | Java Virtual Machine | No | GNU LGPL |
Hime Parser Generator | [48] | LR(1), LALR(1), LR(0) | BNF dialect | C#, Java | separate | generated | .NET Framework, Java Virtual Machine | No | GNU LGPL |
Hyacc | [49] | LR(1), LALR(1), LR(0) | YACC | C | mixed | external | all | No | GNU GPL |
Irony | [50] | LALR(1) | C# | N/A (state machine is runtime generated) | separate | internal | .NET Framework | Yes | MIT |
iyacc | [51] | LALR(1) | YACC | Icon | mixed | external | all | No | GNU GPL |
jacc | [52] | LALR(1) | ? | Java | mixed | external | Java Virtual Machine | No | BSD |
JavaCC | [53] | LL(k) | EBNF | Java, C++, JavaScript (via GWT compiler)[1] | mixed | generated | Java Virtual Machine | Yes | BSD |
jay | [54] | LALR(1) | YACC | C#, Java | mixed | none | Java Virtual Machine | No | BSD |
JFLAP | [55] | LL(1), LALR(1) | ? | Java | ? | ? | Java Virtual Machine | Yes | ? |
JetPAG | [56] | LL(k) | ? | C++ | mixed | generated | all | No | GNU GPL |
JS/CC | [57] | LALR(1) | EBNF | JavaScript, JScript, ECMAScript | mixed | internal | all | Yes | Artistic |
KDevelop-PG-Qt | [58] | LL(1), Backtracking, Shunting yard | ? | C++ | mixed | generated or external | all, KDE | No | GNU LGPL |
Kelbt | [59] | Backtracking LALR(1) | ? | C++ | mixed | generated | POSIX | No | GNU GPL |
kmyacc | [60] | LALR(1) | ? | C, Java, Perl, JavaScript | mixed | external | all | No | GNU GPL |
Lapg | [61] | LALR(1) | ? | C, C++, C#, Java, JavaScript | mixed | generated | Java Virtual Machine | No | GNU GPL |
Lemon | [62] | LALR(1) | ? | C | mixed | external | all | No | Public domain |
LEPL | [63] | Recursive descent | Python | Python (no generation, library) | separate | none | all | No | MPL/GNU LGPL |
Lime | [64] | LALR(1) | ? | PHP | mixed | external | all | No | GNU GPL |
LISA | [65] | LR(?), LL(?), LALR(?), SLR(?) | ? | Java | mixed | generated | Java Virtual Machine | Yes | Public domain |
LLgen | [66] | LL(1) | ? | C | mixed | external | POSIX | No | BSD |
LLnextgen | [67] | LL(1) | ? | C | mixed | external | all | No | GNU GPL |
LLLPG | [68] | LL(k) + syntactic and semantic predicates | ANTLR-like | C# | mixed | generated (?) | .NET Framework, Mono | Visual Studio | GNU LGPL |
LPG | [69] | Backtracking LALR(k) | ? | Java | mixed | generated | Java Virtual Machine | No | EPL |
Menhir | [70] | LR(1) | ? | OCaml | mixed | generated | all | No | QPL |
ML-Yacc | [71] | LALR(1) | ? | ML | mixed | external | all | No | ? |
Monkey | [72] | LR(1) | ? | Java | separate | generated | Java Virtual Machine | No | GNU GPL |
Msta | [73] | LALR(k), LR(k) | YACC, EBNF | C, C++ | mixed | external or generated | POSIX, Cygwin | No | GNU GPL |
MTP (More Than Parsing) | [74] | LL(1) | ? | Java | separate | generated | Java Virtual Machine | No | GNU GPL |
MyParser | [75] | LL(*) | Markdown | C++11 | separate | internal | any platform with standard C++11 compiler | No | MIT License |
NLT | [76] | GLR | C#/BNF-like | C# | mixed | mixed | .NET Framework | No | MIT |
ocamlyacc | [77] | LALR(1) | ? | OCaml | mixed | external | all | No | QPL |
olex | [78] | LL(1) | ? | C++ | mixed | generated | all | No | GNU GPL |
Parsec | https://wiki.haskell.org/Parsec] | LL, Backtracking | ? | Haskell | mixed | none | all | No | BSD |
Parse::Yapp | [79] | LALR(1) | ? | Perl | mixed | external | all | No | GNU GPL |
Parser Objects | [80] | LL(k) | ? | Java | mixed | ? | Java Virtual Machine | No | zlib |
PCCTS | [81] | LL | ? | C, C++ | ? | ? | all | No | ? |
PLY | [82] | LALR(1) | BNF | Python | mixed | generated | all | No | MIT License |
PlyPlus | [83] | LALR(1) | EBNF | Python | separate | generated | all | No | MIT License |
PRECC | [84] | LL(k) | ? | C | separate | generated | DOS, POSIX | No | GNU GPL |
QLALR | [85] | LALR(1) | ? | C++ | mixed | external | all | No | GNU GPL |
RPATK | [86] | Recursive descent, Backtracking | BNF | C (no generation, library) | separate | none | all | No | GNU GPL |
SableCC | [87] | LALR(1) | ? | C, C++, C#, Java, OCaml, Python | separate | generated | all | No | GNU LGPL |
SLK | [88] | LL(k) LR(k) LALR(k) | EBNF | C, C++, C#, Java, JavaScript | separate | external | all | No | Proprietary |
SP (Simple Parser) | [89] | Recursive descent | Python | Python | separate | generated | all | No | GNU LGPL |
Spirit | [90] | Recursive descent | ? | C++ | mixed | internal | all | No | Boost |
Sprache | [91] | LL, Backtracking | C# | interpreted | mixed | internal | .NET Framework | No | MIT |
Styx | [92] | LALR(1) | ? | C, C++ | separate | generated | all | No | GNU LGPL |
Sweet Parser | [93] | LALR(1) | ? | C++ | separate | generated | Microsoft Windows | No | zlib |
Tap | [94] | LL(1) | ? | C++ | mixed | generated | all | No | GNU GPL |
TextTransformer | [95] | LL(k) | ? | C++ | mixed | generated | Microsoft Windows | Yes | Proprietary |
TinyPG | [96] | LL(1) | ? | C#, Visual Basic | ? | ? | Microsoft Windows | Yes | CPOL 1.0 |
Toy Parser Generator | [97] | Recursive descent | ? | Python | mixed | generated | all | No | GNU LGPL |
TP Yacc | [98] | LALR(1) | ? | Turbo Pascal | mixed | external | all | Yes | GNU GPL |
UniCC | [99] | LALR(1) | EBNF | C, target-language independent | mixed | generated | POSIX | No | Artistic 2.0 |
Whale | [100] | LR(?), some conjunctive stuff, see Whale Calf | ? | C++ | mixed | external | all | No | Proprietary |
wisent | [101] | LALR(1) | ? | C++, Java | mixed | external | all | No | GNU GPL |
Yacc AT&T/Sun | [102]/[103] | LALR(1) | YACC | C | mixed | external | POSIX | No | CPL & CDDL |
Yacc++ | [104] | LR(1), LALR(1) | YACC | C++, C# | mixed | generated or external | all | No | Proprietary |
Yapps | [105] | LL(1) | ? | Python | mixed | generated | all | No | MIT |
yecc | [106] | LALR(1) | ? | Erlang | separate | generated | all | No | Erlang |
Visual BNF | [107] | LR(1), LALR(1) | ? | C# | separate | generated | .NET Framework | Yes | Proprietary |
YooParse | [108] | LR(1), LALR(1) | ? | C++ | mixed | external | all | No | MIT |
Parse | [109] | 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 | [110] | PEG parser interpreter, Packrat | Python (no generation, interpreted) | mixed | all | MIT |
AustenX | [111] | Packrat (modified) | Java | separate | all | BSD |
Aurochs | [112] | Packrat | C, OCaml, Java | mixed | all | GNU GPL |
CL-peg | [113] | Packrat | Common Lisp | mixed | all | MIT |
Drat! | [114] | Packrat | D | mixed | all | GNU GPL |
Frisby | [115] | Packrat | Haskell | mixed | all | BSD |
grammar::peg | [116] | Packrat | Tcl | mixed | all | BSD |
Grako | [117] | Packrat + Cut + Left Recursion | Python / C++ (beta) | separate | all | BSD |
IronMeta | [118] | Packrat | C# | mixed | Microsoft Windows | BSD |
Katahdin | [119] | Packrat (modified), mutating interpreter | C# | mixed | all | Public domain |
Laja | [120] | 2-phase scannerless top-down backtracking + runtime support | Java | separate | all | GNU GPL |
lars::parser | [121] | Packrat (modified to support left-recursion and resolve grammar ambiguity) | C++ | identical | all | GNU GPL, commercial license available on request |
LPeg | [122] | Parsing Machine | Lua | mixed | all | MIT |
Mouse | [123] | Recursive descent | Java | separate | Java Virtual Machine | Apache License 2.0 |
Narwhal | [124] | Packrat | C | mixed | POSIX, Microsoft Windows | BSD |
Nemerle.Peg | [125] | Recursive descent + Pratt | Nemerle | separate | all | BSD |
neotoma | [126] | Packrat | Erlang | separate | all | MIT |
NPEG | [127] | Recursive descent | C# | mixed | all | MIT |
OMeta | [128] | Packrat (modified, partial memoization) | JavaScript, Squeak, Python | mixed | all | MIT |
PackCC | [129] | Packrat (modified) | C | mixed | all | MIT |
Packrat | [130] | Packrat | Scheme | mixed | all | MIT |
Pappy | [131] | Packrat | Haskell | mixed | all | Proprietary |
parboiled | [132] | Recursive descent | Java, Scala | mixed | Java Virtual Machine | Apache License 2.0 |
Lambda PEG | [133] | Recursive descent | Java | mixed | Java Virtual Machine | Apache License 2.0 |
parsepp | [134] | Recursive descent | C++ | mixed | all | Public domain |
Parsnip | [135] | Packrat | C++ | mixed | Microsoft Windows | GNU GPL |
peg | [136] | Recursive descent | C | mixed | all | MIT |
PEG.js | [137] | Packrat (partial memoization) | JavaScript | mixed | all | MIT |
peg-parser | [138] | PEG parser interpreter | Dylan | separate | all | |
Pegasus | [139] | Recursive descent / Packrat (selectively) | C# | mixed | Microsoft Windows | MIT |
pegc | [140] | Recursive descent | C | mixed | all | Public domain |
PetitParser | [141] | Packrat | Smalltalk, Java, Dart | mixed | all | MIT |
PEGTL | [142] | Recursive descent | C++11 | mixed | all | MIT |
PGE | Parser Grammar Engine | Hybrid recursive descent / operator precedence[2] | Parrot bytecode | mixed | Parrot virtual machine | Artistic 2.0 |
PyPy rlib | [143] | Packrat | Python | mixed | all | MIT |
pyPEG | [144] | PEG parser interpreter, Packrat | Python | mixed | all | GNU GPL |
Rats! | [145] | Packrat | Java | mixed | Java Virtual Machine | GNU LGPL |
Spirit2 | [146] | Recursive descent | C++ | mixed | all | Boost |
textX | [147] | PEG parser interpreter, Packrat | Python (no generation, interpreted) | separate | all | MIT |
Treetop | [148] | Recursive descent | Ruby | mixed | all | MIT |
Yard | [149] | Recursive descent | C++ | mixed | all | MIT or Public domain |
Waxeye | [150] | Packrat | C, Java, JavaScript, Python, Ruby, Scheme | separate | all | MIT |
PHP PEG | [151] | ? (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 | [152] | Earley | YACC variant | C | mixed | external | all | No | GNU GPL |
APaGeD | [153] | GLR, LALR(1), LL(k) | ? | D | mixed | generated | all | No | Artistic |
Bison | [154] | LALR(1), LR(1), IELR(1), GLR | YACC | C, C++, Java, XML | mixed (except XML) | external | all | No | GNU GPL |
DMS Software Reengineering Toolkit | [155] | GLR | ? | Parlanse | mixed | generated | Microsoft Windows | No | Proprietary |
DParser | [156] | Scannerless GLR | ? | C | mixed | scannerless | POSIX | No | BSD |
Dypgen | [157] | runtime-extensible GLR | ? | OCaml | mixed | generated | all | No | CeCILL-B |
E3 | [158] | Earley | ? | OCaml | mixed | external, or scannerless | all | No | ? |
Elkhound | [159] | GLR | ? | C++, OCaml | mixed | external | all | No | BSD |
eu.h8me.Parsing | [160] | GLR | ? | N/A (state machine is runtime generated) | separate | external | .NET Framework | No | BSD |
GDK | [161] | LALR(1), GLR | ? | C, Lex, Haskell, HTML, Java, Object Pascal, Yacc | mixed | generated | POSIX | No | MIT |
Happy | [162] | LALR, GLR | ? | Haskell | mixed | external | all | No | BSD |
Hime Parser Generator | [163] | GLR | ? | C#, Java | separate | generated | .NET Framework, Java Virtual Machine | No | GNU LGPL |
IronText Library | [164] | LALR(1), GLR | C# | C# | mixed | generated or external | .NET Framework | No | Apache License 2.0 |
Jison | [165] | LALR(1), LR(0), SLR(1) | YACC | JavaScript, C#, PHP | mixed | generated | all | No | MIT |
Laja | [166] | Scannerless, two phase | Laja | Java | separate | scannerless | all | No | GNU GPL |
ModelCC | [167] | Earley | Annotated class model | Java | generated | generated | all | No | BSD |
P1 | [168] | Combinators | BNF-like | OCaml | mixed | external, or scannerless | all | No | ? |
P3 | [169] | Earley/combinators | BNF-like | OCaml | mixed | external, or scannerless | all | No | ? |
P4 | [170] | Earley/combinators, infinitary CFGs | BNF-like | OCaml | mixed | external, or scannerless | all | No | ? |
Scannerless Boolean Parser | [171] | Scannerless GLR (Boolean grammars) | ? | Haskell, Java | separate | scannerless | Java Virtual Machine | No | BSD |
SDF/SGLR | [172] | Scannerless GLR | SDF | C, Java | separate | scannerless | all | Yes | BSD |
SmaCC | [173] | GLR(1), LALR(1), LR(1) | ? | Smalltalk | mixed | internal | all | Yes | MIT |
SPARK | [174] | Earley | ? | Python | mixed | external | all | No | MIT |
Tom | [175] | GLR | ? | C | generated | none | all | No | "No licensing or copyright restrictions" |
UltraGram | [176] | LALR, LR, GLR | ? | C++, C#, Java, Visual Basic .NET | separate | generated | Microsoft Windows | Yes | Proprietary |
Wormhole | [177] | Pruning, LR, GLR, Scannerless GLR | ? | C, Python | mixed | scannerless | Microsoft Windows | No | MIT |
Whale Calf | [178] | General tabular, SLL(k), Linear normal form (Conjunctive grammars), LR, Binary normal form (Boolean grammars) | ? | C++ | separate | external | all | No | Proprietary |
See also
References
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found. "PGE rules provide the full power of recursive descent parsing and operator precedence parsing."