Finally tagless observable recursion for an abstract grammar model

  • Authors:
  • Dominique Devriese;Frank Piessens

  • Affiliations:
  • Ibbt-distrinet, ku leuven, belgium (e-mail: dominique.devriese@cs.kuleuven.be, frank.piessens@cs.kuleuven.be);Ibbt-distrinet, ku leuven, belgium (e-mail: dominique.devriese@cs.kuleuven.be, frank.piessens@cs.kuleuven.be)

  • Venue:
  • Journal of Functional Programming
  • Year:
  • 2012

Quantified Score

Hi-index 0.00

Visualization

Abstract

We define a finally tagless, shallow embedding of a typed grammar language. In order to avoid the limitations of traditional parser combinator libraries (no bottom-up parsing, no full grammar analysis or transformation), we require object-language recursion to be observable in the meta-language. Since existing proposals for recursive constructs are not fully satisfactory, we propose new finally tagless primitive recursive constructs to solve the problem. To do this in a well-typed way, we require considerable infrastructure, for which we reuse techniques from the multirec generic programming library. Our infrastructure allows a precise model of the complex interaction between a grammar, a parsing algorithm and a set of semantic actions. On the flip side, our approach requires the grammar author to provide a type-and value-level encoding of the grammar's domain and we can provide only a limited form of constructs like many. We demonstrate five meta-language grammar algorithms exploiting our model, including a grammar pretty-printer, a reachability analysis, a translation of quantified recursive constructs to the standard one and an implementation of the left-corner grammar transform. The work we present forms the basis of the grammar-combinators parsing library1, which is the first to work with a precise, shallow model of abstract context-free grammars in a classical (not dependently typed) functional language and which supports a wide range of grammar manipulation primitives. From a more general point of view, our work shows a solution to the well-studied problem of observable sharing in shallowly embedded domain-specific languages and specifically in finally tagless domain-specific languages.