Comparison of parser generators
Appearance
This is a list of notable parsing systems.
Chart Key
The following key describes the columns used in the comparison chart below.
Table Column | Description |
---|---|
Parser Algorithm | Each parsing system implements a special algorithm for analyzing a token stream and building a tree structure which corresponds to the syntax of the language as defined by a grammar. The different parsing algorithms are: LALR, LR(1), GLR, and LL. |
Output Languages | Most parser generators output source code in one or more specific programming languages. This source code is used in the construction of the compiler, interpreter or translator. |
Grammar/Code | If the grammar and source code are "mixed", the developer's source code is directly embedded into the grammar. This is the approach typically used by compiler-compilers. If "separated", the grammar and source-code are developed separately. |
Lexer | The lexer is used to read characters and identify tokens and pass them to the parser. Lexers can be generated by the parser development software, a separate lexer generator or hand coded. |
Development Platform | This is the required platform and/or operating system required to use the parser development software. |
IDE | Some products feature an integrated development environment. |
License | This column indicates the type end-user license offered by the author of the product. |
Comparison Charts
Product | Website | Parsing Algorithm | Output Languages | Grammar / Code | Lexer | Development Platform | IDE | License |
---|---|---|---|---|---|---|---|---|
ACCENT | [1] | Earley | C | Mixed | External | All | no | GNU GPL |
ANTLR | [2] | LL(*) | C#, Java, Python | Mixed | Generated | JVM | yes | BSD |
AnaGram | [3] | LALR(1) | C, C++ | Mixed | Generated | Win32 | ? | Proprietary |
APaGeD | [4] | GLR, LALR(1), LL(k) | D | Mixed | Generated | All | no | Artistic |
APG | [5] | Recursive Descent | C, C++ | Separate | None | All | no | GNU GPL |
Aurochs | [6] | Packrat | C, Ocaml, Java | Mixed | Generated | All | no | GNU GPL |
Beaver | [7] | LALR | Java | Mixed | External | JVM | no | BSD |
Bison | [8] | LALR, GLR | C, C++ | Mixed | External | All | no | GNU GPL |
Bison++ | [9] | LALR(1) | C++ | Mixed | External | POSIX | No | GNU GPL |
Bisonc++ | [10] | LALR(1) | C++ | Mixed | External | POSIX | No | GNU GPL |
BtYacc | [11] | LALR | C++ | Mixed | External | All | no | Public domain |
BYACC | [12] | LALR | C | Mixed | External | All | no | Public domain |
BYACC/J | [13] | LALR | C, Java | Mixed | External (JFlex) | All | no | Public domain |
CL-peg | [14] | Packrat | Common Lisp | Mixed | Generated | All | no | MIT |
CL-Yacc | [15] | LALR(1) | Common Lisp | Mixed | External | All | no | MIT |
Coco/R | [16] | LL(k) | C, C++, C#, F#, Java, Ada, Pascal, Modula-2, Oberon, Ruby, Unicon, Visual Basic .NET | Mixed | Generated | JVM, .NET | no | GNU GPL |
CppCC | [17] | LL(k) | C++ | Mixed | Generated | POSIX | no | GNU GPL |
CSP | [18] | LR(1) | C++ | Separate | Generated | POSIX | no | Apache License V2.0 |
CSTools | [19] | LALR | C# | Mixed | Generated | .NET | no | ? |
CUP | [20] | LALR | Java | Mixed | External (JLex) | JVM | no | GNU GPL |
DMS Software Reengineering Toolkit | [21] | GLR | Parlanse | Mixed | Generated | Win32 | no | Proprietary |
DParser | [22] | Scannerless GLR | C | Mixed | Generated | POSIX | no | BSD |
Dragon | [23] | LR(1), LALR | C++, Java | Separate | Generated | All | no | GNU GPL |
Drat! | [24] | Packrat | D | Mixed | Generated | All | no | GNU GPL |
Elkhound | [25] | GLR | C++, OCaml | Mixed | External | All | no | BSD |
eli | [26] | LALR | C, others | Mixed | Generated | POSIX | no | GNU GPL, GNU LGPL |
Essence | [27] | LR | Scheme (Scheme 48) | Mixed | External | All | no | BSD |
eyapp | [28] | LALR(1) | Perl | Mixed | External | All | no | Perl |
F# PegParser | [29] | Packrat | F# | Mixed | Generated | .NET | no | ? |
Frisby | [30] | Packrat | Haskell | Mixed | Generated | All | no | BSD |
Frown | [31] | LALR(k) | Haskell 98 | Mixed | External | All | no | GNU GPL |
GDK | [32] | LALR(1), GLR | C, Delphi, Lex, Haskell, HTML, Java, Yacc | Mixed | Generated | POSIX | No | MIT |
GOLD | [33] | LALR | x86 assembly language, ANSI C, C#, D, Delphi, Java, Pascal, Python, Visual Basic 6, Visual Basic .NET, Visual C++ | Separate | Generated | Win32 | yes | Freeware |
grammar::peg | [34] | Packrat | TCL | Mixed | Generated | All | no | BSD |
Grammatica | [35] | LL(k) | C#, Java | Separate | Generated | JVM | no | GNU LGPL |
Happy | [36] | LALR, GLR | Haskell | Mixed | External | All | no | BSD |
HiLexed | [37] | LL(k) | Java | Separate | Internal | JVM | no | GNU LGPL |
Hyacc | [38] | LR(1) | C | Mixed | External | All | no | GNU GPL |
jacc | [39] | LALR | Java | Mixed | External | JVM | no | BSD |
JavaCC | [40] | LL(k) | Java | Mixed | Generated | JVM | yes | BSD |
jay | [41] | LALR | C#, Java | Mixed | None | All | no | BSD |
JetPAG | [42] | LL(k) | C++ | Mixed | Generated | All | no | GNU GPL |
JS/CC | [43] | LALR(1) | JavaScript, JScript, ECMAScript | Mixed | Internal | All | yes | Artistic |
Kelbt | [44] | Backtracking LALR(1) | C++ | Mixed | Generated | POSIX | no | GNU GPL |
kmyacc | [45] | LALR(1) | C, Java, Perl, JavaScript | Mixed | External | All | no | GNU GPL |
Lapg | [46] | LALR | Java, Javascript, C, C++, C# | Mixed | Generated | JVM | no | GNU GPL |
LEMON | [47] | LALR | C | Mixed | External | All | no | Public domain |
Lime | [48] | LALR(1) | PHP | Mixed | External | All | no | GNU GPL |
LISA | [49] | LR, LL, LALR, SLR | Java | Mixed | Generated | JVM | yes | Public Domain |
LPeg | [50] | Parsing Machine | Lua | Mixed | Generated | All | no | MIT |
LPG | [51] | Backtracking LALR | Java | Mixed | Generated | JVM | no | EPL |
LLgen | [52] | LL(1) | C | Mixed | External | POSIX | no | BSD |
LLnextgen | [53] | LL(1) | C | Mixed | External | POSIX | no | GNU GPL |
LRGen | [54] | LR(1) | C++ | Separate | Generated | Win32 | no | Proprietary |
Menhir | [55] | LR(1) | OCaml | Mixed | Generated | All | no | QPL |
Mini Parser Generator | [56] | ? | Python | Mixed | Generated | All | no | GNU LGPL |
ML-Yacc | [57] | LALR(1) | ML | Mixed | External | All | no | ? |
Monkey | [58] | LR(1) | Java | Separate | Generated | JVM | no | GNU GPL |
More Than Parsing | [59] | LL(1) | Java | Separate | Generated | JVM | no | GNU GPL |
MyL Programming Language | [60] | ? | C#, Delphi, Java, JScript, SQL | Mixed | Generated | Win32 | no | Public domain |
Narwhal | [61] | Packrat | C | Mixed | Generated | POSIX, Win32 | no | BSD |
ocamlyacc | [62] | LALR(1) | OCaml | Mixed | External (Ocamllex) | All | no | QPL |
olex | [63] | LL(1) | C++ | Mixed | Generated | All | no | GNU GPL |
Packrat | [64] | Packrat | Scheme | Mixed | Generated | All | no | MIT |
Pappy | [65] | Packrat | Haskell | Mixed | Generated | All | no | Proprietary |
Parsec (parser) | [66] | GLR | Haskell | Mixed | None | All | no | BSD |
Parse::Yapp | [67] | LALR(1) | Perl | Mixed | External | All | no | GNU GPL |
Parser Objects | ? | LL(k) | Java | Mixed | ? | JVM | no | zlib |
Parsnip | [68] | Packrat | C++ | Mixed | Generated | Win32 | no | GNU GPL |
peg | [69] | Recursive Descent (PEG) | C, C++ | Mixed | Generated | All | no | MIT |
PEGTL | [70] | Recursive Descent (PEG) | C++0x | Mixed | Internal | POSIX | no | MIT |
PGE | ? | Recursive Descent (PEG) | Parrot bytecode | Mixed | Generated | All | no | ? |
PyPy rlib | [71] | Packrat | Python | Mixed | Generated | All | no | MIT |
PLY | [72] | LALR(1) | Python | Mixed | Generated | All | no | GNU GPL |
PRECC | [73] | LL(k) | C | Separate | Generated | MS-DOS, POSIX | no | GNU GPL |
Rats! | [74] | PEG | Java | Mixed | Generated | JVM | no | GNU LGPL |
QLALR | [75] | LALR(1) | C++ | Mixed | External | All | no | GNU GPL |
SableCC | [76] | LALR | Java, C, C++, C#, OCaml, Python | Separate | Generated | All | no | GNU LGPL |
Scannerless Boolean Parser | [77] | Scannerless GLR (Boolean Grammars) | Java, Haskell | Separate | Generated | All | no | BSD |
SmaCC | [78] | LALR(1), LR(1) | Smalltalk | Mixed | Internal | All | yes | MIT |
SLK | [79] | LL(k) | C, C++, C#, Java | Separate | External | All | no | Proprietary |
SPARK | [80] | Earley | Python | Mixed | External | All | no | MIT |
Spirit | [81] | LL(k) | C++ | Mixed | Internal | All | no | Boost |
Styx | [82] | ? | C | Mixed | Generated | ? | All | GNU LGPL |
Tap | [83] | LL(1) | C++ | Mixed | Generated | All | no | GNU GPL |
TextTransformer | [84] | LL(k) | C++ | Mixed | Generated | Win32 | yes | Proprietary |
Tom | [85] | LR(k) (Tomita) | C | Generated | None | All | no | Proprietary |
Toy Parser Generator | [86] | Recusive Descent | Python | Mixed | Generated | All | no | GNU LGPL |
TP Yacc | [87] | LALR(1) | Turbo Pascal | Mixed | External | All | yes | GNU GPL |
Treetop | [88] | Recusive Descent (PEG) | Ruby | Mixed | Generated | All | no | ? |
Yacc (AT&T) | ? | LALR | C, others | Mixed | External | POSIX | no | ? |
Yacc++ | [89] | LR(k)/LALR(k) | C++, C# | Mixed | Generated or External | All | no | Proprietary |
Yapps | [90] | LL(1) | Python | Mixed | Generated | All | no | MIT |
Yard | [91] | Recursive Descent (PEG) | C++ | Mixed | Generated | All | no | MIT or Public Domain |
yecc | [92] | LALR(1) | Erlang | Separate | Generated | All | no | Erlang |
Visual BNF | [93] | LR(1)/LALR(1) | C# | Separate | Generated | .NET | yes | Proprietary |
Visual Parse++ | [94] | LALR | C, C++, C#, Java | Separate | Generated | Win32 | yes | Proprietary |
YooParse | [95] | LR | C++ | Mixed | External (YooLex) | All | no | MIT |
Wisent | [96] | LALR(1) | C++, Java | Mixed | External | JVM | All | GNU GPL |
Product | Website | Parsing Algorithm | Output Languages | Grammar / Code | Lexer | Development Platform | IDE | License |