Happy-GLL: modular, reusable and complete top-down parsers for parameterized nonterminals

03/14/2023
by   L. Thomas van Binsbergen, et al.
0

Parser generators and parser combinator libraries are the most popular tools for producing parsers. Parser combinators use the host language to provide reusable components in the form of higher-order functions with parsers as parameters. Very few parser generators support this kind of reuse through abstraction and even fewer generate parsers that are as modular and reusable as the parts of the grammar for which they are produced. This paper presents a strategy for generating modular, reusable and complete top-down parsers from syntax descriptions with parameterized nonterminals, based on the FUN-GLL variant of the GLL algorithm. The strategy is discussed and demonstrated as a novel back-end for the Happy parser generator. Happy grammars can contain `parameterized nonterminals' in which parameters abstract over grammar symbols, granting an abstraction mechanism to define reusable grammar operators. However, the existing Happy back-ends do not deliver on the full potential of parameterized nonterminals as parameterized nonterminals cannot be reused across grammars. Moreover, the parser generation process may fail to terminate or may result in exponentially large parsers generated in an exponential amount of time. The GLL back-end presented in this paper implements parameterized nonterminals successfully by generating higher-order functions that resemble parser combinators, inheriting all the advantages of top-down parsing. The back-end is capable of generating parsers for the full class of context-free grammars, generates parsers in linear time and generates parsers that find all derivations of the input string. To our knowledge, the presented GLL back-end makes Happy the first parser generator that combines all these features. This paper describes the translation procedure of the GLL back-end and compares it to the LALR and GLR back-ends of Happy in several experiments.

READ FULL TEXT

page 1

page 2

page 3

page 4

research
09/09/2021

A Derivative-based Parser Generator for Visibly Pushdown Grammars

In this paper, we present a derivative-based, functional recognizer and ...
research
10/30/2020

Lake symbols for island parsing

Context: An island parser reads an input text and builds the parse (or a...
research
10/15/2020

The LL(finite) strategy for optimal LL(k) parsing

The LL(finite) parsing strategy for parsing of LL(k) grammars where k ne...
research
06/09/2018

Generalized Earley Parser: Bridging Symbolic Grammars and Sequence Data for Future Prediction

Future predictions on sequence data (e.g., videos or audios) require the...
research
03/01/2022

Parsing Randomness: Unifying and Differentiating Parsers and Random Generators

"A generator is a parser of randomness." This perspective on generators ...
research
04/10/2023

Interval Parsing Grammars for File Format Parsing

File formats specify how data is encoded for persistent storage. They ca...
research
02/23/2023

SPINDLE: Spinning Raw Text into Lambda Terms with Graph Attention

This paper describes SPINDLE - an open source Python module implementing...

Please sign up or login with your details

Forgot password? Click here to reset