Comparison of parser generators: Difference between revisions

Content deleted Content added
No edit summary
Bender the Bot (talk | contribs)
m HTTP to HTTPS for SourceForge
 
Line 1:
{{short description|None}}
{{cleanup-spam}}
{{More citations needed|date=July 2023}}
This is an incompilete '''list of [[compiler-compiler]]s'''.
{| border="0" cellpadding="4" cellspacing="2"
|- bgcolor="#E0E0E0"
| '''Product''' || '''Type''' || '''Output Languages''' || '''Grammar/code''' || '''Lexer''' || '''CC platform''' || '''IDE''' || '''License'''
|- bgcolor="#F0F0F0"
 
This is a list of notable [[lexer generator]]s and [[parser generator]]s for various language classes.
| [http://mehr.sharif.edu/~a_ghasempouri/ AnaGram] || CLR || Pascal || Mixed || Generated || Win32 || yes || Open Source
|- bgcolor="#F8F8F8"
 
== Regular languages ==
[[Regular language]]s are a category of languages (sometimes termed [[Chomsky hierarchy|Chomsky Type 3]]) which can be matched by a state machine (more specifically, by a [[deterministic finite automaton]] or a [[nondeterministic finite automaton]]) constructed from a [[regular expression]]. In particular, a regular language can match constructs like "A follows B", "Either A or B", "A, followed by zero or more instances of B", but cannot match constructs which require consistency between non-adjacent elements, such as "some instances of A followed by the same number of instances of B", and also cannot express the concept of recursive "nesting" ("every A is eventually followed by a matching B"). A classic example of a problem which a regular grammar cannot handle is the question of whether a given string contains correctly nested parentheses. (This is typically handled by a Chomsky Type 2 grammar, also termed a [[context-free grammar]].)
 
{| class="wikitable sortable" style="text-align: center; font-size: 85%; width: auto;"
| [http://www.parsifalsoft.com/ AnaGram] || LALR || ANSI C, C++ || ? || ? || Win32 || yes || Proprietary
|-
|- bgcolor="#F8F8F8"
! Name !!Lexer algorithm !! [[Programming language|Output languages]] !! Grammar, code !! Development platform !! [[Software license|License]]
| [http://accent.compilertools.net/ ACCENT] || GLR || C || Mixed || External (Lex) || All (ANSI C) || no ||Open source (GPL)
|-
|- bgcolor="#F0F0F0"
| Alex || [[Deterministic finite automaton|DFA]] || [[Haskell]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[BSD licenses|BSD]]
| [http://www.antlr.org/ ANTLR] || LL(k) || C++, C#, Java, Python || Mixed || Generated || All (Java) || no || Open source (BSD)
|-
|- bgcolor="#F8F8F8"
| AnnoFlex || [http://beaver.sourceforge.net/[Deterministic Beaverfinite automaton|DFA]] || LALR[[Java ||(programming language)|Java]] || {{D-A|Mixed}} || External {{Some|| All ([[Java) ||virtual nomachine]]}} || Open{{Free}}, source[[BSD (licenses|BSD)]]
|-
|- bgcolor="#F0F0F0"
| Astir|| [[Deterministic finite automaton|DFA]] table driven, with branching || [[C++]] || {{D-P|Only grammar (actioned)}} || {{Yes|All}} || {{Free}}, [[MIT License|MIT]]
| [http://www.gnu.org/software/bison/bison.html Bison] || LALR, GLR || C, C++ || Mixed || External (Flex) || GNU/Linux, Unix, Win32 || no || Open source (GPL)
|-
|- bgcolor="#F8F8F8"
| AustenX || [[Deterministic finite automaton|DFA]] || [[Java (programming language)|Java]] || {{D-P|Separate}} || {{Yes|All}} || {{Free}}, [[BSD licenses|BSD]]
| [http://dickey.his.com/byacc/byacc.html BYACC] || LALR || C || Mixed || External || Unix, Win32 || no || Public ___domain
|-
|- bgcolor="#F0F0F0"
| C# Flex || [[Deterministic finite automaton|DFA]] || [[C Sharp (programming language)|C#]] || {{D-A|Mixed}} || {{Some|[[Common Language Runtime|.NET CLR]]}} || {{Free}}, [[GNU General Public License|GNU GPL]]
| [http://byaccj.sourceforge.net/ BYACC/J] || LALR || C, Java || Mixed || External (JFlex) || Irix, Linux, Solaris, Win32 || no || Public ___domain
|-
|- bgcolor="#F8F8F8"
| C# Lex || [[Deterministic finite automaton|DFA]] || [[C Sharp (programming language)|C#]] || {{D-A|Mixed}} || {{Some|[[Common Language Runtime|.NET CLR]]}} || ?
| [http://www.ssw.uni-linz.ac.at/Research/Projects/Coco/ Coco/R] || LL(k) || C++, C#, Java || Mixed || Generated || All (Java), .NET, Linux || no || Open source (GPL)
|-
|- bgcolor="#F0F0F0"
| CookCC || [[Deterministic finite automaton|DFA]] || [[Java (programming language)|Java]] || {{D-A|Mixed}} || {{Some|[[Java virtual machine]]}} || {{Free}}, [[Apache License|Apache]] 2.0
| [http://cppcc.sourceforge.net/ CppCC] || LL(k) || C++ || ? || ? || ? || no || Open source (GPL)
|-
|- bgcolor="#F8F8F8"
| DFA || [[Deterministic finite automaton|DFA]] compressed matrix || [[C (programming language)|C]], [[C++]] || {{D-P|Separate}} || Windows, Visual Studio || [[BSD licenses|BSD]]
| [http://cis.paisley.ac.uk/crow-ci0/ CSTools] || LALR || C# || Mixed || Generated || .NET || no || Open source
|-
|- bgcolor="#F0F0F0"
| Dolphin || [[Deterministic finite automaton|DFA]] || [[C++]] || {{D-P|Separate}} || {{Yes|All}} || {{Proprietary}}
| [http://www2.cs.tum.edu/projects/cup/ CUP] || LALR || Java || Mixed || External (JLex) || All (Java) || no || Open source (GPL)
|-
|- bgcolor="#F8F8F8"
| [[Flex (lexical analyser generator)|Flex]] || [[Deterministic finite automaton|DFA]] table driven || [[C (programming language)|C]], [[C++]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[BSD licenses|BSD]]
| [http://www.cs.berkeley.edu/~smcpeak/elkhound/ Elkhound] || GLR || C++, Ocaml || Mixed || External || Unix, Win32 || no || Open source (BSD)
|-
|- bgcolor="#F0F0F0"
| gelex || [[Deterministic finite automaton|DFA]] || [[Eiffel (programming language)|Eiffel]] || {{D-A|Mixed}} || {{Some|[[Eiffel (programming language)|Eiffel]]}} || {{Free}}, [[MIT License|MIT]]
| [http://www.informatik.uni-freiburg.de/proglang/software/essence/ Essence] || LR || Scheme || Mixed || External || All (Scheme 48) || no || Open source
|-
|- bgcolor="#F0F0F0"
| golex || [[Deterministic finite automaton|DFA]] || [[Go (programming language)|Go]] || {{D-A|Mixed}} || {{Some|[[Go (programming language)|Go]]}} || {{Free}}, [[BSD licenses|BSD]]-style
| [http://www.devincook.com/goldparser/ GOLD] || LALR || ANSI C, C#, Delphi, Java, Python, Visual Basic, Visual C++ || Separated || ? || Win32 || yes || Open source (zlib/libpng)
|-
|- bgcolor="#F8F8F8"
| gplex || [[Deterministic finite automaton|DFA]] || [[C Sharp (programming language)|C#]] || {{D-A|Mixed}} || {{Some|[[Common Language Runtime|.NET CLR]]}} || {{Free}}, [[BSD licenses|BSD]]-like
| [http://grammatica.percederberg.net/ Grammatica] || LL(k) || C#, Java || Separated || Generated || All (Java) || no || Open source (LGPL)
|-
|- bgcolor="#F0F0F0"
| JFlex || [http://www.cse.ogi.edu/~mpj/jacc/[Deterministic jaccfinite automaton|DFA]] || LALR[[Java ||(programming language)|Java]] || {{D-A|Mixed}} || External {{Some|| All ([[Java) ||virtual nomachine]]}} || Open{{Free}}, source[[BSD (licenses|BSD)]]
|-
|- bgcolor="#F8F8F8"
| JLex || [https://javacc.dev.java.net/[Deterministic JavaCCfinite automaton|DFA]] || LL[[Java (k)programming language)|| Java]] || {{D-A|Mixed}} || Generated {{Some|| All ([[Java) ||virtual yesmachine]]}} || Open{{Free}}, source[[BSD (licenses|BSD)]]-like
|-
|- bgcolor="#F0F0F0"
| [[lex (software)|lex]] || [[Deterministic finite automaton|DFA]] || [[C (programming language)|C]] || {{D-A|Mixed}} || {{Some|[[POSIX]]}} || {{Partial}}, [[Proprietary software|proprietary]], [[Common Development and Distribution License|CDDL]]
| [http://www.informatik.uni-osnabrueck.de/alumni/bernd/jay/ jay] || LALR || Java || ? || ? || Unix || no || ?
|-
|- bgcolor="#F8F8F8"
| [http://www.hwaci.com/sw/lemon/ LEMON]lexertl || LALR[[Deterministic finite automaton|DFA]] || [[C++]] || ? || ?{{Yes|All}} || ?{{Free}}, ||[[GNU noLesser ||General Public ___domainLicense|GNU LGPL]]
|-
|- bgcolor="#F0F0F0"
| Quex || [[Deterministic finite automaton|DFA]] direct code || [[C (programming language)|C]], [[C++]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[GNU Lesser General Public License|GNU LGPL]]
| [http://www.parsetec.com/lrgen/ LRgen] || LALR || C++, Any (if you rewrite the skeleton) || Separated || Generated || Win32 || no || Proprietary
|-
|- bgcolor="#F8F8F8"
| [[Ragel]] || [[Deterministic finite automaton|DFA]] || [[Go (programming language)|Go]], [[C (programming language)|C]], [[C++]], [[Java (programming language)|Java]], [[Assembly language|assembly]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[GNU General Public License|GNU GPL]], [[MIT License|MIT]]<ref>{{Cite web|url=http://www.colm.net/open-source/ragel/|title = Ragel State Machine Compiler}}</ref><ref>http://www.colm.net/open-source/ragel/ {{verify source |date=November 2020 |reason=This ref was deleted Special:Diff/987467678 by a bug in VisualEditor and later restored by a bot from the original cite located at Special:Permalink/987467450 cite #1 - verify the cite is accurate and delete this template. [[User:GreenC bot/Job 18]]}}</ref>
| [http://pobs.sf.net/ Parser Objects] || LL(k) || Java || Mixed || ? || All (Java) || no || Open source (ZLib/LibPNG)
|-
|- bgcolor="#F0F0F0"
| RE/flex || [[Deterministic finite automaton|DFA]] direct code, DFA table driven, and [[Nondeterministic finite automaton|NFA]] regex libraries || [[C++]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[BSD licenses|BSD]]
| [http://vl.fmnet.info/precc/ PRECC] || LL(k) || C || ? || ? || Dos, Unix || no || ?
|-
|- bgcolor="#F8F8F8"
| [[re2c]] || [[Deterministic finite automaton|DFA]] direct code || [[C (programming language)|C]], [[C++]], [[Go (programming language)|Go]], [[Rust (programming language)|Rust]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[public ___domain]]
| [http://www.cs.nyu.edu/rgrimm/xtc/rats.html Rats!] || Packrat || Java || Mixed || Generated || All (Java) || no || Open source (LGPL)
|- bgcolor="#F0F0F0"
| [http://sablecc.org/ SableCC] || LALR || Java (and, with "altgen" engine, C, C++, C#, OCAML and Python) || Separated || Generated || All (Java & various) || no || Open source (LGPL)
|- bgcolor="#F8F8F8"
| [http://home.earthlink.net/~slkpg/ SLK] || LL(k) || C, C++, C#, Java || Separated || External || Win32, Linux || no || Proprietary
|- bgcolor="#F0F0F0"
| [http://spirit.sourceforge.net/ Spirit] || LL(k) || C++ || Mixed || ? || &nbsp;- || no || Open source (Boost)
|- bgcolor="#F8F8F8"
| [http://www.TextTransformer.com/ TextTransformer] || LL(k) || C++ || Mixed || Generated || Win32 || yes || Proprietary (free version)
|- bgcolor="#F0F0F0"
| [http://www.sand-stone.com/vpmain.htm/ Visual Parse++] || LALR || C++,C++, C#, Java || Separated || Generated || Win32 || yes || Proprietary
|- bgcolor="#F8F8F8"
| [[yacc|Yacc (AT&T)]] || LALR || C (other languages available) || Mixed || External || Unix || no || Open source (various)
|- bgcolor="#F0F0F0"
| [http://yooparse.sourceforge.net/ YooParse] || LR || C++ || ? || External (YooLex) || ? || no || Open source (MIT)
|}
 
[[Category:Parsers|*]]
== Deterministic context-free languages ==
[[Category:Parsing algorithms]]
[[Context-free language]]s are a category of languages (sometimes termed [[Chomsky hierarchy|Chomsky Type 2]]) which can be matched by a sequence of replacement rules, each of which essentially maps each non-terminal element to a sequence of terminal elements and/or other nonterminal elements. Grammars of this type can match anything that can be matched by a [[regular grammar]], and furthermore, can handle the concept of recursive "nesting" ("every A is eventually followed by a matching B"), such as the question of whether a given string contains correctly nested parentheses. The rules of Context-free grammars are purely local, however, and therefore cannot handle questions that require non-local analysis such as "Does a declaration exist for every variable that is used in a function?". To do so technically would require a more sophisticated grammar, like a Chomsky Type 1 grammar, also termed a [[context-sensitive grammar]]. However, parser generators for context-free grammars often support the ability for user-written code to introduce limited amounts of context-sensitivity. (For example, upon encountering a variable declaration, user-written code could save the name and type of the variable into an external data structure, so that these could be checked against later variable references detected by the parser.)
[[Category:Code generation]]
 
[[Category:Lists of software|Compiler-compilers]]
The [[deterministic context-free language]]s are a proper subset of the context-free languages which can be efficiently parsed by [[deterministic pushdown automata]].<!-- More parsing algorithms and output formats supported. See https://gdk.sourceforge.net/gdkref.pdf -->
{| class="wikitable sortable" style="text-align: center; font-size: 85%; width: auto;"
|-
! Name !! [[Parsing]] algorithm !! Input grammar notation !! [[Programming language|Output languages]] !! Grammar, code !! [[Lexical analyzer|Lexer]] !! Development platform !! [[Integrated development environment|IDE]] !! [[Software license|License]]
|-
| [[ANTLR]]4 || Adaptive LL(*)<ref>{{Cite web |url=http://www.antlr.org/papers/allstar-techreport.pdf |title=Adaptive LL(*) Parsing: The Power of Dynamic Analysis |access-date=2016-04-03 |publisher=Terence Parr}}</ref> || [[Extended Backus–Naur form|EBNF]] || [[C Sharp (programming language)|C#]], [[Java (programming language)|Java]], [[Python (programming language)|Python]], [[JavaScript]], [[C++]], [[Swift (programming language)|Swift]], [[Go (programming language)|Go]], [[PHP]] || {{D-P|Separate}} || generated || {{Some|[[Java virtual machine]]}} || {{Yes}} || {{Free}}, [[BSD licenses|BSD]]
|-
| [[ANTLR]]3 || [[LL parser|LL]](*) || [[Extended Backus–Naur form|EBNF]] || [[ActionScript]], [[Ada (programming language)|Ada95]], [[C (programming language)|C]], [[C++]], [[C Sharp (programming language)|C#]], [[Java (programming language)|Java]], [[JavaScript]], [[Objective-C]], [[Perl]], [[Python (programming language)|Python]], [[Ruby (programming language)|Ruby]] || {{D-A|Mixed}} || generated || {{Some|[[Java virtual machine]]}} || {{Yes}} || {{Free}}, [[BSD licenses|BSD]]
|-
| APG{{cn|date=January 2025}}|| [[Recursive descent]], [[backtracking]] || [[ABNF]] || [[Python (programming language)|Python]], [[JavaScript]], [[C (programming language)|C]], [[Java (programming language)|Java]] || {{D-P|Separate}} || none || {{Yes|All}} || {{No}} || {{Free}}, [[BSD licenses|BSD]]
|-
| Beaver<ref>{{Cite journal |last1=Boyland |first1=John |last2=Spiewak |first2=Daniel |date=2010-09-17 |title=Tool Paper: ScalaBison Recursive Ascent-Descent Parser Generator |journal=Electronic Notes in Theoretical Computer Science |series=Proceedings of the Ninth Workshop on Language Descriptions Tools and Applications (LDTA 2009) |volume=253 |issue=7 |pages=65–74 |doi=10.1016/j.entcs.2010.08.032 |issn=1571-0661|doi-access=free }}</ref><ref>{{Cite web |title=Beaver - a LALR Parser Generator |url=https://beaver.sourceforge.net/ |access-date=2023-09-16 |website=beaver.sourceforge.net}}</ref>|| [[LALR parser|LALR]](1) || [[Extended Backus–Naur form|EBNF]]|| [[Java (programming language)|Java]]|| {{D-A|Mixed}} || external || {{Some|[[Java virtual machine]]}} || {{No}} || {{Free}}, [[BSD licenses|BSD]]
|-
| [[GNU Bison|Bison]] || [[LALR parser|LALR]](1), [[Canonical LR parser|LR]](1), [[IELR parser|IELR]](1), [[GLR parser|GLR]] || [[Yacc]] || [[C (programming language)|C]], [[C++]], [[D (programming language)|D]], [[Java (programming language)|Java]] || {{D-A|Mixed}} || external || {{Yes|All}} || {{No}} || {{Free}}, [[GNU General Public License|GNU GPL]] with exception
|-
| [[BtYacc]] || [[Backtracking]] [[Bottom-up parsing|Bottom-up]] || ? || [[C++]] || {{D-A|Mixed}} || external || {{Yes|All}} || {{No}} || {{Free}}, [[public ___domain]]
|-
| [[Berkeley Yacc|byacc]] || [[LALR parser|LALR]](1) || [[Yacc]] || [[C (programming language)|C]] || {{D-A|Mixed}} || external || {{Yes|All}} || {{No}} || {{Free}}, [[public ___domain]]
|-
| CL-Yacc<ref>{{Cite journal |last1=Newton |first1=Jim E. |last2=Demaille |first2=Akim |last3=Verna |first3=Didier |date=2016-05-09 |title=Type-Checking of Heterogeneous Sequences in Common Lisp |url=https://www.lrde.epita.fr/dload/papers/newton.16.rte.report.pdf |journal=Proceedings of the 9th European Lisp Symposium on European Lisp Symposium |series=ELS2016 |___location=Kraków, Poland |publisher=European Lisp Scientific Activities Association |pages=13–20 |isbn=978-2-9557474-0-7}}</ref><ref>{{Cite web |title=CL-Yacc — a LALR(1) parser generator for Common Lisp |url=https://www.irif.fr/~jch/software/cl-yacc/ |access-date=2023-09-16 |website=www.irif.fr}}</ref>|| [[LALR parser|LALR]](1) || [[Lisp (programming language)|Lisp]]|| [[Common Lisp]]|| {{D-A|Mixed}} || external || {{Yes|All}} || {{No}} || {{Free}}, [[MIT License|MIT]]
|-
| [[Coco/R]] || [[LL parser|LL]](1) + semantic predicates || [[Extended Backus–Naur form|EBNF]] || [[C (programming language)|C]], [[C++]], [[C Sharp (programming language)|C#]], [[F Sharp (programming language)|F#]], [[Java (programming language)|Java]], [[Ada (programming language)|Ada]], [[Object Pascal]], [[Delphi (software)|Delphi]], [[Modula-2]], [[Oberon (programming language)|Oberon]], [[Ruby (programming language)|Ruby]], [[Swift (programming language)|Swift]], [[Unicon (programming language)|Unicon]], [[Visual Basic .NET]] || {{D-A|Mixed}} || generated || {{Some|[[Java virtual machine]], [[.NET]] framework, [[Microsoft Windows|Windows]], [[POSIX]] (depends on output language)}} || {{No}} || {{Free}}, [[GNU General Public License|GNU GPL]]
|-
| CppCC<ref>{{Cite journal |last1=Hosseinpour |first1=Sahereh |last2=Alavi Milani |first2=Mir Mohammad Reza |last3=Pehlivan |first3=Hüseyin |date=July 2018 |title=A Step-by-Step Solution Methodology for Mathematical Expressions |journal=Symmetry |language=en |volume=10 |issue=7 |pages=285 |doi=10.3390/sym10070285 |bibcode=2018Symm...10..285H |issn=2073-8994 |doi-access=free }}</ref><ref>{{Cite web |title=CppCC's Home Page |url=https://cppcc.sourceforge.net/ |access-date=2023-09-16 |website=cppcc.sourceforge.net}}</ref>|| [[LL parser|LL]](k) || ? || [[C++]]|| {{D-A|Mixed}} || generated || {{Some|[[POSIX]]}} || {{No}} || {{Free}}, [[GNU General Public License|GNU GPL]]
|-
| CUP<ref>{{Cite web |title=Java Cup |url=https://pages.cs.wisc.edu/~fischer/cs536.s06/course.hold/html/NOTES/4a.JAVA-CUP.html |access-date=2023-09-16 |website=pages.cs.wisc.edu}}</ref><ref>{{Cite web |title=CUP |url=http://www2.cs.tum.edu/projects/cup/docs.php |access-date=2023-09-16 |website=www2.cs.tum.edu}}</ref>|| [[LALR parser|LALR]](1) || ? || [[Java (programming language)|Java]]|| {{D-A|Mixed}} || external || {{Some|[[Java virtual machine]]}} || {{No}} || {{Free}}, [[BSD licenses|BSD]]-like
|-
<!-- Other programming languages may be supported. See https://eli-project.sourceforge.net/ -->
| Eli<ref>{{Cite journal |last1=Thiemann |first1=Peter |last2=Neubauer |first2=Matthias |date=2004-12-31 |title=Parameterized LR Parsing |journal=Electronic Notes in Theoretical Computer Science |series=Proceedings of the Fourth Workshop on Language Descriptions, Tools, and Applications (LDTA 2004) |volume=110 |pages=115–132 |doi=10.1016/j.entcs.2004.06.007 |issn=1571-0661|doi-access=free }}</ref><ref>{{Cite journal |last1=Gray |first1=Robert W. |last2=Levi |first2=Steven P. |last3=Heuring |first3=Vincent P. |last4=Sloane |first4=Anthony M. |last5=Waite |first5=William M. |title=Eli: a complete, flexible compiler construction system |journal=Communications of the ACM |date=1992 |language=en |volume=35 |issue=2 |pages=121–130 |doi=10.1145/129630.129637 |s2cid=5121773 |issn=0001-0782|doi-access=free }}</ref> || [[LALR parser|LALR]](1) || ? || [[C (programming language)|C]] || {{D-A|Mixed}} || generated || {{Some|[[POSIX]]}} || {{No}} || {{Free}}, [[GNU General Public License|GNU GPL]], [[GNU Lesser General Public License|GNU LGPL]]
|-
| Essence<ref>{{Cite journal |last1=Owens |first1=Scott |last2=Flatt |first2=M. |last3=Shivers |first3=O. |last4=McMullan |first4=Benjamin |date=2004-10-01 |title=Lexer and Parser Generators in Scheme |url=https://www.khoury.northeastern.edu/home/shivers/papers/scmparse.pdf |journal=Scheme 2004: Proceedings of the Fifth Workshop on Scheme and Functional Programming}}</ref>|| [[LR parser|LR]](?) || ? || [[Scheme 48]]|| {{D-A|Mixed}} || external || {{Yes|All}} || {{No}} || {{Free}}, [[BSD licenses|BSD]]
|-
| eyapp<ref name=":0">{{Cite journal |last1=Areias |first1=Hugo |last2=Simões |first2=Alberto |last3=Henriques |first3=P. |last4=Cruz |first4=Daniela Carneiro da |date=2010-09-01 |title=Parser generation in Perl : an overview and available tools |url=https://core.ac.uk/download/pdf/55615107.pdf |journal=}}</ref>|| [[Canonical LR parser|LALR]](1) || ? || [[Perl]]|| {{D-A|Mixed}} || external or generated || {{Yes|All}} || {{No}} || {{Free}}, [[Artistic License|Artistic]]
|-
| [[GOLD (parser)|GOLD]]<ref>{{Cite web |last=Volkman |first=Victor |date=2007-07-19 |title=Let Your Parser Go for the GOLD |url=https://www.developer.com/java/let-your-parser-go-for-the-gold/ |access-date=2023-11-04 |website=Developer.com |language=en-US}}</ref>|| [[LALR parser|LALR]](1) || BNF || [[x86 assembly language]], [[ANSI C]], [[C Sharp (programming language)|C#]], [[D (programming language)|D]], [[Java (programming language)|Java]], [[Pascal (programming language)|Pascal]], [[Object Pascal]], [[Python (programming language)|Python]], [[Visual Basic]] 6, [[Visual Basic .NET]], [[Visual C++]]|| {{D-P|Separate}} || generated || {{Some|[[Microsoft Windows|Windows]]}} || {{Yes}} || {{Free}}, [[zlib License|zlib]] modified
|-
| Hime Parser Generator<ref>{{Cite web |title=Parsing in C#: All the Tools and Libraries You Can Use (Part 2) - DZone |url=https://dzone.com/articles/parsing-in-c-all-the-tools-and-libraries-you-can-u-1 |access-date=2023-11-04 |website=dzone.com |language=en}}</ref>|| [[LALR parser|LALR]](1), [[GLR parser|GLR]]|| BNF dialect || [[C Sharp (programming language)|C#]], [[Java (programming language)|Java]], [[Rust (programming language)|Rust]]|| {{D-P|Separate}} || generated || {{Some|[[.NET]] framework, [[Java virtual machine]]}} || {{No}} || {{Free}}, [[GNU Lesser General Public License|GNU LGPL]]
|-
| Hyacc<ref>{{Cite journal |last1=Ortin |first1=Francisco |last2=Quiroga |first2=Jose |last3=Rodriguez-Prieto |first3=Oscar |last4=Garcia |first4=Miguel |date=2022-03-03 |title=An empirical evaluation of Lex/Yacc and ANTLR parser generation tools |journal=PLOS ONE |language=en |volume=17 |issue=3 |pages=e0264326 |doi=10.1371/journal.pone.0264326 |issn=1932-6203 |pmc=8893623 |pmid=35239695 |bibcode=2022PLoSO..1764326O |doi-access=free }}</ref>|| [[Canonical LR parser|LR(1), LALR(1), LR]](0) || [[Yacc]]|| [[C (programming language)|C]]|| {{D-A|Mixed}} || external || {{Yes|All}} || {{No}} || {{Free}}, [[GNU General Public License|GNU GPL]]
|-
| [[JavaCC]]<ref>{{Cite web |last=Enseling |first=Oliver |date=2000-12-29 |title=Build your own languages with JavaCC |url=https://www.infoworld.com/article/2076269/build-your-own-languages-with-javacc.html |access-date=2023-11-04 |website=InfoWorld |language=en}}</ref><ref>{{Cite web |title=JavaCC |url=https://javacc.github.io/javacc/ |access-date=2023-11-04 |website=JavaCC |language=en-US}}</ref>|| [[LL parser|LL]](k) || [[Extended Backus–Naur form|EBNF]]|| [[Java (programming language)|Java]], [[C++]], [[JavaScript]] (via [[Google Web Toolkit|GWT]] compiler)<ref>{{Cite web |url=http://consoliii.blogspot.co.uk/2014/04/creating-gwt-compatible-parser-using.html |title=Building parsers for the web with JavaCC & GWT (Part one) |date=14 April 2014 |access-date=2014-05-04 |publisher=Chris Ainsley}}</ref>|| {{D-A|Mixed}} || generated || {{Some|[[Java virtual machine]]}} || {{Yes}} || {{Free}}, [[BSD licenses|BSD]]
|-
| [[JFLAP]] || [[LL parser|LL]](1), [[LALR parser|LALR]](1) || ? || [[Java (programming language)|Java]] || ? || ? || {{Some|[[Java virtual machine]]}} || {{Yes}} || ?
|-
| [[JetPAG]] || [[LL parser|LL]](k) || ? || [[C++]] || {{D-A|Mixed}} || generated || {{Yes|All}} || {{No}} || {{Free}}, [[GNU General Public License|GNU GPL]]
|-
| JS/CC || [[LALR parser|LALR]](1) || [[Extended Backus–Naur form|EBNF]] || [[JavaScript]], [[JScript]], [[ECMAScript]] || {{D-A|Mixed}} || internal || {{Yes|All}} || {{Yes}} || {{Free}}, [[BSD licenses|BSD]]
|-
| KDevelop-PG-Qt || [[Recursive descent parser|LL]](1), [[backtracking]], [[Shunting-yard algorithm|shunting-yard]] || ? || [[C++]] || {{D-A|Mixed}} || generated or external || {{Yes|All, [[KDE]]}} || {{No}} || {{Free}}, [[GNU Lesser General Public License|GNU LGPL]]
|-
| Kelbt || [[Backtracking]] [[LALR parser|LALR]](1) || ? || [[C++]] || {{D-A|Mixed}} || generated || {{Some|[[POSIX]]}} || {{No}} || {{Free}}, [[GNU General Public License|GNU GPL]]
|-
| kmyacc || [[LALR parser|LALR]](1) || ? || [[C (programming language)|C]], [[Java (programming language)|Java]], [[Perl]], [[JavaScript]] || {{D-A|Mixed}} || external || {{Yes|All}} || {{No}} || {{Free}}, [[GNU General Public License|GNU GPL]]
|-
| Lapg || [[LALR parser|LALR]](1) || ? || [[C (programming language)|C]], [[C++]], [[C Sharp (programming language)|C#]], [[Java (programming language)|Java]], [[JavaScript]] || {{D-A|Mixed}} || generated || {{Some|[[Java virtual machine]]}} || {{No}} || {{Free}}, [[GNU General Public License|GNU GPL]]
|-
| Lark || [[LALR parser|LALR]](1), [[Earley parser|Earley (SPPF)]] || [[Extended Backus–Naur form|EBNF]] || [[Python (programming language)|Python]], [[JavaScript]] || {{D-A|Mixed}} || generated || {{Yes|All}} || {{Yes}} || {{Free}}, [[MIT license|MIT]]
|-
| [[Lemon (parser generator)|Lemon]] || [[LALR parser|LALR]](1) ||BNF dialect<ref>{{Cite web |title=The Lemon Parser Generator |url=https://sqlite.org/src/doc/trunk/doc/lemon.html#syntax |access-date=2023-11-30 |website=sqlite.org}}</ref>|| [[C (programming language)|C]] || {{D-A|Mixed}} || external || {{Yes|All}} || {{No}} || {{Free}}, [[public ___domain]]
|-
| Lezer<ref>{{Cite web |url=https://lezer.codemirror.net/ |title=The Lezer Parser System}}</ref><ref>{{Cite news |title=Building a ShopifyQL Code Editor |language=en |work=Shopify |url=https://shopify.engineering/building-a-shopifyql-code-editor |access-date=2023-12-06}}</ref><ref>{{Cite web |date=2022-03-11 |title=Sponsoring the Lezer parser system {{!}} Tines |url=https://www.tines.com/blog/sponsoring-the-lezer-parser-system/ |access-date=2023-12-06 |website=www.tines.com}}</ref>|| [[LR parser|LR]](1), [[GLR parser|GLR]] || EBNF dialect || [[JavaScript]] || {{D-P|Separate}} || generated || [[Node.js]], [[JavaScript]] || {{No}} || {{Free}}, [[MIT License|MIT]]
|-
| Lime || [[LALR parser|LALR]](1) || ? || [[PHP]] || {{D-A|Mixed}} || external || {{Yes|All}} || {{No}} || {{Free}}, [[GNU General Public License|GNU GPL]]
|-
| LISA || [[LR parser|LR]](?), [[LL parser|LL]](?), [[LALR parser|LALR]](?), [[Simple LR parser|SLR]](?) || ? || [[Java (programming language)|Java]] || {{D-A|Mixed}} || generated || {{Some|[[Java virtual machine]]}} || {{Yes}} || {{Free}}, [[public ___domain]]
|-
| LLgen || [[LL parser|LL]](1) || ? || [[C (programming language)|C]] || {{D-A|Mixed}} || external || {{Some|[[POSIX]]}} || {{No}} || {{Free}}, [[BSD licenses|BSD]]
|-
| LLnextgen || [[LL parser|LL]](1) || ? || [[C (programming language)|C]] || {{D-A|Mixed}} || external || {{Yes|All}} || {{No}} || {{Free}}, [[GNU General Public License|GNU GPL]]
|-
| LLLPG || [[LL parser|LL]](k) + [[Syntactic predicate|syntactic]] and semantic predicates || ANTLR-like || [[C Sharp (programming language)|C#]] || {{D-A|Mixed}} || generated (?) || {{Some|[[.NET]] framework, [[Mono (software)|Mono]]}} || {{Yes|[[Microsoft Visual Studio|Visual Studio]]}} || {{Free}}, [[GNU Lesser General Public License|GNU LGPL]]
|-
| LPG || [[Backtracking]] [[LALR parser|LALR]](k) || ? || [[Java (programming language)|Java]] || {{D-A|Mixed}} || generated || {{Some|[[Java virtual machine]]}} || {{No}} || {{Free}}, [[Eclipse Public License|EPL]]
|-
| LRSTAR<ref>{{Cite web |url=http://lrstar.cc/ |title=An LR(*) parser generator for C++}}</ref> || [[LALR parser|LALR]](1), [[LALR parser|LALR]](*) || YACC, ANTLR, EBNF || [[C++]] || {{D-P|Separate}} || generated || {{Some|[[Microsoft Windows|Windows]]}} || {{Yes|[[Microsoft Visual Studio|Visual Studio]]}} || {{Free}}, [[BSD licenses|BSD]]
|-
| Menhir || [[Canonical LR parser|LR]](1) || ? || [[OCaml]] || {{D-A|Mixed}} || generated || {{Yes|All}} || {{No}} || {{Free}}, [[Q Public License|QPL]]
|-
| ML-Yacc || [[LALR parser|LALR]](1) || ? || [[ML (programming language)|ML]] || {{D-A|Mixed}} || external || {{Yes|All}} || {{No}} || ?
|-
| Monkey || [[Canonical LR parser|LR]](1) || ? || [[Java (programming language)|Java]] || {{D-P|Separate}} || generated || {{Some|[[Java virtual machine]]}} || {{No}} || {{Free}}, [[GNU General Public License|GNU GPL]]
|-
| Msta || [[LALR parser|LALR]](k), [[Canonical LR parser|LR]](k) || [[YACC]], [[Extended Backus–Naur form|EBNF]] || [[C (programming language)|C]], [[C++]] || {{D-A|Mixed}} || external or generated || {{Some|[[POSIX]], [[Cygwin]]}} || {{No}} || {{Free}}, [[GNU General Public License|GNU GPL]]
|-
| MTP (More Than Parsing) || [[LL parser|LL]](1) || ? || [[Java (programming language)|Java]] || {{D-P|Separate}} || generated || {{Some|[[Java virtual machine]]}} || {{No}} || {{Free}}, [[GNU General Public License|GNU GPL]]
|-
| MyParser || [[LL parser|LL]](*) || [[Markdown]] || [[C++11]] || {{D-P|Separate}} || internal || {{Some|Any with standard C++11 compiler}} || {{No}} || {{Free}}, [[MIT License|MIT]]
|-
| NLT || [[GLR parser|GLR]] || [[C Sharp (programming language)|C#]]/[[Backus–Naur form|BNF]]-like || [[C Sharp (programming language)|C#]] || {{D-A|Mixed}} || mixed || {{Some|[[.NET]] framework}} || {{No}} || {{Free}}, [[MIT License|MIT]]
|-
| ocamlyacc || [[LALR parser|LALR]](1) || ? || [[OCaml]] || {{D-A|Mixed}} || external || {{Yes|All}} || {{No}} || {{Free}}, [[Q Public License|QPL]]
|-
| olex || [[LL parser|LL]](1) || ? || [[C++]] || {{D-A|Mixed}} || generated || {{Yes|All}} || {{No}} || {{Free}}, [[GNU General Public License|GNU GPL]]
|-
| [[Parsec (parser)|Parsec]]|| [[LL parser|LL]], [[backtracking]] || [[Haskell]] || [[Haskell]] || {{D-A|Mixed}} || none || {{Yes|All}} || {{No}} || {{Free}}, [[BSD licenses|BSD]]
|-
| yapp<ref name=":0" />|| [[LALR parser|LALR]](1) || ? || [[Perl]] || {{D-A|Mixed}} || external || {{Yes|All}} || {{No}} || {{Free}}, [[GNU General Public License|GNU GPL]]
|-
| Parser Objects || [[LL parser|LL]](k) || ? || [[Java (programming language)|Java]] || {{D-A|Mixed}} || ? || {{Some|[[Java virtual machine]]}} || {{No}} || {{Free}}, [[zlib License|zlib]]
|-
| PCCTS || [[LL parser|LL]] || ? || [[C (programming language)|C]], [[C++]] || ? || ? || {{Yes|All}} || {{No}} || ?
|-
| [[Python Lex-Yacc|PLY]] || [[LALR parser|LALR]](1) || BNF || [[Python (programming language)|Python]] || {{D-A|Mixed}} || generated || {{Yes|All}} || {{No}} || {{Free}}, [[MIT License|MIT]]
|-
| PlyPlus || [[LALR parser|LALR]](1) || EBNF || [[Python (programming language)|Python]] || {{D-P|Separate}} || generated || {{Yes|All}} || {{No}} || {{Free}}, [[MIT License|MIT]]
|-
| PRECC || [[LL parser|LL]](k) || ? || [[C (programming language)|C]] || {{D-P|Separate}} || generated || {{Some|[[DOS]], [[POSIX]]}} || {{No}} || {{Free}}, [[GNU General Public License|GNU GPL]]
|-
| QLALR || [[LALR parser|LALR]](1) || ? || [[C++]] || {{D-A|Mixed}} || external || {{Yes|All}} || {{No}} || {{Free}}, [[GNU General Public License|GNU GPL]]
|-
|racc<ref>{{Cite web|title=Racc|url=https://i.loveruby.net/en/projects/racc/|access-date=2021-11-26|website=i.loveruby.net}}</ref>
|[[LALR parser|LALR]](1)
|[[Backus–Naur form|BNF]]-like, yacc-like<ref>{{Cite web|title=Racc Grammar File Reference|url=https://i.loveruby.net/en/projects/racc/doc/grammar.html|access-date=2021-11-26|website=i.loveruby.net}}</ref>
|[[Ruby (programming language)|Ruby]]
|{{D-A|Mixed}}
| ?
|{{D-A|Windows, Linux, macOS, FreeBSD, NetBSD}}
|{{No}}
|{{Free|[[LGPL]]}}
|-
| REX<ref>{{Cite web |url=https://www.bottlecaps.de/rex/ |title=The REX Parser Generator supports C, C++, Java, JavaScript, C#, Go, Haxe, Python, Scala, Typescript, XQuery, and XSLT}}</ref> || [[LL parser|LL]](1) [[sLL parser|sLL]](k) [[LR parser|LR]](k) [[LALR]](k) [[GLR parser|GLR]] [[Parsing expression grammar|PEG]] [[Deterministic finite automaton|DFA]] [[Context-dependent lexing]] || [[Extended Backus–Naur form|EBNF]] || [[C++]], [[C Sharp (programming language)|C#]], [[Java (programming language)|Java]], [[JavaScript]], [[Go (programming language)|Go]], [[Haxe]], [[Python (programming language)|Python]], [[Scala (programming language)|Scala]], [[TypeScript|Typescript]], [[XQuery]], [[XSLT]] || {{D-P|Separate}} || generated || {{Yes|All}} || {{No}} || {{Free}}, [[Apache License 2.0]]
|-
| [[SableCC]] || [[LALR parser|LALR]](1) || ? || [[C (programming language)|C]], [[C++]], [[C Sharp (programming language)|C#]], [[Java (programming language)|Java]], [[OCaml]], [[Python (programming language)|Python]] || {{D-P|Separate}} || generated || {{Some|[[Java virtual machine]]}} || {{No}} || {{Free}}, [[GNU Lesser General Public License|GNU LGPL]]
|-
| SLK<ref>{{Cite web |url=http://www.slkpg.com/ |title=The SLK Parser Generator supports C, C++, Java, JavaScript, and C#, optional backtracking, free}}</ref> || [[LL parser|LL]](k) [[LR parser|LR]](k) [[LALR]](k) || [[Extended Backus–Naur form|EBNF]] || [[C (programming language)|C]], [[C++]], [[C Sharp (programming language)|C#]], [[Java (programming language)|Java]], [[JavaScript]] || {{D-P|Separate}} || external || {{Yes|All}} || {{No}} || SLK<ref>http://www.slkpg.com/license.txt {{Bare URL plain text|date=March 2022}}</ref>
|-
| SLY<ref>{{Cite web |url=https://sly.readthedocs.io/en/latest/sly.html |title=SLY (Sly Lex Yacc)}}</ref> || [[LALR parser|LALR]](1) || BNF || [[Python (programming language)|Python]] || {{D-A|Mixed}} || generated || {{Yes|All}} || {{No}} || {{Free}}, [[BSD License|BSD]]
|-
| SP (Simple Parser) || [[Recursive descent]] || [[Python (programming language)|Python]] || [[Python (programming language)|Python]] || {{D-P|Separate}} || generated || {{Yes|All}} || {{No}} || {{Free}}, [[GNU Lesser General Public License|GNU LGPL]]
|-
| [[Spirit Parser Framework|Spirit]] || [[Recursive descent parser|Recursive descent]] || ? || [[C++]] || {{D-A|Mixed}} || internal || {{Yes|All}} || {{No}} || {{Free}}, [[Boost Software License|Boost]]
|-
| Styx || [[LALR parser|LALR]](1) || ? || [[C (programming language)|C]], [[C++]] || {{D-P|Separate}} || generated || {{Yes|All}} || {{No}} || {{Free}}, [[GNU Lesser General Public License|GNU LGPL]]
|-
| Sweet Parser || [[LALR parser|LALR]](1) || ? || [[C++]] || {{D-P|Separate}} || generated || {{Some|[[Microsoft Windows|Windows]]}} || {{No}} || {{Free}}, [[zlib License|zlib]]
|-
| Tap || [[LL parser|LL]](1) || ? || [[C++]] || {{D-A|Mixed}} || generated || {{Yes|All}} || {{No}} || {{Free}}, [[GNU General Public License|GNU GPL]]
|-
| TextTransformer || [[LL parser|LL]](k) || ? || [[C++]] || {{D-A|Mixed}} || generated || {{Some|[[Microsoft Windows|Windows]]}} || {{Yes}} || {{Proprietary}}
|-
| TinyPG || [[LL parser|LL]](1) || ? || [[C Sharp (programming language)|C#]], [[Visual Basic]] || ? || ? || {{Some|[[Microsoft Windows|Windows]]}} || {{Yes}} || {{Partial}}, [[Code Project Open License|CPOL]] 1.0
|-
| [[Toy Parser Generator]] || [[Recursive descent parser|Recursive descent]] || ? || [[Python (programming language)|Python]] || {{D-A|Mixed}} || generated || {{Yes|All}} || {{No}} || {{Free}}, [[GNU Lesser General Public License|GNU LGPL]]
|-
| TP Yacc || [[LALR parser|LALR]](1) || ? || [[Turbo Pascal]] || {{D-A|Mixed}} || external || {{Yes|All}} || {{Yes}} || {{Free}}, [[GNU General Public License|GNU GPL]]
|-
| [[Tree-sitter (parser generator)|Tree-Sitter]]<ref>{{Cite web |url=https://tree-sitter.github.io/ |title=Tree-Sitter - An incremental parsing system for programming tools}}</ref> || [[LR parser|LR]](1), [[GLR parser|GLR]] || [[JavaScript]] [[Domain-specific language|DSL]], [[JSON]] || [[C (programming language)|C]], bindings ([[Rust (programming language)|Rust]], [[WebAssembly]], [[JavaScript]], [[Python (programming language)|Python]], many other) || {{D-P|Separate}} || generated + external || {{Yes|All}} || {{D-A|[[Vim (text editor)#Neovim|Neovim]], [[Helix]], [[GNU Emacs]], [[Lapce]], [[Zed (text editor)|Zed]]}} || {{Free}}, [[MIT License|MIT]]
|-
| Tunnel Grammar Studio || [[Tunnel Parsing]] || [[Augmented Backus–Naur form|ABNF]] || [[C++]] || {{D-P|Separate}} || generated || {{Some|[[Microsoft Windows|Windows]]}} || {{Yes}} || {{Proprietary}}
|-
| UltraGram || [[LALR parser|LALR]](1), [[LR parser|LR]](1), [[GLR parser|GLR]] || [[Backus–Naur form|BNF]] || C++, Java, C#, Visual Basic .NET || {{D-P|Separate}} || external || {{Some|[[Microsoft Windows|Windows]]}} || {{Yes}} || {{Free}}, [[public ___domain]]
|-
| UniCC || [[LALR parser|LALR]](1) || [[Extended Backus–Naur form|EBNF]] || [[C (programming language)|C]], [[C++]], [[Python (programming language)|Python]], [[JavaScript]], [[JSON]], [[XML]] || {{D-A|Mixed}} || generated || {{Some|[[POSIX]]}} || {{No}} || {{Free}}, [[BSD licenses|BSD]]
|-
| [[UrchinCC]] || [[LL parser|LL]](1) || ? || Java || ? || generated || {{Some|[[Java virtual machine]]}} || {{No}} || ?
|-
<!-- Other programming languages may be supported. -->
| [[Yacc]] [[AT&T Corporation|AT&T]]/[[Sun Microsystems|Sun]] || [[LALR parser|LALR]](1) || [[Yacc]] || [[C (programming language)|C]] || {{D-A|Mixed}} || external || {{Some|[[POSIX]]}} || {{No}} || {{Free}}, [[Common Public License|CPL]] & [[Common Development and Distribution License|CDDL]]
|-
| Yacc++ || [[LR parser|LR]](1), [[LALR parser|LALR]](1) || [[Yacc]] || [[C++]], [[C Sharp (programming language)|C#]] || {{D-A|Mixed}} || generated or external || {{Yes|All}} || {{No}} || {{Proprietary}}
|-
| Yapps || [[LL parser|LL]](1) || ? || [[Python (programming language)|Python]] || {{D-A|Mixed}} || generated || {{Yes|All}} || {{No}} || {{Free}}, [[MIT License|MIT]]
|-
| yecc || [[LALR parser|LALR]](1) || ? || [[Erlang (programming language)|Erlang]] || {{D-P|Separate}} || generated || {{Yes|All}} || {{No}} || {{Free}}, [[Apache License|Apache]] 2.0
|-
| [[Visual BNF]] || [[Canonical LR parser|LR]](1), [[LALR parser|LALR]](1) || ? || [[C Sharp (programming language)|C#]] || {{D-P|Separate}} || generated || {{Some|[[.NET]] framework}} || {{Yes}} || {{Proprietary}}
|-
| YooParse || [[Canonical LR parser|LR]](1), [[LALR parser|LALR]](1) || ? || [[C++]] || {{D-A|Mixed}} || external || {{Yes|All}} || {{No}} || {{Free}}, [[MIT License|MIT]]
|-
| Parse<ref>{{Cite web |url=https://github.com/MathiasVP/Parse/ |title=Parse - Compile time (LR) type safe parser generator for C++|website=[[GitHub]]|date=30 December 2021}}</ref> || [[Canonical LR parser|LR]](1) || BNF in [[C++]] types || ? || ? || none || {{Some|C++11 standard compiler}} || {{No}} || {{Free}}, [[MIT License|MIT]]
|-
| GGLL || [[LL parser|LL]](1) || Graph || [[Java (software platform)|Java]] || {{D-A|Mixed}} || generated || {{Some|[[Microsoft Windows|Windows]]}} || {{Yes}} || {{Free}}, [[MIT License|MIT]]
|- class="sortbottom"
! Product !! [[Parsing]] algorithm !! Input grammar notation !! [[Programming language|Output languages]] !! Grammar, code !! [[Lexical analyzer|Lexer]] !! Development platform !! [[Integrated development environment|IDE]] !! [[Software license|License]]
|}
 
==Parsing expression grammars, deterministic Boolean grammars==
 
This table compares parser generators with [[parsing expression grammar]]s, deterministic [[Boolean grammar]]s.
 
{| class="wikitable sortable" style="text-align: center; font-size: 85%; width: auto;"
|-
! Name !! [[Parsing]] algorithm !! [[Programming language|Output languages]] !! Grammar, code !! Development platform !! [[Software license|License]]
|-
| AustenX || [[Packrat parser|Packrat]] (modified) || [[Java (programming language)|Java]] || {{D-P|Separate}} || {{Yes|All}} || {{Free}}, [[BSD licenses|BSD]]
|-
| Aurochs || [[Packrat parser|Packrat]] || [[C (programming language)|C]], [[OCaml]], [[Java (programming language)|Java]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[GNU General Public License|GNU GPL]]
|-
| BNFlite || Recursive descent || [[C++]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[MIT License|MIT]]
|-
| Canopy || [[Packrat parser|Packrat]] || [[Java (programming language)|Java]], [[JavaScript]], [[Python (programming language)|Python]], [[Ruby (programming language)|Ruby]] || {{D-P|Separate}} || {{Yes|All}} || {{Free}}, [[GNU General Public License|GNU GPL]]
|-
| CL-peg || [[Packrat parser|Packrat]] || [[Common Lisp]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[MIT License|MIT]]
|-
| Drat! || [[Packrat parser|Packrat]] || [[D (programming language)|D]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[GNU General Public License|GNU GPL]]
|-
| Frisby || [[Packrat parser|Packrat]] || [[Haskell]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[BSD licenses|BSD]]
|-
| [[tcllib|grammar::peg]] || [[Packrat parser|Packrat]] || [[Tcl]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[BSD licenses|BSD]]
|-
| Grako || [[Packrat parser|Packrat]] + Cut + Left Recursion || [[Python (programming language)|Python]], [[C++]] (beta) || {{D-P|Separate}} || {{Yes|All}} || {{Free}}, [[BSD licenses|BSD]]
|-
| IronMeta || [[Packrat parser|Packrat]] || [[C Sharp (programming language)|C#]] || {{D-A|Mixed}} || {{Some|[[Microsoft Windows|Windows]]}} || {{Free}}, [[BSD licenses|BSD]]
|-
| Laja || 2-phase scannerless top-down [[backtracking]] + runtime support || [[Java (programming language)|Java]] || {{D-P|Separate}} || {{Yes|All}} || {{Free}}, [[GNU General Public License|GNU GPL]]
|-
| lars::Parser || [[Packrat parser|Packrat]] (supporting left-recursion and grammar ambiguity) || [[C++]] || Identical || {{Yes|All}} || {{Free}}, [[BSD licenses|BSD]]
|-
| LPeg || Parsing machine || [[Lua (programming language)|Lua]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[MIT License|MIT]]
|-
| lug || Parsing machine || [[C++17]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[MIT License|MIT]]
|-
| Mouse || Recursive descent (modified, limited memoization and left-recursion) || [[Java (programming language)|Java]] || {{D-P|Separate}} || {{Some|[[Java virtual machine]]}} || {{Free}}, [[Apache License|Apache]] 2.0
|-
| Narwhal || [[Packrat parser|Packrat]] || [[C (programming language)|C]] || {{D-A|Mixed}} || {{Some|[[POSIX]], [[Microsoft Windows|Windows]]}} || {{Free}}, [[BSD licenses|BSD]]
|-
| Nearley || [[Earley parser|Earley]] || [[JavaScript]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[MIT License|MIT]]
|-
| Nemerle.Peg || Recursive descent + Pratt || [[Nemerle]] || {{D-P|Separate}} || {{Yes|All}} || {{Free}}, [[BSD licenses|BSD]]
|-
| neotoma || [[Packrat parser|Packrat]] || [[Erlang (programming language)|Erlang]] || {{D-P|Separate}} || {{Yes|All}} || {{Free}}, [[MIT License|MIT]]
|-
| nez<ref>{{Citation |title=Nez: practical open grammar language |date=2015-11-26 |arxiv=1511.08307 |last1=Kuramitsu |first1=Kimio }}</ref> || Parsing machine || [[Java (programming language)|Java]], [[C (programming language)|C]] || {{D-P|Separate}} || {{Some|[[Java virtual machine]]}} || {{Free}}, [[BSD License|BSD]]
|-
| NPEG || Recursive descent || [[C Sharp (programming language)|C#]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[MIT License|MIT]]
|-
| [[OMeta]] || [[Packrat parser|Packrat]] (modified, partial memoization) || [[JavaScript]], [[Squeak]], [[Python (programming language)|Python]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[MIT License|MIT]]
|-
| PackCC || [[Packrat parser|Packrat]] (modified, left-recursion support) || [[C (programming language)|C]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[MIT License|MIT]]
|-
| [[Packrat parser|Packrat]] || [[Packrat parser|Packrat]] || [[Scheme (programming language)|Scheme]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[MIT License|MIT]]
|-
| [[Pappy]] || [[Packrat parser|Packrat]] || [[Haskell]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[BSD licenses|BSD]]
|-
| [[Parboiled (Java)|parboiled]] || Recursive descent || [[Java (programming language)|Java]], [[Scala (programming language)|Scala]] || {{D-A|Mixed}} || {{Some|[[Java virtual machine]]}} || {{Free}}, [[Apache License|Apache]] 2.0
|-
| Lambda PEG || Recursive descent || [[Java (programming language)|Java]] || {{D-A|Mixed}} || {{Some|[[Java virtual machine]]}} || {{Free}}, [[Apache License|Apache]] 2.0
|-
| parsepp || Recursive descent || [[C++]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[public ___domain]]
|-
| Parsnip || [[Packrat parser|Packrat]] || [[C++]] || {{D-A|Mixed}} || {{Some|[[Microsoft Windows|Windows]]}} || {{Free}}, [[GNU General Public License|GNU GPL]]
|-
| Patterns || Parsing machine || [[Swift (programming language)|Swift]] || Identical || {{Yes|All}} || {{Free}}, [[MIT License|MIT]]
|-
| peg || Recursive descent || [[C (programming language)|C]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[MIT License|MIT]]
|-
| PEG.js || [[Packrat parser|Packrat]] (partial memoization) || [[JavaScript]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[MIT License|MIT]]
|-
| Peggy<ref>Maintained fork of PEG.js</ref> || [[Packrat parser|Packrat]] (partial memoization) || [[JavaScript]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[MIT License|MIT]]
|-
| Pegasus || Recursive descent, [[Packrat parser|Packrat]] (selectively) || [[C Sharp (programming language)|C#]] || {{D-A|Mixed}} || {{Some|[[Microsoft Windows|Windows]]}} || {{Free}}, [[MIT License|MIT]]
|-
| pegc || Recursive descent || [[C (programming language)|C]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[public ___domain]]
|-
| pest || Recursive descent || [[Rust (programming language)|Rust]] || {{D-P|Separate}} || {{Yes|All}} || {{Free}}, [[MIT License|MIT]], [[Apache License|Apache]] 2.0
|-
| PetitParser || [[Packrat parser|Packrat]] || [[Smalltalk]], [[Java (programming language)|Java]], [[Dart (programming language)|Dart]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[MIT License|MIT]]
|-
| PEGTL<ref>{{Citation |title=taocpp/PEGTL |date=2024-03-14 |url=https://github.com/taocpp/PEGTL |access-date=2024-03-16 |publisher=The Art of C++}}</ref>|| Recursive descent || [[C++11]], [[C++17]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[Boost Software License|Boost]]
|-
| [[Parser Grammar Engine]] (PGE) || Hybrid recursive descent / operator precedence<ref>{{cite web |url=https://parrot.github.com/html/docs/book/pct/ch04_pge.pod.html |title=Parrot: Grammar Engine |year=2011 |publisher=The Parrot Foundation |quote=PGE rules provide the full power of recursive descent parsing and operator precedence parsing.}}</ref> || [[Parrot virtual machine|Parrot bytecode]] || {{D-A|Mixed}} || {{Some|[[Parrot virtual machine]]}} || {{Free}}, [[Artistic License|Artistic]] 2.0
|-
| [[PyPy]] rlib || [[Packrat parser|Packrat]] || [[Python (programming language)|Python]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[MIT License|MIT]]
|-
| Rats! || [[Packrat parser|Packrat]] || [[Java (programming language)|Java]] || {{D-A|Mixed}} || {{Some|[[Java virtual machine]]}} || {{Free}}, [[GNU Lesser General Public License|GNU LGPL]]
|-
| Spirit2 || Recursive descent || [[C++]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[Boost Software License|Boost]]
|-
| Treetop || Recursive descent || [[Ruby (programming language)|Ruby]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[MIT License|MIT]]
|-
| Yard || Recursive descent || [[C++]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[MIT License|MIT]] or [[public ___domain]]
|-
| Waxeye || Parsing machine || [[C (programming language)|C]], [[Java (programming language)|Java]], [[JavaScript]], [[Python (programming language)|Python]], [[Racket (programming language)|Racket]], [[Ruby (programming language)|Ruby]] || {{D-P|Separate}} || {{Yes|All}} || {{Free}}, [[MIT License|MIT]]
|-
| PHP PEG || PEG Parser? || [[PHP]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[BSD licenses|BSD]]
|}
 
== General context-free, conjunctive, or Boolean languages ==
 
This table compares parser generator languages with a general [[context-free grammar]], a [[conjunctive grammar]], or a [[Boolean grammar]].
 
{| class="wikitable sortable" style="text-align: center; font-size: 85%; width: auto;"
|-
! Name !! [[Parsing]] algorithm !! Input grammar notation || [[Programming language|Output languages]] !! Grammar, code !! [[Lexical analyzer|Lexer]] !! Development platform !! [[Integrated development environment|IDE]] !! [[Software license|License]]
|-
| ACCENT || [[Earley parser|Earley]] || [[Yacc]] variant || [[C (programming language)|C]] || {{D-A|Mixed}} || external || {{Yes|All}} || {{No}} || {{Free}}, [[GNU General Public License|GNU GPL]]
|-
| APaGeD || [[GLR parser|GLR]], [[LALR parser|LALR]](1), [[LL parser|LL]](k) || ? || [[D (programming language)|D]] || {{D-A|Mixed}} || generated || {{Yes|All}} || {{No}} || {{Free}}, [[Artistic License|Artistic]]
|-
| [[GNU Bison|Bison]] || [[LALR parser|LALR]](1), [[Canonical LR parser|LR]](1), [[IELR parser|IELR]](1), [[GLR parser|GLR]] || [[Yacc]] || [[C (programming language)|C]], [[C++]], [[D (programming language)|D]],<ref>{{cite web |title=Decl Summary (Bison 3.8.1) |url=https://www.gnu.org/software/bison/manual/html_node/Decl-Summary.html |website=www.gnu.org}}</ref> [[Java (programming language)|Java]], [[XML]] || {{D-A|Mixed}}, except XML || external || {{Yes|All}} || {{No}} || {{Free}}, [[GNU General Public License|GNU GPL]]
|-
| [[DMS Software Reengineering Toolkit]] || [[GLR parser|GLR]] || ? || [[Parlanse]] || {{D-A|Mixed}} || generated || {{Some|[[Microsoft Windows|Windows]]}} || {{No}} || {{Proprietary}}
|-
| DParser || [[Scannerless parsing|Scannerless GLR]] || ? || [[C (programming language)|C]] || {{D-A|Mixed}} || [[Scannerless parsing|scannerless]] || {{Some|[[POSIX]]}} || {{No}} || {{Free}}, [[BSD licenses|BSD]]
|-
| Dypgen || [[Adaptive grammar|Runtime-extensible]] [[GLR parser|GLR]] || ? || [[OCaml]] || {{D-A|Mixed}} || generated || {{Yes|All}} || {{No}} || {{Free}}, [[CeCILL]]-B
|-
| E3 || [[Earley parser|Earley]] || ? || [[OCaml]] || {{D-A|Mixed}} || external, or scannerless || {{Yes|All}} || {{No}} || ?
|-
| Elkhound || [[GLR parser|GLR]] || ? || [[C++]], [[OCaml]] || {{D-A|Mixed}} || external || {{Yes|All}} || {{No}} || {{Free}}, [[BSD licenses|BSD]]
|-
| GDK || [[LALR parser|LALR]](1), [[GLR parser|GLR]] || ? || [[C (programming language)|C]], [[lex (software)|Lex]], [[Haskell]], [[HTML]], [[Java (programming language)|Java]], [[Object Pascal]], [[Yacc]] || {{D-A|Mixed}} || generated || {{Some|[[POSIX]]}} || {{No}} || {{Free}}, [[MIT License|MIT]]
|-
| Happy || [[LALR parser|LALR]], [[GLR parser|GLR]] || ? || [[Haskell]] || {{D-A|Mixed}} || external || {{Yes|All}} || {{No}} || {{Free}}, [[BSD licenses|BSD]]
|-
| Hime Parser Generator || [[GLR parser|GLR]] || ? || [[C Sharp (programming language)|C#]], [[Java (programming language)|Java]], [[Rust (programming language)|Rust]] || {{D-P|Separate}} || generated || {{Some|[[.NET]] framework, [[Java virtual machine]]}} || {{No}} || {{Free}}, [[GNU Lesser General Public License|GNU LGPL]]
|-
| IronText Library || [[LALR parser|LALR]](1), [[GLR parser|GLR]] || [[C Sharp (programming language)|C#]] || [[C Sharp (programming language)|C#]] || {{D-A|Mixed}} || generated or external || {{Some|[[.NET]] framework}} || {{No}} || {{Free}}, [[Apache License|Apache]] 2.0
|-
| Jison || [[LALR parser|LALR]](1), [[LR parser|LR]](0), [[SLR parser|SLR]](1) || [[Yacc]] || [[JavaScript]], [[C Sharp (programming language)|C#]], [[PHP]] || {{D-A|Mixed}} || generated || {{Yes|All}} || {{No}} || {{Free}}, [[MIT License|MIT]]
|-
| Syntax || [[LALR parser|LALR]](1), [[LR parser|LR]](0), [[SLR parser|SLR]](1) [[Canonical LR parser|CLR]](1) [[LL parser|LL]](1) || [[JSON]]/[[Yacc]] || [[JavaScript]], [[Python (programming language)|Python]], [[PHP]], [[Ruby (programming language)|Ruby]], [[C++]], [[C Sharp (programming language)|C#]], [[Rust (programming language)|Rust]], [[Java (programming language)|Java]] || {{D-A|Mixed}} || generated || {{Yes|All}} || {{No}} || {{Free}}, [[MIT License|MIT]]
|-
| Laja || Scannerless, two phase || Laja || [[Java (programming language)|Java]] || {{D-P|Separate}} || [[Scannerless parsing|scannerless]] || {{Yes|All}} || {{No}} || {{Free}}, [[GNU General Public License|GNU GPL]]
|-
| ModelCC || [[Earley parser|Earley]] || Annotated class model || [[Java (programming language)|Java]] || Generated || generated || {{Yes|All}} || {{No}} || {{Free}}, [[BSD licenses|BSD]]
|-
| P3 || Earley–combinators || BNF-like || [[OCaml]] || {{D-A|Mixed}} || external, or scannerless || {{Yes|All}} || {{No}} || ?
|-
| P4 || Earley–combinators, infinitary CFGs || BNF-like || [[OCaml]] || {{D-A|Mixed}} || external, or scannerless || {{Yes|All}} || {{No}} || ?
|-
| [[Scannerless Boolean Parser]] || [[Scannerless parsing|Scannerless GLR]] ([[Boolean grammar]]s) || ? || [[Haskell]], [[Java (programming language)|Java]] || {{D-P|Separate}} || [[Scannerless parsing|scannerless]] || {{Some|[[Java virtual machine]]}} || {{No}} || {{Free}}, [[BSD licenses|BSD]]
|-
| [[Syntax Definition Formalism|SDF]]/SGLR || [[Scannerless parsing|Scannerless GLR]] || [[Syntax Definition Formalism|SDF]] || [[C (programming language)|C]], [[Java (programming language)|Java]] || {{D-P|Separate}} || [[Scannerless parsing|scannerless]] || {{Yes|All}} || {{Yes}} || {{Free}}, [[BSD licenses|BSD]]
|-
| SmaCC || [[GLR parser|GLR]](1), [[LALR parser|LALR]](1), [[Canonical LR parser|LR]](1) || ? || [[Smalltalk]] || {{D-A|Mixed}} || internal || {{Yes|All}} || {{Yes}} || {{Free}}, [[MIT License|MIT]]
|-
| SPARK || [[Earley parser|Earley]] || ? || [[Python (programming language)|Python]] || {{D-A|Mixed}} || external || {{Yes|All}} || {{No}} || {{Free}}, [[MIT License|MIT]]
|-
| Tom || [[GLR parser|GLR]] || ? || [[C (programming language)|C]] || Generated || none || {{Yes|All}} || {{No}} || {{Free}}, "No licensing or copyright restrictions"
|-
| UltraGram || [[LALR parser|LALR]], [[LR parser|LR]], [[GLR parser|GLR]] || ? || [[C++]], [[C Sharp (programming language)|C#]], [[Java (programming language)|Java]], [[Visual Basic .NET]] || {{D-P|Separate}} || generated || {{Some|[[Microsoft Windows|Windows]]}} || {{Yes}} || {{Proprietary}}
|-
| Wormhole || [[Pruning (algorithm)|Pruning]], [[LR parser|LR]], [[GLR parser|GLR]], [[Scannerless parsing|Scannerless GLR]] || ? || [[C (programming language)|C]], [[Python (programming language)|Python]] || {{D-A|Mixed}} || [[Scannerless parsing|scannerless]] || {{Some|[[Microsoft Windows|Windows]]}} || {{No}} || {{Free}}, [[MIT License|MIT]]
|-
| Whale Calf || General tabular, [[LL parser|SLL]](k), Linear normal form ([[conjunctive grammar]]s), [[LR parser|LR]], Binary normal form ([[Boolean grammar]]s) || ? || [[C++]] || {{D-P|Separate}} || external || {{Yes|All}} || {{No}} || {{Proprietary}}
|-
| yaep || [[Earley parser|Earley]] || [[Yacc]]-like || [[C (programming language)|C]] || {{D-A|Mixed}} || external || {{Yes|All}} || {{No}} || {{Free}}, [[GNU Lesser General Public License|GNU LGPL]]
|}
 
== Context-sensitive grammars ==
 
This table compares parser generators with [[context-sensitive grammar]]s.
 
{| class="wikitable sortable"
! Name !! Parsing algorithm !! Input grammar notation !! Boolean grammar abilities !! Development platform !! [[Software license|License]]
|-
| [https://sourceforge.net/p/bnf2xml/ bnf2xml] || [[Recursive descent]] (is a text filter output is xml) || simple [[Backus–Naur form|BNF]]{{clarify|Only context-free grammars can be denoted in BNF.|date=January 2018}} grammar (input matching), output is xml || ? || Beta, and not a full EBNF parser || {{Free}}, [[GNU General Public License|GNU GPL]]
|}
 
== See also ==
* [[Compiler-compiler]]
* [[List of program transformation systems]]
* [[Comparison of regular expression engines]]
 
==Notes==
<references group="note"/>
 
==References==
{{Reflist}}
 
== External links ==
* [http://catalog.compilertools.net/lexparse.html The Catalog of Compiler Construction Tools]
* [http://java-source.net/open-source/parser-generators Open Source Parser Generators in Java]
 
{{Parsers}}
 
{{DEFAULTSORT:Comparison of parser generators}}
[[Category:Parser generators| ]]
[[Category:Parsing algorithms| ]]
[[Category:Software comparisons|Parser software]]