Comparison of parser generators

From Wikipedia, the free encyclopedia
Jump to: navigation, search

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

Regular languages[edit]

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[edit]

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[edit]

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[edit]

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[edit]

References[edit]

  1. ^ "Building parsers for the web with JavaCC & GWT (Part one)". Chris Ainsley. Retrieved 2014-05-04. 
  2. ^ "Parrot: Grammar Engine". The Parrot Foundation. 2011.  "PGE rules provide the full power of recursive descent parsing and operator precedence parsing."

External links[edit]