Software:Comparison of parser generators

From HandWiki
Short description: None


This is a list of notable lexer generators and parser generators for various language classes.

Regular languages

Regular languages are a category of languages (sometimes termed 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.)

Name Lexer algorithm Output languages Grammar, code Runtime License
Alex DFA Haskell Mixed All Free, BSD
AnnoFlex DFA Java Mixed JVM Free, BSD
Astir DFA table driven, with branching C++ Only grammar (actioned) All Free, MIT
AustenX DFA Java Separate All Free, BSD
C# Flex DFA C# Mixed .NET CLR Free, GNU GPL
C# Lex DFA C# Mixed .NET CLR ?
CookCC DFA Java Mixed JVM Free, Apache 2.0
DFA DFA compressed matrix C, C++ Separate Windows, Visual Studio BSD
Dolphin DFA C++ Separate All Proprietary
Flex DFA table driven C, C++ Mixed All Free, BSD
gelex DFA Eiffel Mixed Eiffel Free, MIT
golex DFA Go Mixed Go Free, BSD-style
gplex DFA C# Mixed .NET CLR Free, BSD-like
JFlex DFA Java Mixed JVM Free, BSD
JLex DFA Java Mixed JVM Free, BSD-like
lex DFA C Mixed POSIX Partial, proprietary, CDDL
lexertl DFA C++ ? All Free, GNU LGPL
Quex DFA direct code C, C++ Mixed All Free, GNU LGPL
Ragel DFA Go, C, C++, Java, assembly Mixed All Free, GNU GPL, MIT[1][2]
RE/flex DFA direct code, DFA table driven,
and NFA regex libraries
C++ Mixed All Free, BSD
re2c DFA direct code C, C++, Go, Rust Mixed All Free, public domain

Deterministic context-free languages

