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
Dolphin [6] DFA C++ separate all Proprietary
flex [7] DFA table driven C, C++ mixed all BSD
gelex [8] DFA Eiffel mixed Eiffel MIT
golex [9] DFA Go mixed Go BSD-style
gplex [10] DFA C# mixed .NET CLR BSD-like
JFlex [11] DFA Java mixed Java Virtual Machine GNU GPL
JLex [12] DFA Java mixed Java Virtual Machine BSD-like [13]
lex [14] DFA C mixed POSIX Proprietary, CDDL
lexertl [15] DFA C++ all GNU LGPL
Quex [16] DFA direct code C, C++ mixed all GNU LGPL
Ragel [17] DFA C, C++, D, Go, Java, Objective-C, Ruby mixed all GNU GPL
re2c [18] DFA direct code C mixed all Public domain
Russ Cox's regular expression implementations [19] DFA, NFA Bytecode, x86 assembly language, interpreted separate all MIT

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 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
Eto.Parse [39] LL(k) BNF, EBNF or C# N/A (state machine is runtime generated) separate internal .NET Framework No MIT
eyapp [40] LALR(1)  ? Perl mixed external or generated all No Perl
Frown [41] LALR(k)  ? Haskell 98 mixed external all No GNU GPL
geyacc [42] LALR(1)  ? Eiffel mixed external all No MIT
GOLD [43] 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 [44] LALR(1) YACC C# separate external Microsoft Windows Yes BSD
Grammatica [45] LL(k) BNF dialect C#, Java separate generated Java Virtual Machine No GNU LGPL
HiLexed [46] LL(*) EBNF or Java Java separate internal Java Virtual Machine No GNU LGPL
Hime Parser Generator [47] LR(1), LALR(1), LR(0) BNF dialect C# separate generated .NET Framework No GNU LGPL
Hyacc [48] LR(1), LALR(1), LR(0) YACC C mixed external all No GNU GPL
Irony [49] LALR(1) C# N/A (state machine is runtime generated) separate internal .NET Framework Yes MIT
iyacc [50] LALR(1) YACC Icon mixed external all No GNU GPL
jacc [51] LALR(1)  ? Java mixed external Java Virtual Machine No BSD
JavaCC [52] LL(k) EBNF Java, C++, JavaScript (via GWT compiler)[1] mixed generated Java Virtual Machine Yes BSD
jay [53] LALR(1) YACC C#, Java mixed none Java Virtual Machine No BSD
JFLAP [54] LL(1), LALR(1)  ? Java  ?  ? Java Virtual Machine Yes  ?
JetPAG [55] LL(k)  ? C++ mixed generated all No GNU GPL
JS/CC [56] LALR(1) EBNF JavaScript, JScript, ECMAScript mixed internal all Yes Artistic
KDevelop-PG-Qt [57] LL(1), Backtracking, Shunting yard  ? C++ mixed generated or external all, KDE No GNU LGPL
Kelbt [58] Backtracking LALR(1)  ? C++ mixed generated POSIX No GNU GPL
kmyacc [59] LALR(1)  ? C, Java, Perl, JavaScript mixed external all No GNU GPL
Lapg [60] LALR(1)  ? C, C++, C#, Java, JavaScript mixed generated Java Virtual Machine No GNU GPL
Lemon [61] LALR(1)  ? C mixed external all No Public domain
LEPL [62] Recursive descent Python Python (no generation, library) separate none all No MPL/GNU LGPL
Lime [63] LALR(1)  ? PHP mixed external all No GNU GPL
LISA [64] LR(?), LL(?), LALR(?), SLR(?)  ? Java mixed generated Java Virtual Machine Yes Public domain
LLgen [65] LL(1)  ? C mixed external POSIX No BSD
LLnextgen [66] LL(1)  ? C mixed external all No GNU GPL
LLLPG [67] LL(k) + syntactic and semantic predicates ANTLR-like C# mixed generated (?) .NET Framework, Mono Visual Studio GNU LGPL
LPG [68] Backtracking LALR(k)  ? Java mixed generated Java Virtual Machine No EPL
Menhir [69] LR(1)  ? OCaml mixed generated all No QPL
ML-Yacc [70] LALR(1)  ? ML mixed external all No  ?
Monkey [71] LR(1)  ? Java separate generated Java Virtual Machine No GNU GPL
More Than Parsing [72] LL(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
MyParser [74] LL(*) Markdown C++11 separate internal any platform with standard C++11 compiler No MIT License
NLT [75] GLR C#/BNF-like C# mixed mixed .NET Framework No MIT
ocamlyacc [76] LALR(1)  ? OCaml mixed external all No QPL
olex [77] LL(1)  ? C++ mixed generated all No GNU GPL
Parsec [78] LL, Backtracking  ? Haskell mixed none all No BSD
Parse::Yapp [79] LALR(1)  ? Perl mixed external all No GNU GPL
Parser Objects  ? LL(k)  ? Java mixed  ? Java Virtual Machine No zlib
PCCTS [80] LL  ? C, C++  ?  ? all No  ?
PLY [81] LALR(1) BNF Python mixed generated all No MIT License
PlyPlus [82] LALR(1) EBNF Python separate generated all No MIT License
PRECC [83] LL(k)  ? C separate generated DOS, POSIX No GNU GPL
QLALR [84] LALR(1)  ? C++ mixed external all No GNU GPL
RPATK [85] Recursive descent, Backtracking BNF C (no generation, library) separate none all No GNU GPL
SableCC [86] LALR(1)  ? C, C++, C#, Java, OCaml, Python separate generated all No GNU LGPL
Simple Parser [87] Recursive descent Python Python separate generated all No GNU LGPL
SLK [88] LL(k) LR(k) EBNF C, C++, C#, Java separate external all No Proprietary
Spirit [89] Recursive descent  ? C++ mixed internal all No Boost
Sprache [90] LL, Backtracking C# interpreted mixed internal .NET Framework No MIT
Styx [91] LALR(1)  ? C, C++ separate generated all No GNU LGPL
Sweet Parser [92] LALR(1)  ? C++ separate generated Microsoft Windows No zlib
Tap [93] LL(1)  ? C++ mixed generated all No GNU GPL
TextTransformer [94] LL(k)  ? C++ mixed generated Microsoft Windows Yes Proprietary
TinyPG [95] LL(1)  ? C#, Visual Basic  ?  ? Microsoft Windows Yes CPOL 1.0
Toy Parser Generator [96] Recursive descent  ? Python mixed generated all No GNU LGPL
TP Yacc [97] LALR(1)  ? Turbo Pascal mixed external all Yes GNU GPL
UniCC [98] LALR(1) EBNF C, target-language independent mixed generated POSIX No Artistic 2.0
Whale [99] LR(?), some conjunctive stuff, see Whale Calf  ? C++ mixed external all No Proprietary
wisent [100] LALR(1)  ? C++, Java mixed external all No GNU GPL
Yacc (AT&T)/Sun [101]/[102] LALR(1) YACC C mixed external POSIX No CPL & CDDL
Yacc++ [103] LR(1), LALR(1) YACC C++, C# mixed generated or external all No Proprietary
Yapps [104] LL(1)  ? Python mixed generated all No MIT
yecc [105] LALR(1)  ? Erlang separate generated all No Erlang
Visual BNF [106] LR(1), LALR(1)  ? C# separate generated .NET Framework Yes Proprietary
YooParse [107] LR(1), LALR(1)  ? C++ mixed external all No MIT
Parse [108] 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 [109] PEG parser interpreter, Packrat Python mixed all MIT
AustenX [110] Packrat (modified) Java separate all BSD
Aurochs [111] Packrat C, OCaml, Java mixed all GNU GPL
CL-peg [112] Packrat Common Lisp mixed all MIT
Drat! [113] Packrat D mixed all GNU GPL
Frisby [114] Packrat Haskell mixed all BSD
grammar::peg [115] Packrat Tcl mixed all BSD
Grako [116] Packrat + Cut + Left Recursion Python / C++ (beta) separate all BSD
IronMeta [117] Packrat C# mixed Microsoft Windows BSD
Katahdin [118] Packrat (modified), mutating interpreter C# mixed all Public domain
Laja [119] 2-phase scannerless top-down backtracking + runtime support Java separate all GNU GPL
lars::parser [120] Packrat (modified to support left-recursion and resolve grammar ambiguity) C++ identical all GNU GPL, commercial license available on request
LPeg [121] Parsing Machine Lua mixed all MIT
Mouse [122] Recursive descent Java separate Java Virtual Machine Apache License 2.0
Narwhal [123] Packrat C mixed POSIX, Microsoft Windows BSD
Nemerle.Peg [124] Recursive descent + Pratt Nemerle separate all BSD
neotoma [125] Packrat Erlang separate all MIT
NPEG [126] Recursive descent C# mixed all MIT
OMeta [127] Packrat (modified) JavaScript, Squeak, Python mixed all MIT
PackCC [128] Packrat (modified) C mixed all MIT
Packrat [129] Packrat Scheme mixed all MIT
Pappy [130] Packrat Haskell mixed all Proprietary
parboiled [131] Recursive descent Java, Scala mixed Java Virtual Machine Apache License 2.0
Lambda PEG [132] Recursive descent Java mixed Java Virtual Machine Apache License 2.0
parsepp [133]  ? C++ mixed all Public domain
Parsnip [134] Packrat C++ mixed Microsoft Windows GNU GPL
peg [135] Recursive descent C mixed all MIT
PEG.js [136] Packrat JavaScript mixed all MIT
peg-parser [137] PEG parser interpreter Dylan separate all
Pegasus [138] Recursive descent / Packrat (selectively) C# mixed Microsoft Windows MIT
pegc [139]  ? C mixed all Public domain
PetitParser [140] Packrat Smalltalk, Java, Dart mixed all MIT
PEGTL [141] 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 [142] Packrat Python mixed all MIT
pyPEG [143] PEG parser interpreter, Packrat Python mixed all GNU GPL
Rats! [144] Packrat Java mixed Java Virtual Machine GNU LGPL
Spirit2 [145] Recursive descent C++ mixed all Boost
Treetop [146] Recursive descent Ruby mixed all MIT
Yard [147] Recursive descent C++ mixed all MIT or Public domain
Waxeye [148] Packrat C, Java, JavaScript, Python, Ruby, Scheme separate all MIT
PHP PEG [149]  ? (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 [150] Earley  ? C mixed external all No GNU GPL
APaGeD [151] GLR, LALR(1), LL(k)  ? D mixed generated all No Artistic
Bison [152] LALR(1), LR(1), IELR(1), GLR YACC C, C++, Java mixed external all No GNU GPL
DMS Software Reengineering Toolkit [153] GLR  ? Parlanse mixed generated Microsoft Windows No Proprietary
DParser [154] Scannerless GLR  ? C mixed scannerless POSIX No BSD
Dypgen [155] runtime-extensible GLR  ? OCaml mixed generated all No CeCILL-B
E3 [156] Earley  ? OCaml mixed external, or scannerless all No  ?
Elkhound [157] GLR  ? C++, OCaml mixed external all No BSD
eu.h8me.Parsing [158] GLR  ? N/A (state machine is runtime generated) separate external .NET Framework No BSD
GDK [159] LALR(1), GLR  ? C, Lex, Haskell, HTML, Java, Object Pascal, Yacc mixed generated POSIX No MIT
Happy [160] LALR, GLR  ? Haskell mixed external all No BSD
Hime Parser Generator [161] GLR  ? C# separate generated .NET Framework No GNU LGPL
IronText Library [162] LALR(1), GLR C# C# mixed generated or external .NET Framework No Apache License 2.0
Jison [163] LALR(1), LR(0), SLR(1) YACC JavaScript, C#, PHP mixed generated all No MIT
Laja [164] Scannerless, two phase Laja Java separate scannerless all No GNU GPL
ModelCC [165] Earley Annotated class model Java generated generated all No BSD
P1 [166] Combinators BNF-like OCaml mixed external, or scannerless all No  ?
P3 [167] Earley/combinators BNF-like OCaml mixed external, or scannerless all No  ?
P4 [168] Earley/combinators, infinitary CFGs BNF-like OCaml mixed external, or scannerless all No  ?
Scannerless Boolean Parser [169] Scannerless GLR (Boolean grammars)  ? Haskell, Java separate scannerless Java Virtual Machine No BSD
SDF/SGLR [170] Scannerless GLR SDF C, Java separate scannerless all Yes BSD
SmaCC [171] GLR(1), LALR(1), LR(1)  ? Smalltalk mixed internal all Yes MIT
SPARK [172] Earley  ? Python mixed external all No MIT
Tom [173] GLR  ? C generated none all No "No licensing or copyright restrictions"
UltraGram [174] LALR, LR, GLR  ? C++, C#, Java, Visual Basic .NET separate generated Microsoft Windows Yes Proprietary
Wormhole [175] Pruning, LR, GLR, Scannerless GLR  ? C, Python mixed scannerless Microsoft Windows No MIT
Whale Calf [176] 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]