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++, Assembly | 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++, Java | 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, Object Pascal/Delphi, Modula-2, Oberon, Ruby, Unicon, Visual Basic .NET | mixed | generated | Java Virtual Machine, .NET Framework, Microsoft Windows, POSIX (depends on output language) | 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 | 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 |
| GGLL | LL(1) | Graph | Java | mixed | generated | Windows | Yes | 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 |
| pest | Recursive descent | Rust | separate | all | MPL |
| 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 |
| Syntax | LALR(1), LR(0), SLR(1) CLR(1) LL(1) | JSON/YACC | JavaScript, Python, PHP, Ruby | 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 |
| yaep | Earley | yacc like | C | mixed | external | all | No | LGPL |
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 11/26/2016. The text is available under the Creative Commons Attribution/Share Alike but additional terms may apply for the media files.