Context-free languages are a category of languages (sometimes termed 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 languages are a proper subset of the context-free languages which can be efficiently parsed by deterministic pushdown automata.

Name Parsing algorithm Input grammar notation Output languages Grammar, code Lexer Runtime IDE License
ANTLR4 Adaptive Template:Tabular nums[3] EBNF C#, Java, Python, JavaScript, C++, Swift, Go, PHP Separate generated JVM Yes Free, BSD
ANTLR3 Template:Tabular nums EBNF ActionScript, Ada95, C, C++, C#, Java, JavaScript, Objective-C, Perl, Python, Ruby Mixed generated JVM Yes Free, BSD
APG Recursive descent, backtracking ABNF Python, JavaScript, C, Java Separate none All No Free, BSD
Beaver[4][5] Template:Tabular nums EBNF Java Mixed external JVM No Free, BSD
Bison Template:Tabular nums, Template:Tabular nums, Template:Tabular nums, GLR Yacc C, C++, D, Java Mixed external All No Free, GNU GPL with exception
BtYacc Backtracking Bottom-up ? C++ Mixed external All No Free, public domain
byacc Template:Tabular nums Yacc C Mixed external All No Free, public domain
CL-Yacc[6][7] Template:Tabular nums Lisp Common Lisp Mixed external All No Free, MIT
Coco/R Template:Tabular nums + semantic predicates EBNF C, C++, C#, F#, Java, Ada, Object Pascal, Delphi, Modula-2, Oberon, Ruby, Swift, Unicon, Visual Basic .NET Mixed generated JVM, .NET framework, Windows, POSIX (depends on output language) No Free, GNU GPL
CppCC[8][9] Template:Tabular nums ? C++ Mixed generated POSIX No Free, GNU GPL
CUP[10][11] Template:Tabular nums ? Java Mixed external JVM No Free, BSD-like
Eli[12][13] Template:Tabular nums ? C Mixed generated POSIX No Free, GNU GPL, GNU LGPL
Essence[14] Template:Tabular nums ? Scheme 48 Mixed external All No Free, BSD
eyapp[15] Template:Tabular nums ? Perl Mixed external or generated All No Free, Artistic
GOLD[16] Template:Tabular nums BNF x86 assembly language, ANSI C, C#, D, Java, Pascal, Object Pascal, Python, Visual Basic 6, Visual Basic .NET, Visual C++ Separate generated Windows Yes Free, zlib modified
Hime Parser Generator[17] Template:Tabular nums, GLR BNF dialect C#, Java, Rust Separate generated .NET framework, JVM No Free, GNU LGPL
Hyacc[18] Template:Tabular nums Yacc C Mixed external All No Free, GNU GPL
JavaCC[19][20] Template:Tabular nums EBNF Java, C++, JavaScript (via GWT compiler)[21] Mixed generated JVM Yes Free, BSD
JFLAP Template:Tabular nums, Template:Tabular nums ? Java ? ? JVM Yes ?
JetPAG Template:Tabular nums ? C++ Mixed generated All No Free, GNU GPL
JS/CC Template:Tabular nums EBNF JavaScript, JScript, ECMAScript Mixed internal All Yes Free, BSD
KDevelop-PG-Qt Template:Tabular nums, backtracking, shunting-yard ? C++ Mixed generated or external All, KDE No Free, GNU LGPL
Kelbt Backtracking Template:Tabular nums ? C++ Mixed generated POSIX No Free, GNU GPL
kmyacc Template:Tabular nums ? C, Java, Perl, JavaScript Mixed external All No Free, GNU GPL
Lapg Template:Tabular nums ? C, C++, C#, Java, JavaScript Mixed generated JVM No Free, GNU GPL
Lark Template:Tabular nums, Earley (SPPF) EBNF derivative[22] Python, JavaScript Mixed generated All Yes Free, MIT
Lemon Template:Tabular nums BNF dialect[23] C Mixed external All No Free, public domain
Lezer[24][25][26] Template:Tabular nums, GLR EBNF dialect JavaScript Separate generated Node.js, JavaScript No Free, MIT
Lime Template:Tabular nums ? PHP Mixed external All No Free, GNU GPL
LISA Template:Tabular nums, Template:Tabular nums, Template:Tabular nums, Template:Tabular nums ? Java Mixed generated JVM Yes Free, public domain
LLgen Template:Tabular nums ? C Mixed external POSIX No Free, BSD
LLnextgen Template:Tabular nums ? C Mixed external All No Free, GNU GPL
LLLPG Template:Tabular nums + syntactic and semantic predicates ANTLR-like C# Mixed generated (?) .NET framework, Mono Visual Studio Free, GNU LGPL
LPG Backtracking Template:Tabular nums ? Java Mixed generated JVM No Free, EPL
LRSTAR[27] Template:Tabular nums, LALR(*) YACC, ANTLR, EBNF C++ Separate generated Windows Visual Studio Free, BSD
Menhir Template:Tabular nums ? OCaml Mixed generated All No Free, QPL
ML-Yacc Template:Tabular nums ? ML Mixed external All No ?
Monkey Template:Tabular nums ? Java Separate generated JVM No Free, GNU GPL
Msta Template:Tabular nums, LR(k) YACC, EBNF C, C++ Mixed external or generated POSIX, Cygwin No Free, GNU GPL
MTP (More Than Parsing) Template:Tabular nums ? Java Separate generated JVM No Free, GNU GPL
MyParser Template:Tabular nums Markdown C++11 Separate internal Any with standard C++11 compiler No Free, MIT
NLT GLR C#/BNF-like C# Mixed mixed .NET framework No Free, MIT
ocamlyacc Template:Tabular nums ? OCaml Mixed external All No Free, QPL
olex Template:Tabular nums ? C++ Mixed generated All No Free, GNU GPL
Parsec LL, backtracking Haskell Haskell Mixed none All No Free, BSD
yapp[15] Template:Tabular nums ? Perl Mixed external All No Free, GNU GPL
Parser Objects Template:Tabular nums ? Java Mixed ? JVM No Free, zlib
PCCTS LL ? C, C++ ? ? All No ?
PLY Template:Tabular nums BNF Python Mixed generated All No Free, MIT
PlyPlus Template:Tabular nums EBNF Python Separate generated All No Free, MIT
PRECC Template:Tabular nums ? C Separate generated MS-DOS, POSIX No Free, GNU GPL
QLALR Template:Tabular nums ? C++ Mixed external All No Free, GNU GPL
racc[28] Template:Tabular nums BNF-like, yacc-like[29] Ruby Mixed ? Windows, Linux, macOS, FreeBSD, NetBSD No LGPL
REX[30] Template:Tabular nums GLR PEG DFA Context-dependent lexing EBNF C++, C#, Java, JavaScript, Go, Haxe, Python, Scala, TypeScript, XQuery, XSLT Separate generated All No Free, Apache License 2.0
SableCC Template:Tabular nums ? C, C++, C#, Java, OCaml, Python Separate generated JVM No Free, GNU LGPL
SLK[31] Template:Tabular nums EBNF C, C++, C#, Java, JavaScript Separate external All No SLK[32]
SLY[33] Template:Tabular nums BNF Python Mixed generated All No Free, BSD
SP (Simple Parser) Recursive descent Python Python Separate generated All No Free, GNU LGPL
Spirit Recursive descent ? C++ Mixed internal All No Free, Boost
Styx Template:Tabular nums ? C, C++ Separate generated All No Free, GNU LGPL
Sweet Parser Template:Tabular nums ? C++ Separate generated Windows No Free, zlib
Tap Template:Tabular nums ? C++ Mixed generated All No Free, GNU GPL
TextTransformer Template:Tabular nums ? C++ Mixed generated Windows Yes Proprietary
TinyPG Template:Tabular nums ? C#, Visual Basic ? ? Windows Yes Partial, CPOL 1.0
Toy Parser Generator Recursive descent ? Python Mixed generated All No Free, GNU LGPL
TP Yacc Template:Tabular nums ? Turbo Pascal Mixed external All Yes Free, GNU GPL
Tree-Sitter[34] Template:Tabular nums, GLR JavaScript DSL, JSON C, bindings (Rust, WebAssembly, JavaScript, Python, many other) Separate generated + external All Neovim, Helix, GNU Emacs, Lapce, Zed Free, MIT
Tunnel Grammar Studio Tunnel Parsing ABNF C++ Separate generated Windows Yes Proprietary
UltraGram Template:Tabular nums, Template:Tabular nums, GLR BNF C++, Java, C#, Visual Basic .NET Separate external Windows Yes Free, public domain
UniCC Template:Tabular nums EBNF C, C++, Python, JavaScript, JSON, XML Mixed generated POSIX No Free, BSD
UrchinCC Template:Tabular nums ? Java ? generated JVM No ?
Yacc AT&T/Sun Template:Tabular nums Yacc C Mixed external POSIX No Free, CPL & CDDL
Yacc++ Template:Tabular nums, Template:Tabular nums Yacc C++, C# Mixed generated or external All No Proprietary
Yapps Template:Tabular nums ? Python Mixed generated All No Free, MIT
yecc Template:Tabular nums ? Erlang Separate generated All No Free, Apache 2.0
Visual BNF[35] Template:Tabular nums, Template:Tabular nums ? C# Separate generated .NET framework Yes Proprietary
YooParse Template:Tabular nums, Template:Tabular nums ? C++ Mixed external All No Free, MIT
Parse[36] Template:Tabular nums BNF in C++ types ? ? none C++11 standard compiler No Free, MIT
GGLL Template:Tabular nums Graph Java Mixed generated Windows Yes Free, MIT
Product Parsing algorithm Input grammar notation Output languages Grammar, code Lexer Runtime IDE License

Parsing expression grammars, deterministic Boolean grammars

This table compares parser generators with parsing expression grammars, deterministic Boolean grammars.

Name Parsing algorithm Output languages Grammar, code Runtime License
AustenX Packrat (modified) Java Separate All Free, BSD
Aurochs Packrat C, OCaml, Java Mixed All Free, GNU GPL
BNFlite Recursive descent C++ Mixed All Free, MIT
Canopy Packrat Java, JavaScript, Python, Ruby Separate All Free, GNU GPL
CL-peg Packrat Common Lisp Mixed All Free, MIT
Drat! Packrat D Mixed All Free, GNU GPL
Frisby Packrat Haskell Mixed All Free, BSD
grammar::peg Packrat Tcl Mixed All Free, BSD
Grako Packrat + Cut + Left Recursion Python, C++ (beta) Separate All Free, BSD
IronMeta Packrat C# Mixed Windows Free, BSD
Laja 2-phase scannerless top-down backtracking + runtime support Java Separate All Free, GNU GPL
lars::Parser Packrat (supporting left-recursion and grammar ambiguity) C++ Identical All Free, BSD
LPeg Parsing machine Lua Mixed All Free, MIT
lug Parsing machine C++17 Mixed All Free, MIT
Mouse Recursive descent (modified, limited memoization and left-recursion) Java Separate JVM Free, Apache 2.0
Narwhal Packrat C Mixed POSIX, Windows Free, BSD
Nearley Earley JavaScript Mixed All Free, MIT
Nemerle.Peg Recursive descent + Pratt Nemerle Separate All Free, BSD
neotoma Packrat Erlang Separate All Free, MIT
nez[37] Parsing machine Java, C Separate JVM Free, BSD
NPEG Recursive descent C# Mixed All Free, MIT
OMeta Packrat (modified, partial memoization) JavaScript, Squeak, Python Mixed All Free, MIT
PackCC Packrat (modified, left-recursion support) C Mixed All Free, MIT
Packrat Packrat Scheme Mixed All Free, MIT
Pappy Packrat Haskell Mixed All Free, BSD
parboiled Recursive descent Java, Scala Mixed JVM Free, Apache 2.0
Lambda PEG Recursive descent Java Mixed JVM Free, Apache 2.0
parsepp Recursive descent C++ Mixed All Free, public domain
Parsnip Packrat C++ Mixed Windows Free, GNU GPL
Patterns Parsing machine Swift Identical All Free, MIT
peg Recursive descent C Mixed All Free, MIT
PEG.js Packrat (partial memoization) JavaScript Mixed All Free, MIT
Peggy[38] Packrat (partial memoization) JavaScript Mixed All Free, MIT
Pegasus Recursive descent, Packrat (selectively) C# Mixed Windows Free, MIT
pegc Recursive descent C Mixed All Free, public domain
pest Recursive descent Rust Separate All Free, MIT, Apache 2.0
PetitParser Packrat Smalltalk, Java, Dart Mixed All Free, MIT
PEGTL[39] Recursive descent C++11, C++17 Mixed All Free, Boost
Parser Grammar Engine (PGE) Hybrid recursive descent / operator precedence[40] Parrot bytecode Mixed Parrot virtual machine Free, Artistic 2.0
PyPy rlib Packrat Python Mixed All Free, MIT
Rats! Packrat Java Mixed JVM Free, GNU LGPL
Spirit2 Recursive descent C++ Mixed All Free, Boost
Treetop Recursive descent Ruby Mixed All Free, MIT
Yard Recursive descent C++ Mixed All Free, MIT or public domain
Waxeye Parsing machine C, Java, JavaScript, Python, Racket, Ruby Separate All Free, MIT
PHP PEG PEG Parser? PHP Mixed All Free, 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.

Name Parsing algorithm Input grammar notation Output languages Grammar, code Lexer Runtime IDE License
ACCENT Earley Yacc variant C Mixed external All No Free, GNU GPL
APaGeD GLR, Template:Tabular nums, Template:Tabular nums ? D Mixed generated All No Free, Artistic
Bison Template:Tabular nums, Template:Tabular nums, Template:Tabular nums, GLR Yacc C, C++, D,[41] Java, XML Mixed, except XML external All No Free, GNU GPL
DMS Software Reengineering Toolkit GLR ? Parlanse Mixed generated Windows No Proprietary
DParser Scannerless GLR ? C Mixed scannerless POSIX No Free, BSD
Dypgen Runtime-extensible GLR ? OCaml Mixed generated All No Free, CeCILL-B
E3 Earley ? OCaml Mixed external, or scannerless All No ?
Elkhound GLR ? C++, OCaml Mixed external All No Free, BSD
GDK Template:Tabular nums, GLR ? C, Lex, Haskell, HTML, Java, Object Pascal, Yacc Mixed generated POSIX No Free, MIT
Happy LALR, GLR ? Haskell Mixed external All No Free, BSD
Hime Parser Generator GLR ? C#, Java, Rust Separate generated .NET framework, JVM No Free, GNU LGPL
IronText Library Template:Tabular nums, GLR C# C# Mixed generated or external .NET framework No Free, Apache 2.0
Jison Template:Tabular nums, LR(0), SLR(1) Yacc JavaScript, C#, PHP Mixed generated All No Free, MIT
Syntax Template:Tabular nums, LR(0), SLR(1) CLR(1) Template:Tabular nums JSON/Yacc JavaScript, Python, PHP, Ruby, C++, C#, Rust, Java Mixed generated All No Free, MIT
Laja Scannerless, two phase Laja Java Separate scannerless All No Free, GNU GPL
ModelCC Earley Annotated class model Java Generated generated All No Free, BSD
P3 Earley–combinators BNF-like OCaml Mixed external, or scannerless All No ?
P4 Earley–combinators, infinitary CFGs BNF-like OCaml Mixed external, or scannerless All No ?
Scannerless Boolean Parser Scannerless GLR (Boolean grammars) ? Haskell, Java Separate scannerless JVM No Free, BSD
SDF/SGLR Scannerless GLR SDF C, Java Separate scannerless All Yes Free, BSD
SmaCC GLR(1), Template:Tabular nums, Template:Tabular nums ? Smalltalk Mixed internal All Yes Free, MIT
SPARK Earley ? Python Mixed external All No Free, MIT
Tom GLR ? C Generated none All No Free, "No licensing or copyright restrictions"
UltraGram LALR, LR, GLR ? C++, C#, Java, Visual Basic .NET Separate generated Windows Yes Proprietary
Wormhole Pruning, LR, GLR, Scannerless GLR ? C, Python Mixed scannerless Windows No Free, MIT
Whale Calf General tabular, SLL(k), Linear normal form (conjunctive grammars), LR, Binary normal form (Boolean grammars) ? C++ Separate external All No Proprietary
yaep Earley Yacc-like C Mixed external All No Free, GNU LGPL

Context-sensitive grammars

This table compares parser generators with context-sensitive grammars.

Name Parsing algorithm Input grammar notation Boolean grammar abilities Runtime License
bnf2xml Recursive descent
(is a text filter output is xml)
simple BNF[clarification needed] grammar (input matching),
output is xml
? Beta, and not a full EBNF parser Free, GNU GPL

See also

References

  1. ↑ "Ragel State Machine Compiler". http://www.colm.net/open-source/ragel/. 
  2. ↑ http://www.colm.net/open-source/ragel/
  3. ↑ "Adaptive Template:Tabular nums Parsing: The Power of Dynamic Analysis". Terence Parr. http://www.antlr.org/papers/allstar-techreport.pdf. 
  4. ↑ Boyland, John; Spiewak, Daniel (2010-09-17). "Tool Paper: ScalaBison Recursive Ascent-Descent Parser Generator". Electronic Notes in Theoretical Computer Science. Proceedings of the Ninth Workshop on Language Descriptions Tools and Applications (LDTA 2009) 253 (7): 65–74. doi:10.1016/j.entcs.2010.08.032. ISSN 1571-0661. 
  5. ↑ "Beaver - a LALR Parser Generator". https://beaver.sourceforge.net/. 
  6. ↑ Newton, Jim E.; Demaille, Akim; Verna, Didier (2016-05-09). "Type-Checking of Heterogeneous Sequences in Common Lisp". Proceedings of the 9th European Lisp Symposium on European Lisp Symposium. ELS2016 (Kraków, Poland: European Lisp Scientific Activities Association): 13–20. ISBN 978-2-9557474-0-7. https://www.lrde.epita.fr/dload/papers/newton.16.rte.report.pdf. 
  7. ↑ "CL-Yacc — a LALR(1) parser generator for Common Lisp". https://www.irif.fr/~jch/software/cl-yacc/. 
  8. ↑ Hosseinpour, Sahereh; Alavi Milani, Mir Mohammad Reza; Pehlivan, Hüseyin (July 2018). "A Step-by-Step Solution Methodology for Mathematical Expressions" (in en). Symmetry 10 (7): 285. doi:10.3390/sym10070285. ISSN 2073-8994. Bibcode: 2018Symm...10..285H. 
  9. ↑ "CppCC's Home Page". https://cppcc.sourceforge.net/. 
  10. ↑ "Java Cup". https://pages.cs.wisc.edu/~fischer/cs536.s06/course.hold/html/NOTES/4a.JAVA-CUP.html. 
  11. ↑ "CUP". http://www2.cs.tum.edu/projects/cup/docs.php. 
  12. ↑ Thiemann, Peter; Neubauer, Matthias (2004-12-31). "Parameterized LR Parsing". Electronic Notes in Theoretical Computer Science. Proceedings of the Fourth Workshop on Language Descriptions, Tools, and Applications (LDTA 2004) 110: 115–132. doi:10.1016/j.entcs.2004.06.007. ISSN 1571-0661. 
  13. ↑ Gray, Robert W.; Levi, Steven P.; Heuring, Vincent P.; Sloane, Anthony M.; Waite, William M. (1992). "Eli: a complete, flexible compiler construction system" (in en). Communications of the ACM 35 (2): 121–130. doi:10.1145/129630.129637. ISSN 0001-0782. 
  14. ↑ Owens, Scott; Flatt, M.; Shivers, O.; McMullan, Benjamin (2004-10-01). "Lexer and Parser Generators in Scheme". Scheme 2004: Proceedings of the Fifth Workshop on Scheme and Functional Programming. https://www.khoury.northeastern.edu/home/shivers/papers/scmparse.pdf. 
  15. ↑ 15.0 15.1 Areias, Hugo; Simões, Alberto; Henriques, P.; Cruz, Daniela Carneiro da (2010-09-01). "Parser generation in Perl: an overview and available tools". Compilers, Programming Languages, Related Technologies and Applications 2010. https://core.ac.uk/download/pdf/55615107.pdf. 
  16. ↑ Volkman, Victor (2007-07-19). "Let Your Parser Go for the GOLD" (in en-US). https://www.developer.com/java/let-your-parser-go-for-the-gold/. 
  17. ↑ "Parsing in C#: All the Tools and Libraries You Can Use (Part 2) - DZone" (in en). https://dzone.com/articles/parsing-in-c-all-the-tools-and-libraries-you-can-u-1. 
  18. ↑ Ortin, Francisco; Quiroga, Jose; Rodriguez-Prieto, Oscar; Garcia, Miguel (2022-03-03). "An empirical evaluation of Lex/Yacc and ANTLR parser generation tools" (in en). PLOS ONE 17 (3). doi:10.1371/journal.pone.0264326. ISSN 1932-6203. PMID 35239695. Bibcode: 2022PLoSO..1764326O. 
  19. ↑ Enseling, Oliver (2000-12-29). "Build your own languages with JavaCC" (in en). https://www.infoworld.com/article/2076269/build-your-own-languages-with-javacc.html. 
  20. ↑ "JavaCC" (in en-US). https://javacc.github.io/javacc/. 
  21. ↑ "Building parsers for the web with JavaCC & GWT (Part one)". Chris Ainsley. 14 April 2014. http://consoliii.blogspot.co.uk/2014/04/creating-gwt-compatible-parser-using.html. 
  22. ↑ "[Lark Grammar Reference"]. General Syntax and notes. https://lark-parser.readthedocs.io/en/stable/grammar.html#general-syntax-and-notes. 
  23. ↑ "The Lemon Parser Generator". https://sqlite.org/src/doc/trunk/doc/lemon.html#syntax. 
  24. ↑ "The Lezer Parser System". https://lezer.codemirror.net/. 
  25. ↑ "Building a ShopifyQL Code Editor" (in en). Shopify. https://shopify.engineering/building-a-shopifyql-code-editor. 
  26. ↑ "Sponsoring the Lezer parser system | Tines". 2022-03-11. https://www.tines.com/blog/sponsoring-the-lezer-parser-system/. 
  27. ↑ "An LR(*) parser generator for C++". http://lrstar.cc/. 
  28. ↑ "Racc". https://i.loveruby.net/en/projects/racc/. 
  29. ↑ "Racc Grammar File Reference". https://i.loveruby.net/en/projects/racc/doc/grammar.html. 
  30. ↑ "The REX Parser Generator supports C, C++, Java, JavaScript, C#, Go, Haxe, Python, Scala, Typescript, XQuery, and XSLT". https://www.bottlecaps.de/rex/. 
  31. ↑ "The SLK Parser Generator supports C, C++, Java, JavaScript, and C#, optional backtracking, free". http://www.slkpg.com/. 
  32. ↑ "License agreement" (TXT). http://www.slkpg.com/license.txt. 
  33. ↑ "SLY (Sly Lex Yacc)". https://sly.readthedocs.io/en/latest/sly.html. 
  34. ↑ "Tree-Sitter - An incremental parsing system for programming tools". https://tree-sitter.github.io/. 
  35. ↑ Adam Ślosarski (2007). "Visual BNF – software for defining formal (LALR) grammars and parser generation for .net framework" (in English). https://intralogic.eu/visualbnf.aspx. 
  36. ↑ "Parse - Compile time (LR) type safe parser generator for C++". 30 December 2021. https://github.com/MathiasVP/Parse/. 
  37. ↑ Kuramitsu, Kimio (2015-11-26), Nez: practical open grammar language 
  38. ↑ Maintained fork of PEG.js
  39. ↑ taocpp/PEGTL, The Art of C++, 2024-03-14, https://github.com/taocpp/PEGTL, retrieved 2024-03-16 
  40. ↑ "Parrot: Grammar Engine". The Parrot Foundation. 2011. https://parrot.github.com/html/docs/book/pct/ch04_pge.pod.html. "PGE rules provide the full power of recursive descent parsing and operator precedence parsing." 
  41. ↑ "Decl Summary (Bison 3.8.1)". https://www.gnu.org/software/bison/manual/html_node/Decl-Summary.html.