BNFC-meta: Deriving Parsers and Quasi-Quoters from BNF Grammars

[ development, gpl, language, library, parsing, text ] [ Propose Tags ]

This package provides a very simple way of defining a compiler front-end for a language by embedding a BNF grammar directly into a Haskell source file. Specifically, given a quasi-quoted LBNF grammar (as used by the BNF Converter) it generates (using Template Haskell) a LALR parser and pretty pretty printer for the language. The parser is then used to automatically define a quasi-quoter for the defined language so it can also be seamlessly embedded in Haskell source code. With a simple addition to the gramwmar, the user can define a universal syntax for anti-quoting. This means that any grammar non-terminal can be replaced by a quoted Haskell expression of the appropriate type. A few example languages are included in the source tarball.

The LBNF grammar formalism is described thoroughly in the BNF Converter documentation:

This library and the additions it makes to LBNF is described in a 2011 Haskell Symposium paper titled "Embedded Parser Generators":

Versions [faq] 0.1,,,, 0.2,,, 0.2.1, 0.2.2, 0.3,,,,,, 0.4,,,, 0.5, 0.6, 0.6.1
Dependencies alex-meta (>= && <0.4), array (>=0.4 && <0.6), base (>=4.2 && <5), fail (>=4.9 && <5), happy-meta (>= && <0.3), haskell-src-meta (>=0.5 && <1.0), syb (>=0.2 && <1.0), template-haskell (>=2.12 && <2.17) [details]
License GPL-2.0-only
Author Jonas Duregård
Maintainer Artem Pelenitsyn <>
Revised Revision 1 made by ArtemPelenitsyn at 2020-08-06T23:35:15Z
Category Development, parsing, text, language
Source repo head: git clone
Uploaded by ArtemPelenitsyn at 2020-02-09T23:44:05Z
Distributions NixOS:0.6.1
Downloads 18698 total (9 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs available [build log]
Last success reported on 2020-02-10 [all 1 reports]


[Index] [Quick Jump]


Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

For package maintainers and hackage trustees