Comparison of parser generators
This is a list of notable lexer generators and parser generators for various language classes.
Regular languages
See also: List of lexer generators
| Name | Lexer algorithm | Output languages | Grammar, code | Development platform | License | 
|---|---|---|---|---|---|
| Alex | DFA | Haskell | mixed | all | BSD | 
| AustenX | DFA | Java | separate | all | BSD | 
| C# Flex | DFA | C# | mixed | .NET CLR | GNU GPL | 
| C# Lex | DFA | C# | mixed | .NET CLR | ? | 
| CookCC | DFA | Java | mixed | Java Virtual Machine | BSD | 
| DFAlex | DFA | no code generation required | Java | Java | Apache License 2.0 | 
| Dolphin | DFA | C++ | separate | all | Proprietary | 
| flex | DFA table driven | C, C++ | mixed | all | BSD | 
| gelex | DFA | Eiffel | mixed | Eiffel | MIT | 
| golex | DFA | Go | mixed | Go | BSD-style | 
| gplex | DFA | C# | mixed | .NET CLR | BSD-like | 
| JFlex | DFA | Java | mixed | Java Virtual Machine | GNU GPL | 
| JLex | DFA | Java | mixed | Java Virtual Machine | BSD-like | 
| lex | DFA | C | mixed | POSIX | Proprietary, CDDL | 
| lexertl | DFA | C++ | all | GNU LGPL | |
| Quex | DFA direct code | C, C++ | mixed | all | GNU LGPL | 
| Ragel | DFA | C, C++, D, Go, Java, Objective-C, Ruby | mixed | all | GNU GPL | 
| re2c | DFA direct code | C | mixed | all | Public domain | 
Deterministic context-free languages
| Name | Parsing algorithm | Input grammar notation | Output languages | Grammar, code | Lexer | Development platform | IDE | License | 
|---|---|---|---|---|---|---|---|---|
| ANTLR4 | ALL(*)[1] | EBNF | C#, Java, Python, JavaScript | mixed | generated | Java Virtual Machine | Yes | BSD | 
| ANTLR3 | LL(*) | EBNF | ActionScript, Ada95, C, C++, C#, Java, JavaScript, Objective-C, Perl, Python, Ruby | mixed | generated | Java Virtual Machine | Yes | BSD | 
| APG | Recursive descent, Backtracking | ABNF | C, C++, JavaScript, Java | separate | none | all | No | GNU GPL | 
| AXE | Recursive descent | AXE/C++ | C++11 | mixed | none | any platform with standard C++11 compiler | No | Boost | 
| Beaver | LALR(1) | EBNF | Java | mixed | external | Java Virtual Machine | No | BSD | 
| Bison | LALR(1), LR(1), IELR(1), GLR | ? | C, C++ | mixed | external | all | No | GNU GPL | 
| Bison++[note 1] | LALR(1) | ? | C++ | mixed | external | POSIX | No | GNU GPL | 
| Bisonc++ | LALR(1) | ? | C++ | mixed | external | POSIX | No | GNU GPL | 
| BtYacc | Backtracking Bottom-up | ? | C++ | mixed | external | all | No | Public domain | 
| byacc | LALR(1) | YACC | C | mixed | external | all | No | Public domain | 
| BYACC/J | LALR(1) | ? | C, Java | mixed | external | all | No | Public domain | 
| CL-Yacc | LALR(1) | Lisp | Common Lisp | mixed | external | all | No | MIT | 
| Coco/R | 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 | LALR(1) | Java annotations | Java | mixed | generated | Java Virtual Machine | No | BSD | 
| CppCC | LL(k) | ? | C++ | mixed | generated | POSIX | No | GNU GPL | 
| CSP | LR(1) | ? | C++ | separate | generated | POSIX | No | Apache License 2.0 | 
| CUP | LALR(1) | ? | Java | mixed | external | Java Virtual Machine | No | GNU GPL | 
| Dragon | LR(1), LALR(1) | ? | C++, Java | separate | generated | all | No | GNU GPL | 
| eli | LALR(1) | ? | C | mixed | generated | POSIX | No | GNU GPL, GNU LGPL | 
| Essence | LR(???) | ? | Scheme 48 | mixed | external | all | No | BSD | 
| Eto.Parse | LL(k) | BNF, EBNF or C# | N/A (state machine is runtime generated) | separate | internal | .NET Framework | No | MIT | 
| eyapp | LALR(1) | ? | Perl | mixed | external or generated | all | No | Perl | 
| Frown | LALR(k) | ? | Haskell 98 | mixed | external | all | No | GNU GPL | 
| geyacc | LALR(1) | ? | Eiffel | mixed | external | all | No | MIT | 
| GOLD | 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 | LALR(1) | YACC | C# | separate | external | Microsoft Windows | Yes | BSD | 
| Grammatica | LL(k) | BNF dialect | C#, Java | separate | generated | Java Virtual Machine | No | GNU LGPL | 
| HiLexed | LL(*) | EBNF or Java | Java | separate | internal | Java Virtual Machine | No | GNU LGPL | 
| Hime Parser Generator | LR(1), LALR(1), LR(0) | BNF dialect | C#, Java | separate | generated | .NET Framework, Java Virtual Machine | No | GNU LGPL | 
| Hyacc | LR(1), LALR(1), LR(0) | YACC | C | mixed | external | all | No | GNU GPL | 
| Irony | LALR(1) | C# | N/A (state machine is runtime generated) | separate | internal | .NET Framework | Yes | MIT | 
| iyacc | LALR(1) | YACC | Icon | mixed | external | all | No | GNU GPL | 
| jacc | LALR(1) | ? | Java | mixed | external | Java Virtual Machine | No | BSD | 
| JavaCC | LL(k) | EBNF | Java, C++, JavaScript (via GWT compiler)[2] | mixed | generated | Java Virtual Machine | Yes | BSD | 
| jay | LALR(1) | YACC | C#, Java | mixed | none | Java Virtual Machine | No | BSD | 
| JFLAP | LL(1), LALR(1) | ? | Java | ? | ? | Java Virtual Machine | Yes | ? | 
| JetPAG | LL(k) | ? | C++ | mixed | generated | all | No | GNU GPL | 
| JS/CC | LALR(1) | EBNF | JavaScript, JScript, ECMAScript | mixed | internal | all | Yes | Artistic | 
| KDevelop-PG-Qt | LL(1), Backtracking, Shunting yard | ? | C++ | mixed | generated or external | all, KDE | No | GNU LGPL | 
| Kelbt | Backtracking LALR(1) | ? | C++ | mixed | generated | POSIX | No | GNU GPL | 
| kmyacc | LALR(1) | ? | C, Java, Perl, JavaScript | mixed | external | all | No | GNU GPL | 
| Lapg | LALR(1) | ? | C, C++, C#, Java, JavaScript | mixed | generated | Java Virtual Machine | No | GNU GPL | 
| Lemon | LALR(1) | ? | C | mixed | external | all | No | Public domain | 
| LEPL | Recursive descent | Python | Python (no generation, library) | separate | none | all | No | MPL/GNU LGPL | 
| Lime | LALR(1) | ? | PHP | mixed | external | all | No | GNU GPL | 
| LISA | LR(?), LL(?), LALR(?), SLR(?) | ? | Java | mixed | generated | Java Virtual Machine | Yes | Public domain | 
| LLgen | LL(1) | ? | C | mixed | external | POSIX | No | BSD | 
| LLnextgen | LL(1) | ? | C | mixed | external | all | No | GNU GPL | 
| LLLPG | LL(k) + syntactic and semantic predicates | ANTLR-like | C# | mixed | generated (?) | .NET Framework, Mono | Visual Studio | GNU LGPL | 
| LPG | Backtracking LALR(k) | ? | Java | mixed | generated | Java Virtual Machine | No | EPL | 
| Menhir | LR(1) | ? | OCaml | mixed | generated | all | No | QPL | 
| ML-Yacc | LALR(1) | ? | ML | mixed | external | all | No | ? | 
| Monkey | LR(1) | ? | Java | separate | generated | Java Virtual Machine | No | GNU GPL | 
| Msta | LALR(k), LR(k) | YACC, EBNF | C, C++ | mixed | external or generated | POSIX, Cygwin | No | GNU GPL | 
| MTP (More Than Parsing) | LL(1) | ? | Java | separate | generated | Java Virtual Machine | No | GNU GPL | 
| MyParser | LL(*) | Markdown | C++11 | separate | internal | any platform with standard C++11 compiler | No | MIT License | 
| NLT | GLR | C#/BNF-like | C# | mixed | mixed | .NET Framework | No | MIT | 
| ocamlyacc | LALR(1) | ? | OCaml | mixed | external | all | No | QPL | 
| olex | LL(1) | ? | C++ | mixed | generated | all | No | GNU GPL | 
| Parsec | LL, Backtracking | ? | Haskell | mixed | none | all | No | BSD | 
| Parse::Yapp | LALR(1) | ? | Perl | mixed | external | all | No | GNU GPL | 
| Parser Objects | LL(k) | ? | Java | mixed | ? | Java Virtual Machine | No | zlib | 
| PCCTS | LL | ? | C, C++ | ? | ? | all | No | ? | 
| PLY | LALR(1) | BNF | Python | mixed | generated | all | No | MIT License | 
| PlyPlus | LALR(1) | EBNF | Python | separate | generated | all | No | MIT License | 
| PRECC | LL(k) | ? | C | separate | generated | DOS, POSIX | No | GNU GPL | 
| QLALR | LALR(1) | ? | C++ | mixed | external | all | No | GNU GPL | 
| RPATK | Recursive descent, Backtracking | BNF | C (no generation, library) | separate | none | all | No | GNU GPL | 
| SableCC | LALR(1) | ? | C, C++, C#, Java, OCaml, Python | separate | generated | all | No | GNU LGPL | 
| SLK | LL(k) LR(k) LALR(k) | EBNF | C, C++, C#, Java, JavaScript | separate | external | all | No | Proprietary | 
| SP (Simple Parser) | Recursive descent | Python | Python | separate | generated | all | No | GNU LGPL | 
| Spirit | Recursive descent | ? | C++ | mixed | internal | all | No | Boost | 
| Sprache | LL, Backtracking | C# | interpreted | mixed | internal | .NET Framework | No | MIT | 
| Styx | LALR(1) | ? | C, C++ | separate | generated | all | No | GNU LGPL | 
| Sweet Parser | LALR(1) | ? | C++ | separate | generated | Microsoft Windows | No | zlib | 
| Tap | LL(1) | ? | C++ | mixed | generated | all | No | GNU GPL | 
| TextTransformer | LL(k) | ? | C++ | mixed | generated | Microsoft Windows | Yes | Proprietary | 
| TinyPG | LL(1) | ? | C#, Visual Basic | ? | ? | Microsoft Windows | Yes | CPOL 1.0 | 
| Toy Parser Generator | Recursive descent | ? | Python | mixed | generated | all | No | GNU LGPL | 
| TP Yacc | LALR(1) | ? | Turbo Pascal | mixed | external | all | Yes | GNU GPL | 
| UniCC | LALR(1) | EBNF | C, target-language independent | mixed | generated | POSIX | No | Artistic 2.0 | 
| Whale | LR(?), some conjunctive stuff, see Whale Calf | ? | C++ | mixed | external | all | No | Proprietary | 
| wisent | LALR(1) | ? | C++, Java | mixed | external | all | No | GNU GPL | 
| Yacc AT&T/Sun | LALR(1) | YACC | C | mixed | external | POSIX | No | CPL & CDDL | 
| Yacc++ | LR(1), LALR(1) | YACC | C++, C# | mixed | generated or external | all | No | Proprietary | 
| Yapps | LL(1) | ? | Python | mixed | generated | all | No | MIT | 
| yecc | LALR(1) | ? | Erlang | separate | generated | all | No | Erlang | 
| Visual BNF | LR(1), LALR(1) | ? | C# | separate | generated | .NET Framework | Yes | Proprietary | 
| YooParse | LR(1), LALR(1) | ? | C++ | mixed | external | all | No | MIT | 
| Parse | LR(1) | BNF in C++ types | ? | ? | none | C++11 compliant compiler | No | MIT | 
| Product | Parsing algorithm | Input grammar notation | Output languages | Grammar, code | Lexer | Development platform | IDE | License | 
Parsing expression grammars, deterministic boolean grammars
| Name | Parsing algorithm | Output languages | Grammar, code | Development platform | License | 
|---|---|---|---|---|---|
| Arpeggio | PEG parser interpreter, Packrat | Python (no generation, interpreted) | mixed | all | MIT | 
| AustenX | Packrat (modified) | Java | separate | all | BSD | 
| Aurochs | Packrat | C, OCaml, Java | mixed | all | GNU GPL | 
| CL-peg | Packrat | Common Lisp | mixed | all | MIT | 
| Drat! | Packrat | D | mixed | all | GNU GPL | 
| Frisby | Packrat | Haskell | mixed | all | BSD | 
| grammar::peg | Packrat | Tcl | mixed | all | BSD | 
| Grako | Packrat + Cut + Left Recursion | Python / C++ (beta) | separate | all | BSD | 
| IronMeta | Packrat | C# | mixed | Microsoft Windows | BSD | 
| Katahdin | Packrat (modified), mutating interpreter | C# | mixed | all | Public domain | 
| Laja | 2-phase scannerless top-down backtracking + runtime support | Java | separate | all | GNU GPL | 
| lars::parser | Packrat (modified to support left-recursion and resolve grammar ambiguity) | C++ | identical | all | GNU GPL, commercial license available on request | 
| LPeg | Parsing Machine | Lua | mixed | all | MIT | 
| Mouse | Recursive descent | Java | separate | Java Virtual Machine | Apache License 2.0 | 
| Narwhal | Packrat | C | mixed | POSIX, Microsoft Windows | BSD | 
| Nemerle.Peg | Recursive descent + Pratt | Nemerle | separate | all | BSD | 
| neotoma | Packrat | Erlang | separate | all | MIT | 
| NPEG | Recursive descent | C# | mixed | all | MIT | 
| OMeta | Packrat (modified, partial memoization) | JavaScript, Squeak, Python | mixed | all | MIT | 
| PackCC | Packrat (modified) | C | mixed | all | MIT | 
| Packrat | Packrat | Scheme | mixed | all | MIT | 
| Pappy | Packrat | Haskell | mixed | all | Proprietary | 
| parboiled | Recursive descent | Java, Scala | mixed | Java Virtual Machine | Apache License 2.0 | 
| Lambda PEG | Recursive descent | Java | mixed | Java Virtual Machine | Apache License 2.0 | 
| parsepp | Recursive descent | C++ | mixed | all | Public domain | 
| Parsnip | Packrat | C++ | mixed | Microsoft Windows | GNU GPL | 
| peg | Recursive descent | C | mixed | all | MIT | 
| PEG.js | Packrat (partial memoization) | JavaScript | mixed | all | MIT | 
| peg-parser | PEG parser interpreter | Dylan | separate | all | |
| Pegasus | Recursive descent / Packrat (selectively) | C# | mixed | Microsoft Windows | MIT | 
| pegc | Recursive descent | C | mixed | all | Public domain | 
| PetitParser | Packrat | Smalltalk, Java, Dart | mixed | all | MIT | 
| PEGTL | Recursive descent | C++11 | mixed | all | MIT | 
| PGE | Hybrid recursive descent / operator precedence[3] | Parrot bytecode | mixed | Parrot virtual machine | Artistic 2.0 | 
| PyPy rlib | Packrat | Python | mixed | all | MIT | 
| pyPEG | PEG parser interpreter, Packrat | Python | mixed | all | GNU GPL | 
| Rats! | Packrat | Java | mixed | Java Virtual Machine | GNU LGPL | 
| Spirit2 | Recursive descent | C++ | mixed | all | Boost | 
| textX | PEG parser interpreter, Packrat | Python (no generation, interpreted) | separate | all | MIT | 
| Treetop | Recursive descent | Ruby | mixed | all | MIT | 
| Yard | Recursive descent | C++ | mixed | all | MIT or Public domain | 
| Waxeye | Packrat | C, Java, JavaScript, Python, Ruby, Scheme | separate | all | MIT | 
| PHP PEG | ? (PEG Parser?) | PHP | mixed | all | BSD | 
General context-free, conjunctive or boolean languages
| Name | Parsing algorithm | Input grammar notation | Output languages | Grammar, code | Lexer | Development platform | IDE | License | 
|---|---|---|---|---|---|---|---|---|
| ACCENT | Earley | YACC variant | C | mixed | external | all | No | GNU GPL | 
| APaGeD | GLR, LALR(1), LL(k) | ? | D | mixed | generated | all | No | Artistic | 
| Bison | LALR(1), LR(1), IELR(1), GLR | YACC | C, C++, Java, XML | mixed (except XML) | external | all | No | GNU GPL | 
| DMS Software Reengineering Toolkit | GLR | ? | Parlanse | mixed | generated | Microsoft Windows | No | Proprietary | 
| DParser | Scannerless GLR | ? | C | mixed | scannerless | POSIX | No | BSD | 
| Dypgen | runtime-extensible GLR | ? | OCaml | mixed | generated | all | No | CeCILL-B | 
| E3 | Earley | ? | OCaml | mixed | external, or scannerless | all | No | ? | 
| Elkhound | GLR | ? | C++, OCaml | mixed | external | all | No | BSD | 
| eu.h8me.Parsing | GLR | ? | N/A (state machine is runtime generated) | separate | external | .NET Framework | No | BSD | 
| GDK | LALR(1), GLR | ? | C, Lex, Haskell, HTML, Java, Object Pascal, Yacc | mixed | generated | POSIX | No | MIT | 
| Happy | LALR, GLR | ? | Haskell | mixed | external | all | No | BSD | 
| Hime Parser Generator | GLR | ? | C#, Java | separate | generated | .NET Framework, Java Virtual Machine | No | GNU LGPL | 
| IronText Library | LALR(1), GLR | C# | C# | mixed | generated or external | .NET Framework | No | Apache License 2.0 | 
| Jison | LALR(1), LR(0), SLR(1) | YACC | JavaScript, C#, PHP | mixed | generated | all | No | MIT | 
| Laja | Scannerless, two phase | Laja | Java | separate | scannerless | all | No | GNU GPL | 
| ModelCC | Earley | Annotated class model | Java | generated | generated | all | No | BSD | 
| P1 | Combinators | BNF-like | OCaml | mixed | external, or scannerless | all | No | ? | 
| P3 | Earley/combinators | BNF-like | OCaml | mixed | external, or scannerless | all | No | ? | 
| P4 | Earley/combinators, infinitary CFGs | BNF-like | OCaml | mixed | external, or scannerless | all | No | ? | 
| Scannerless Boolean Parser | Scannerless GLR (Boolean grammars) | ? | Haskell, Java | separate | scannerless | Java Virtual Machine | No | BSD | 
| SDF/SGLR | Scannerless GLR | SDF | C, Java | separate | scannerless | all | Yes | BSD | 
| SmaCC | GLR(1), LALR(1), LR(1) | ? | Smalltalk | mixed | internal | all | Yes | MIT | 
| SPARK | Earley | ? | Python | mixed | external | all | No | MIT | 
| Tom | GLR | ? | C | generated | none | all | No | "No licensing or copyright restrictions" | 
| UltraGram | LALR, LR, GLR | ? | C++, C#, Java, Visual Basic .NET | separate | generated | Microsoft Windows | Yes | Proprietary | 
| Wormhole | Pruning, LR, GLR, Scannerless GLR | ? | C, Python | mixed | scannerless | Microsoft Windows | No | MIT | 
| Whale Calf | General tabular, SLL(k), Linear normal form (Conjunctive grammars), LR, Binary normal form (Boolean grammars) | ? | C++ | separate | external | all | No | Proprietary | 
Context-sensitive
| Name | Parsing algortihm | Input grammar notation | Boolean grammar capabilities | Development platform | License | 
|---|---|---|---|---|---|
| LuZ | delta chain | modular | Conjunctive, not complimentary | all | proprietary | 
| bnf2xml | recursive descent (is a text filter output is xml) | simple bnf grammar (input matching), output is xml | ? | beta, and not a full fledged EBNF parser | GNU GPLv2 | 
See also
References
- ↑ "Adaptive LL(*) Parsing: The Power of Dynamic Analysis" (PDF). Terence Parr. Retrieved 2016-04-03.
 - ↑ "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."
 
Notes
- ↑ Bison 1.19 fork
 
External links
This article is issued from Wikipedia - version of the Monday, May 02, 2016. The text is available under the Creative Commons Attribution/Share Alike but additional terms may apply for the media files.