Comparison of parser generators

Last updated

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

Contents

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.)

NameLexer algorithm Output languages Grammar, codeDevelopment platform License
Alex DFA Haskell MixedAllFree, BSD
AnnoFlex DFA Java Mixed Java virtual machine Free, BSD
Astir DFA table driven, with branching C++ Only grammar (actioned)AllFree, MIT
AustenX DFA Java SeparateAllFree, BSD
C# Flex DFA C# Mixed .NET CLR Free, GNU GPL
C# Lex DFA C# Mixed .NET CLR  ?
CookCC DFA Java Mixed Java virtual machine Free, Apache 2.0
DFA DFA compressed matrix C, C++ SeparateWindows, Visual Studio BSD
Dolphin DFA C++ SeparateAll Proprietary
Flex DFA table driven C, C++ MixedAllFree, 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 Java virtual machine Free, BSD
JLex DFA Java Mixed Java virtual machine Free, BSD-like
lex DFA C Mixed POSIX Partial, proprietary, CDDL
lexertl DFA C++  ?AllFree, GNU LGPL
Quex DFA direct code C, C++ MixedAllFree, GNU LGPL
Ragel DFA Go, C, C++, assembly MixedAllFree, GNU GPL, MIT [1] [2]
RE/flex DFA direct code, DFA table driven, and NFA regex libraries C++ MixedAllFree, BSD
re2c DFA direct code C, C++, Go, Rust MixedAllFree, 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 algorithmInput grammar notation Output languages Grammar, code Lexer Development platform IDE License
ANTLR4Adaptive LL(*) [3] EBNF C#, Java, Python, JavaScript, C++, Swift, Go, PHP Separategenerated Java virtual machine YesFree, BSD
ANTLR3 LL(*) EBNF ActionScript, Ada95, C, C++, C#, Java, JavaScript, Objective-C, Perl, Python, Ruby Mixedgenerated Java virtual machine YesFree, BSD
APG [4] Recursive descent, backtracking ABNF Python, JavaScript, C, Java SeparatenoneAllNoFree, BSD
Beaver [5] [6] LALR(1) EBNF Java Mixedexternal Java virtual machine NoFree, BSD
Bison LALR(1), LR(1), IELR(1), GLR Yacc C, C++, Java MixedexternalAllNoFree, GNU GPL with exception
BtYacc Backtracking Bottom-up  ? C++ MixedexternalAllNoFree, public domain
byacc LALR(1) Yacc C MixedexternalAllNoFree, public domain
CL-Yacc [7] [8] LALR(1) Lisp Common Lisp MixedexternalAllNoFree, MIT
Coco/R LL(1) EBNF C, C++, C#, F#, Java, Ada, Object Pascal, Delphi, Modula-2, Oberon, Ruby, Swift, Unicon, Visual Basic .NET Mixedgenerated Java virtual machine, .NET framework, Windows, POSIX (depends on output language)NoFree, GNU GPL
CppCC [9] [10] LL(k) ? C++ Mixedgenerated POSIX NoFree, GNU GPL
CUP [11] [12] LALR(1) ? Java Mixedexternal Java virtual machine NoFree, BSD-like
Eli [13] [14] LALR(1) ? C Mixedgenerated POSIX NoFree, GNU GPL, GNU LGPL
Essence [15] LR(?) ? Scheme 48 MixedexternalAllNoFree, BSD
eyapp [16] LALR(1) ? Perl Mixedexternal or generatedAllNoFree, Artistic
GOLD [17] LALR(1)BNF x86 assembly language, ANSI C, C#, D, Java, Pascal, Object Pascal, Python, Visual Basic 6, Visual Basic .NET, Visual C++ Separategenerated Windows YesFree, zlib modified
Hime Parser Generator [18] LALR(1), GLR BNF dialect C#, Java, Rust Separategenerated .NET framework, Java virtual machine NoFree, GNU LGPL
Hyacc [19] LR(1), LALR(1), LR(0) Yacc C MixedexternalAllNoFree, GNU GPL
JavaCC [20] [21] LL(k) EBNF Java, C++, JavaScript (via GWT compiler) [22] Mixedgenerated Java virtual machine YesFree, BSD
JFLAP LL(1), LALR(1) ? Java  ? ? Java virtual machine Yes ?
JetPAG LL(k) ? C++ MixedgeneratedAllNoFree, GNU GPL
JS/CC LALR(1) EBNF JavaScript, JScript, ECMAScript MixedinternalAllYesFree, BSD
KDevelop-PG-Qt LL(1), backtracking, shunting-yard  ? C++ Mixedgenerated or externalAll, KDE NoFree, GNU LGPL
Kelbt Backtracking LALR(1) ? C++ Mixedgenerated POSIX NoFree, GNU GPL
kmyacc LALR(1) ? C, Java, Perl, JavaScript MixedexternalAllNoFree, GNU GPL
Lapg LALR(1) ? C, C++, C#, Java, JavaScript Mixedgenerated Java virtual machine NoFree, GNU GPL
Lark LALR(1), Earley (SPPF) EBNF Python, JavaScript MixedgeneratedAllYesFree, MIT
Lemon LALR(1)BNF dialect [23] C MixedexternalAllNoFree, public domain
Lezer [24] [25] [26] LR(1), GLR EBNF dialect JavaScript Separategenerated Node.js, JavaScript NoFree, MIT
Lime LALR(1) ? PHP MixedexternalAllNoFree, GNU GPL
LISA LR(?), LL(?), LALR(?), SLR(?) ? Java Mixedgenerated Java virtual machine YesFree, public domain
LLgen LL(1) ? C Mixedexternal POSIX NoFree, BSD
LLnextgen LL(1) ? C MixedexternalAllNoFree, GNU GPL
LLLPG LL(k) + syntactic and semantic predicatesANTLR-like C# Mixedgenerated (?) .NET framework, Mono Visual Studio Free, GNU LGPL
LPG Backtracking LALR(k) ? Java Mixedgenerated Java virtual machine NoFree, EPL
LRSTAR [27] LALR(1), LALR(*)YACC, ANTLR, EBNF C++ Separategenerated Windows Visual Studio Free, BSD
Menhir LR(1) ? OCaml MixedgeneratedAllNoFree, QPL
ML-Yacc LALR(1) ? ML MixedexternalAllNo ?
Monkey LR(1) ? Java Separategenerated Java virtual machine NoFree, GNU GPL
Msta LALR(k), LR(k) YACC, EBNF C, C++ Mixedexternal or generated POSIX, Cygwin NoFree, GNU GPL
MTP (More Than Parsing) LL(1) ? Java Separategenerated Java virtual machine NoFree, GNU GPL
MyParser LL(*) Markdown C++11 SeparateinternalAny with standard C++11 compilerNoFree, MIT
NLT GLR C#/BNF-like C# Mixedmixed .NET frameworkNoFree, MIT
ocamlyacc LALR(1) ? OCaml MixedexternalAllNoFree, QPL
olex LL(1) ? C++ MixedgeneratedAllNoFree, GNU GPL
Parsec LL, backtracking Haskell Haskell MixednoneAllNoFree, BSD
yapp [16] LALR(1) ? Perl MixedexternalAllNoFree, GNU GPL
Parser Objects LL(k) ? Java Mixed ? Java virtual machine NoFree, zlib
PCCTS LL  ? C, C++  ? ?AllNo ?
PLY LALR(1)BNF Python MixedgeneratedAllNoFree, MIT
PlyPlus LALR(1)EBNF Python SeparategeneratedAllNoFree, MIT
PRECC LL(k) ? C Separategenerated DOS, POSIX NoFree, GNU GPL
racc [28] LALR(1) BNF-like, yacc-like [29] Ruby Mixed ?Windows, Linux, macOS, FreeBSD, NetBSDNo LGPL
QLALR LALR(1) ? C++ MixedexternalAllNoFree, GNU GPL
SableCC LALR(1) ? C, C++, C#, Java, OCaml, Python Separategenerated Java virtual machine NoFree, GNU LGPL
SLK [30] LL(k) LR(k) LALR(k) EBNF C, C++, C#, Java, JavaScript SeparateexternalAllNoSLK [31]
SLY [32] LALR(1)BNF Python MixedgeneratedAllNoFree, MIT
SP (Simple Parser) Recursive descent Python Python SeparategeneratedAllNoFree, GNU LGPL
Spirit Recursive descent  ? C++ MixedinternalAllNoFree, Boost
Styx LALR(1) ? C, C++ SeparategeneratedAllNoFree, GNU LGPL
Sweet Parser LALR(1) ? C++ Separategenerated Windows NoFree, zlib
Tap LL(1) ? C++ MixedgeneratedAllNoFree, GNU GPL
TextTransformer LL(k) ? C++ Mixedgenerated Windows Yes Proprietary
TinyPG LL(1) ? C#, Visual Basic  ? ? Windows YesPartial, CPOL 1.0
Toy Parser Generator Recursive descent  ? Python MixedgeneratedAllNoFree, GNU LGPL
TP Yacc LALR(1) ? Turbo Pascal MixedexternalAllYesFree, GNU GPL
Tree-Sitter [33] LR(1), GLR JavaScript DSL, JSON C, bindings (Rust, WebAssembly, JavaScript, Python, many other)Separategenerated + externalAll Neovim, Visual Studio Code Free, MIT
Tunnel Grammar Studio Tunnel Parsing ABNF C++ Separategenerated Windows Yes Proprietary
UltraGram LALR(1), LR(1), GLR BNF C++, Java, C#, Visual Basic .NETSeparateexternal Windows YesFree, public domain
UniCC LALR(1) EBNF C, C++, Python, JavaScript, JSON, XML Mixedgenerated POSIX NoFree, BSD
UrchinCC LL(1) ?Java ?generated Java virtual machine No ?
Yacc AT&T/Sun LALR(1) Yacc C Mixedexternal POSIX NoFree, CPL & CDDL
Yacc++ LR(1), LALR(1) Yacc C++, C# Mixedgenerated or externalAllNo Proprietary
Yapps LL(1) ? Python MixedgeneratedAllNoFree, MIT
yecc LALR(1) ? Erlang SeparategeneratedAllNoFree, Apache 2.0
Visual BNF LR(1), LALR(1) ? C# Separategenerated .NET frameworkYes Proprietary
YooParse LR(1), LALR(1) ? C++ MixedexternalAllNoFree, MIT
Parse [34] LR(1)BNF in C++ types ? ?noneC++11 standard compilerNoFree, MIT
GGLL LL(1)Graph Java Mixedgenerated Windows YesFree, MIT
Product Parsing algorithmInput grammar notation Output languages Grammar, code Lexer Development platform 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, codeDevelopment platform License
AustenX Packrat (modified) Java SeparateAllFree, BSD
Aurochs Packrat C, OCaml, Java MixedAllFree, GNU GPL
BNFliteRecursive descent C++ MixedAllFree, MIT
Canopy Packrat Java, JavaScript, Python, Ruby SeparateAllFree, GNU GPL
CL-peg Packrat Common Lisp MixedAllFree, MIT
Drat! Packrat D MixedAllFree, GNU GPL
Frisby Packrat Haskell MixedAllFree, BSD
grammar::peg Packrat Tcl MixedAllFree, BSD
Grako Packrat + Cut + Left Recursion Python, C++ (beta)SeparateAllFree, BSD
IronMeta Packrat C# Mixed Windows Free, BSD
Laja2-phase scannerless top-down backtracking + runtime support Java SeparateAllFree, GNU GPL
lars::Parser Packrat (supporting left-recursion and grammar ambiguity) C++ IdenticalAllFree, BSD
LPegParsing machine Lua MixedAllFree, MIT
lugParsing machine C++17 MixedAllFree, MIT
MouseRecursive descent (modified, limited memoization and left-recursion) Java Separate Java virtual machine Free, Apache 2.0
Narwhal Packrat C Mixed POSIX, Windows Free, BSD
Nearley Earley JavaScript MixedAllFree, MIT
Nemerle.PegRecursive descent + Pratt Nemerle SeparateAllFree, BSD
neotoma Packrat Erlang SeparateAllFree, MIT
NPEGRecursive descent C# MixedAllFree, MIT
OMeta Packrat (modified, partial memoization) JavaScript, Squeak, Python MixedAllFree, MIT
PackCC Packrat (modified, left-recursion support) C MixedAllFree, MIT
Packrat Packrat Scheme MixedAllFree, MIT
Pappy Packrat Haskell MixedAllFree, BSD
parboiled Recursive descent Java, Scala Mixed Java virtual machine Free, Apache 2.0
Lambda PEGRecursive descent Java Mixed Java virtual machine Free, Apache 2.0
parseppRecursive descent C++ MixedAllFree, public domain
Parsnip Packrat C++ Mixed Windows Free, GNU GPL
PatternsParsing machine Swift IdenticalAllFree, MIT
pegRecursive descent C MixedAllFree, MIT
PEG.js Packrat (partial memoization) JavaScript MixedAllFree, MIT
Peggy [35] Packrat (partial memoization) JavaScript MixedAllFree, MIT
PegasusRecursive descent, Packrat (selectively) C# Mixed Windows Free, MIT
pegcRecursive descent C MixedAllFree, public domain
pestRecursive descent Rust SeparateAllFree, MIT, Apache 2.0
PetitParser Packrat Smalltalk, Java, Dart MixedAllFree, MIT
PEGTL [36] Recursive descent C++11, C++17 MixedAllFree, Boost
Parser Grammar Engine (PGE)Hybrid recursive descent / operator precedence [37] Parrot bytecode Mixed Parrot virtual machine Free, Artistic 2.0
PyPy rlib Packrat Python MixedAllFree, MIT
Rats! Packrat Java Mixed Java virtual machine Free, GNU LGPL
Spirit2Recursive descent C++ MixedAllFree, Boost
TreetopRecursive descent Ruby MixedAllFree, MIT
YardRecursive descent C++ MixedAllFree, MIT or public domain
WaxeyeParsing machine C, Java, JavaScript, Python, Racket, Ruby SeparateAllFree, MIT
PHP PEGPEG Parser? PHP MixedAllFree, 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 algorithmInput grammar notation Output languages Grammar, code Lexer Development platform IDE License
ACCENT Earley Yacc variant C MixedexternalAllNoFree, GNU GPL
APaGeD GLR, LALR(1), LL(k) ? D MixedgeneratedAllNoFree, Artistic
Bison LALR(1), LR(1), IELR(1), GLR Yacc C, C++, Java, XML Mixed, except XMLexternalAllNoFree, GNU GPL
DMS Software Reengineering Toolkit GLR  ? Parlanse Mixedgenerated Windows No Proprietary
DParser Scannerless GLR  ? C Mixed scannerless POSIX NoFree, BSD
Dypgen Runtime-extensible GLR  ? OCaml MixedgeneratedAllNoFree, CeCILL-B
E3 Earley  ? OCaml Mixedexternal, or scannerlessAllNo ?
Elkhound GLR  ? C++, OCaml MixedexternalAllNoFree, BSD
GDK LALR(1), GLR  ? C, Lex, Haskell, HTML, Java, Object Pascal, Yacc Mixedgenerated POSIX NoFree, MIT
Happy LALR, GLR  ? Haskell MixedexternalAllNoFree, BSD
Hime Parser Generator GLR  ? C#, Java, Rust Separategenerated .NET framework, Java virtual machine NoFree, GNU LGPL
IronText Library LALR(1), GLR C# C# Mixedgenerated or external .NET frameworkNoFree, Apache 2.0
Jison LALR(1), LR(0), SLR(1) Yacc JavaScript, C#, PHP MixedgeneratedAllNoFree, MIT
Syntax LALR(1), LR(0), SLR(1) CLR(1) LL(1) JSON/Yacc JavaScript, Python, PHP, Ruby, C++, C#, Rust, Java MixedgeneratedAllNoFree, MIT
LajaScannerless, two phaseLaja Java Separate scannerless AllNoFree, GNU GPL
ModelCC Earley Annotated class model Java GeneratedgeneratedAllNoFree, BSD
P3Earley–combinatorsBNF-like OCaml Mixedexternal, or scannerlessAllNo ?
P4Earley–combinators, infinitary CFGsBNF-like OCaml Mixedexternal, or scannerlessAllNo ?
Scannerless Boolean Parser Scannerless GLR (Boolean grammars) ? Haskell, Java Separate scannerless Java virtual machine NoFree, BSD
SDF/SGLR Scannerless GLR SDF C, Java Separate scannerless AllYesFree, BSD
SmaCC GLR(1), LALR(1), LR(1) ? Smalltalk MixedinternalAllYesFree, MIT
SPARK Earley  ? Python MixedexternalAllNoFree, MIT
Tom GLR  ? C GeneratednoneAllNoFree, "No licensing or copyright restrictions"
UltraGram LALR, LR, GLR  ? C++, C#, Java, Visual Basic .NET Separategenerated Windows Yes Proprietary
Wormhole Pruning, LR, GLR, Scannerless GLR  ? C, Python Mixed scannerless Windows NoFree, MIT
Whale CalfGeneral tabular, SLL(k), Linear normal form (conjunctive grammars), LR, Binary normal form (Boolean grammars) ? C++ SeparateexternalAllNo Proprietary
yaep Earley Yacc-like C MixedexternalAllNoFree, GNU LGPL

