Comparison of parser generators
This is a list of notable lexer generators and parser generators for various language classes.
Regular languages
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 | BSD |
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, Objective C, D, Go, Ruby, Java | mixed | all | GNU GPL, MIT[1][1] |
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(*)[2] | EBNF | C#, Java, Python, JavaScript, C++, Swift, Go | 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, Swift, 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 | BSD-like |
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 | BSD |
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)[3] | 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 | MIT-like |
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 |
UltraGram | LALR(n), LR(n), GLR | BNF | C++, Java, C#, Visual Basic .NET | separate | external | Microsoft Windows | Yes | Public domain |
UniCC | LALR(1) | EBNF | C, target-language independent | mixed | generated | POSIX | No | Artistic 2.0 |
UrchinCC | LL(1) | ? | Java | ? | generated | Java Virtual Machine | No | ? |
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 |
Canopy | Packrat | Java, JavaScript, Python, Ruby | separate | 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 |
lug | Parsing Machine | C++17 | mixed | all | MIT |
Mouse | Recursive descent | Java | separate | Java Virtual Machine | Apache License 2.0 |
Narwhal | Packrat | C | mixed | POSIX, Microsoft Windows | BSD |
Nearley | Earley | JavaScript | mixed | all | MIT |
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[4] | 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, C#, Rust | 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 |
---|---|---|---|---|---|
LuZc | delta chain | modular | Conjunctive, not complimentary | POSIX | 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
- ↑ http://www.colm.net/open-source/ragel/
- ↑ "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.
The text is licensed under Creative Commons - Attribution - Sharealike.
Additional terms may apply for the media files.