Content deleted Content added
incompilete -> incomplete |
m HTTP to HTTPS for SourceForge |
||
Line 1:
{{short description|None}}
{{More citations needed|date=July 2023}}
This is a list of notable [[lexer generator]]s and [[parser generator]]s for various language classes.
== 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;"
|-
! Name !!Lexer algorithm !! [[Programming language|Output languages]] !! Grammar, code !! Development platform !! [[Software license|License]]
|-
| Alex || [[Deterministic finite automaton|DFA]] || [[Haskell]] || {{D-A|Mixed}} || {{Yes|All}} || {{Free}}, [[BSD licenses|BSD]]
|-
| AnnoFlex || [
|-
| Astir|| [[Deterministic finite automaton|DFA]] table driven, with branching || [[C++]] || {{D-P|Only grammar (actioned)}} || {{Yes|All}} || {{Free}}, [[MIT License|MIT]]
|-
| AustenX || [[Deterministic finite automaton|DFA]] || [[Java (programming language)|Java]] || {{D-P|Separate}} || {{Yes|All}} || {{Free}}, [[BSD licenses|BSD]]
|-
| 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]]
|-
| C# Lex || [[Deterministic finite automaton|DFA]] || [[C Sharp (programming language)|C#]] || {{D-A|Mixed}} || {{Some|[[Common Language Runtime|.NET CLR]]}} || ?
|-
| CookCC || [[Deterministic finite automaton|DFA]] || [[Java (programming language)|Java]] || {{D-A|Mixed}} || {{Some|[[Java virtual machine]]}} || {{Free}}, [[Apache License|Apache]] 2.0
|-
| DFA || [[Deterministic finite automaton|DFA]] compressed matrix || [[C (programming language)|C]], [[C++]] || {{D-P|Separate}} || Windows, Visual Studio || [[BSD licenses|BSD]]
|-
| Dolphin || [[Deterministic finite automaton|DFA]] || [[C++]] || {{D-P|Separate}} || {{Yes|All}} || {{Proprietary}}
|-
| [[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]]
|-
| gelex || [[Deterministic finite automaton|DFA]] || [[Eiffel (programming language)|Eiffel]] || {{D-A|Mixed}} || {{Some|[[Eiffel (programming language)|Eiffel]]}} || {{Free}}, [[MIT License|MIT]]
|-
| golex || [[Deterministic finite automaton|DFA]] || [[Go (programming language)|Go]] || {{D-A|Mixed}} || {{Some|[[Go (programming language)|Go]]}} || {{Free}}, [[BSD licenses|BSD]]-style
|-
| gplex || [[Deterministic finite automaton|DFA]] || [[C Sharp (programming language)|C#]] || {{D-A|Mixed}} || {{Some|[[Common Language Runtime|.NET CLR]]}} || {{Free}}, [[BSD licenses|BSD]]-like
|-
| JFlex || [
|-
| JLex || [
|-
| [[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]]
|-
|
|-
| 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]]
|-
| [[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>
|-
| 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]]
|-
| [[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]]
|}
== Deterministic context-free languages ==
[[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.)
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]]
|