Context-sensitive grammars

This table compares parser generators with context-sensitive grammars.

NameParsing algorithmInput grammar notationBoolean grammar abilitiesDevelopment platform 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 parserFree, GNU GPL

See also

Notes

    Related Research Articles

    <span class="mw-page-title-main">Chomsky hierarchy</span> Hierarchy of classes of formal grammars

    The Chomsky hierarchy in the fields of formal language theory, computer science, and linguistics, is a containment hierarchy of classes of formal grammars. A formal grammar describes how to form strings from a language's vocabulary that are valid according to the language's syntax. The linguist Noam Chomsky theorized that four different classes of formal grammars existed that could generate increasingly complex languages. Each class can also completely generate the language of all inferior classes.

    In computer science, an LALR parser is part of the compiling process where human readable text is converted into a structured representation to be read by computers. An LALR parser is a software tool to process (parse) text into a very specific internal representation that other programs, such as compilers, can work with. This process happens according to a set of production rules specified by a formal grammar for a computer language.

    In computer science, LR parsers are a type of bottom-up parser that analyse deterministic context-free languages in linear time. There are several variants of LR parsers: SLR parsers, LALR parsers, canonical LR(1) parsers, minimal LR(1) parsers, and generalized LR parsers. LR parsers can be generated by a parser generator from a formal grammar defining the syntax of the language to be parsed. They are widely used for the processing of computer languages.

    Yacc is a computer program for the Unix operating system developed by Stephen C. Johnson. It is a lookahead left-to-right rightmost derivation (LALR) parser generator, generating a LALR parser based on a formal grammar, written in a notation similar to Backus–Naur form (BNF). Yacc is supplied as a standard utility on BSD and AT&T Unix. GNU-based Linux distributions include Bison, a forward-compatible Yacc replacement.

    GNU Bison, commonly known as Bison, is a parser generator that is part of the GNU Project. Bison reads a specification in Bison syntax, warns about any parsing ambiguities, and generates a parser that reads sequences of tokens and decides whether the sequence conforms to the syntax specified by the grammar.

    In computer science, Backus–Naur form is a notation used to describe the syntax of programming languages or other formal languages. It was developed by John Backus and Peter Naur. BNF can be described as a metasyntax notation for context-free grammars. Backus–Naur form is applied wherever exact descriptions of languages are needed, such as in official language specifications, in manuals, and in textbooks on programming language theory. BNF can be used to describe document formats, instruction sets, and communication protocols.

    In computer science, a recursive descent parser is a kind of top-down parser built from a set of mutually recursive procedures where each such procedure implements one of the nonterminals of the grammar. Thus the structure of the resulting program closely mirrors that of the grammar it recognizes.

    In computer science, a compiler-compiler or compiler generator is a programming tool that creates a parser, interpreter, or compiler from some form of formal description of a programming language and machine.

    In computer science, a Simple LR or SLR parser is a type of LR parser with small parse tables and a relatively simple parser generator algorithm. As with other types of LR(1) parser, an SLR parser is quite efficient at finding the single correct bottom-up parse in a single left-to-right scan over the input stream, without guesswork or backtracking. The parser is mechanically generated from a formal grammar for the language.

    Originally, the word computing was synonymous with counting and calculating, and the science and technology of mathematical calculations. Today, "computing" means using computers and other computing machines. It includes their operation and usage, the electrical processes carried out within the computing hardware itself, and the theoretical concepts governing them.

    In computing, code generation is part of the process chain of a compiler and converts intermediate representation of source code into a form that can be readily executed by the target system.

    Parsing, syntax analysis, or syntactic analysis is the process of analyzing a string of symbols, either in natural language, computer languages or data structures, conforming to the rules of a formal grammar. The term parsing comes from Latin pars (orationis), meaning part.

    Berkeley Yacc (byacc) is a Unix parser generator designed to be compatible with Yacc. It was originally written by Robert Corbett and released in 1989. Due to its liberal license and because it was faster than the AT&T Yacc, it quickly became the most popular version of Yacc. It has the advantages of being written in ANSI C89 and being public domain software.

    <span class="mw-page-title-main">Syntax (programming languages)</span> Set of rules defining correctly structured programs

    In computer science, the syntax of a computer language is the rules that define the combinations of symbols that are considered to be correctly structured statements or expressions in that language. This applies both to programming languages, where the document represents source code, and to markup languages, where the document represents data.

    In computer programming, the lexer hack is a common solution to the problems in parsing ANSI C, due to the reference grammar being context-sensitive. In C, classifying a sequence of characters as a variable name or a type name requires contextual information of the phrase structure, which prevents one from having a context-free lexer.

    In formal grammar theory, the deterministic context-free grammars (DCFGs) are a proper subset of the context-free grammars. They are the subset of context-free grammars that can be derived from deterministic pushdown automata, and they generate the deterministic context-free languages. DCFGs are always unambiguous, and are an important subclass of unambiguous CFGs; there are non-deterministic unambiguous CFGs, however.

    In computer science, SYNTAX is a system used to generate lexical and syntactic analyzers (parsers) for all kinds of context-free grammars (CFGs) as well as some classes of contextual grammars. It has been developed at INRIA in France for several decades, mostly by Pierre Boullier, but has become free software since 2007 only. SYNTAX is distributed under the CeCILL license.

    <span class="mw-page-title-main">History of compiler construction</span>

    In computing, a compiler is a computer program that transforms source code written in a programming language or computer language, into another computer language. The most common reason for transforming source code is to create an executable program.

    A lookahead LR parser (LALR) generator is a software tool that reads a context-free grammar (CFG) and creates an LALR parser which is capable of parsing files written in the context-free language defined by the CFG. LALR parsers are desirable because they are very fast and small in comparison to other types of parsers.

    <span class="mw-page-title-main">LL grammar</span> Type of a context-free grammar

    In formal language theory, an LL grammar is a context-free grammar that can be parsed by an LL parser, which parses the input from Left to right, and constructs a Leftmost derivation of the sentence. A language that has an LL grammar is known as an LL language. These form subsets of deterministic context-free grammars (DCFGs) and deterministic context-free languages (DCFLs), respectively. One says that a given grammar or language "is an LL grammar/language" or simply "is LL" to indicate that it is in this class.

    References

    1. "Ragel State Machine Compiler".
    2. http://www.colm.net/open-source/ragel/ [ verification needed ]
    3. "Adaptive LL(*) Parsing: The Power of Dynamic Analysis" (PDF). Terence Parr. Retrieved 2016-04-03.
    4. "Survey on Various Syntax Analyzer Tools". www.ijraset.com. Retrieved 2023-09-16.
    5. 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.
    6. "Beaver - a LALR Parser Generator". beaver.sourceforge.net. Retrieved 2023-09-16.
    7. Newton, Jim E.; Demaille, Akim; Verna, Didier (2016-05-09). "Type-Checking of Heterogeneous Sequences in Common Lisp" (PDF). 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.
    8. "CL-Yacc — a LALR(1) parser generator for Common Lisp". www.irif.fr. Retrieved 2023-09-16.
    9. Hosseinpour, Sahereh; Alavi Milani, Mir Mohammad Reza; Pehlivan, Hüseyin (July 2018). "A Step-by-Step Solution Methodology for Mathematical Expressions". Symmetry. 10 (7): 285. Bibcode:2018Symm...10..285H. doi: 10.3390/sym10070285 . ISSN   2073-8994.
    10. "CppCC's Home Page". cppcc.sourceforge.net. Retrieved 2023-09-16.
    11. "Java Cup". pages.cs.wisc.edu. Retrieved 2023-09-16.
    12. "CUP". www2.cs.tum.edu. Retrieved 2023-09-16.
    13. 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.
    14. Gray, Robert W.; Levi, Steven P.; Heuring, Vincent P.; Sloane, Anthony M.; Waite, William M. (1992). "Eli: a complete, flexible compiler construction system". Communications of the ACM. 35 (2): 121–130. doi: 10.1145/129630.129637 . ISSN   0001-0782. S2CID   5121773.
    15. Owens, Scott; Flatt, M.; Shivers, O.; McMullan, Benjamin (2004-10-01). "Lexer and Parser Generators in Scheme" (PDF). Scheme 2004: Proceedings of the Fifth Workshop on Scheme and Functional Programming.
    16. 1 2 Areias, Hugo; Simões, Alberto; Henriques, P.; Cruz, Daniela Carneiro da (2010-09-01). "Parser generation in Perl : an overview and available tools" (PDF).{{cite journal}}: Cite journal requires |journal= (help)
    17. Volkman, Victor (2007-07-19). "Let Your Parser Go for the GOLD". Developer.com. Retrieved 2023-11-04.
    18. "Parsing in C#: All the Tools and Libraries You Can Use (Part 2) - DZone". dzone.com. Retrieved 2023-11-04.
    19. Ortin, Francisco; Quiroga, Jose; Rodriguez-Prieto, Oscar; Garcia, Miguel (2022-03-03). "An empirical evaluation of Lex/Yacc and ANTLR parser generation tools". PLOS ONE. 17 (3): e0264326. Bibcode:2022PLoSO..1764326O. doi: 10.1371/journal.pone.0264326 . ISSN   1932-6203. PMC   8893623 . PMID   35239695.
    20. Enseling, Oliver (2000-12-29). "Build your own languages with JavaCC". InfoWorld. Retrieved 2023-11-04.
    21. "JavaCC". JavaCC. Retrieved 2023-11-04.
    22. "Building parsers for the web with JavaCC & GWT (Part one)". Chris Ainsley. 14 April 2014. Retrieved 2014-05-04.
    23. "The Lemon Parser Generator". sqlite.org. Retrieved 2023-11-30.
    24. "The Lezer Parser System".
    25. "Building a ShopifyQL Code Editor". Shopify. Retrieved 2023-12-06.
    26. "Sponsoring the Lezer parser system | Tines". www.tines.com. 2022-03-11. Retrieved 2023-12-06.
    27. "An LR(*) parser generator for C++".
    28. "Racc". i.loveruby.net. Retrieved 2021-11-26.
    29. "Racc Grammar File Reference". i.loveruby.net. Retrieved 2021-11-26.
    30. "The SLK Parser Generator supports C, C++, Java, JavaScript, and C#, optional backtracking, free".
    31. http://www.slkpg.tech/license.txt [ bare URL plain text file ]
    32. "SLY (Sly Lex Yacc)".
    33. "Tree-Sitter - An incremental parsing system for programming tools".
    34. "Parse - Compile time (LR) type safe parser generator for C++". GitHub . 30 December 2021.
    35. Maintained fork of PEG.js
    36. taocpp/PEGTL, The Art of C++, 2024-03-14, retrieved 2024-03-16
    37. "Parrot: Grammar Engine". The Parrot Foundation. 2011. PGE rules provide the full power of recursive descent parsing and operator precedence parsing.