Software:Comparison of parser generators
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
- ↑ "Ragel State Machine Compiler". http://www.colm.net/open-source/ragel/.
- ↑ http://www.colm.net/open-source/ragel/
- ↑ "Adaptive Template:Tabular nums Parsing: The Power of Dynamic Analysis". Terence Parr. http://www.antlr.org/papers/allstar-techreport.pdf.
- ↑ 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.
- ↑ "Beaver - a LALR Parser Generator". https://beaver.sourceforge.net/.
- ↑ 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.
- ↑ "CL-Yacc — a LALR(1) parser generator for Common Lisp". https://www.irif.fr/~jch/software/cl-yacc/.
- ↑ 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.
- ↑ "CppCC's Home Page". https://cppcc.sourceforge.net/.
- ↑ "Java Cup". https://pages.cs.wisc.edu/~fischer/cs536.s06/course.hold/html/NOTES/4a.JAVA-CUP.html.
- ↑ "CUP". http://www2.cs.tum.edu/projects/cup/docs.php.
- ↑ 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.
- ↑ 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.
- ↑ 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.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.
- ↑ 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/.
- ↑ "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.
- ↑ 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.
- ↑ 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.
- ↑ "JavaCC" (in en-US). https://javacc.github.io/javacc/.
- ↑ "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.
- ↑ "[Lark Grammar Reference"]. General Syntax and notes. https://lark-parser.readthedocs.io/en/stable/grammar.html#general-syntax-and-notes.
- ↑ "The Lemon Parser Generator". https://sqlite.org/src/doc/trunk/doc/lemon.html#syntax.
- ↑ "The Lezer Parser System". https://lezer.codemirror.net/.
- ↑ "Building a ShopifyQL Code Editor" (in en). Shopify. https://shopify.engineering/building-a-shopifyql-code-editor.
- ↑ "Sponsoring the Lezer parser system | Tines". 2022-03-11. https://www.tines.com/blog/sponsoring-the-lezer-parser-system/.
- ↑ "An LR(*) parser generator for C++". http://lrstar.cc/.
- ↑ "Racc". https://i.loveruby.net/en/projects/racc/.
- ↑ "Racc Grammar File Reference". https://i.loveruby.net/en/projects/racc/doc/grammar.html.
- ↑ "The REX Parser Generator supports C, C++, Java, JavaScript, C#, Go, Haxe, Python, Scala, Typescript, XQuery, and XSLT". https://www.bottlecaps.de/rex/.
- ↑ "The SLK Parser Generator supports C, C++, Java, JavaScript, and C#, optional backtracking, free". http://www.slkpg.com/.
- ↑ "License agreement" (TXT). http://www.slkpg.com/license.txt.
- ↑ "SLY (Sly Lex Yacc)". https://sly.readthedocs.io/en/latest/sly.html.
- ↑ "Tree-Sitter - An incremental parsing system for programming tools". https://tree-sitter.github.io/.
- ↑ Adam Ślosarski (2007). "Visual BNF – software for defining formal (LALR) grammars and parser generation for .net framework" (in English). https://intralogic.eu/visualbnf.aspx.
- ↑ "Parse - Compile time (LR) type safe parser generator for C++". 30 December 2021. https://github.com/MathiasVP/Parse/.
- ↑ Kuramitsu, Kimio (2015-11-26), Nez: practical open grammar language
- ↑ Maintained fork of PEG.js
- ↑ taocpp/PEGTL, The Art of C++, 2024-03-14, https://github.com/taocpp/PEGTL, retrieved 2024-03-16
- ↑ "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."
- ↑ "Decl Summary (Bison 3.8.1)". https://www.gnu.org/software/bison/manual/html_node/Decl-Summary.html.
External links
