BNFC: A compiler front-end generator.

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]


The BNF Converter is a compiler construction tool generating a compiler front-end from a Labelled BNF grammar. It was originally written to generate Haskell code, but can also be used for generating Agda, C, C++, Java, Ocaml and XML code.

Given a Labelled BNF grammar the tool produces: an abstract syntax as a Haskell, Agda, C, C++, Ocaml module or Java package, a case skeleton for the abstract syntax in the same language, an Alex, Flex, JLex, JFlex, or ocamllex lexer generator file, a Happy, CUP, Bison, Antlr, ocamlyacc or menhir parser generator file, a pretty-printer as a Haskell, Agda, C, C++, Java, or Ocaml module, an XML representation, a LaTeX file containing a readable specification of the language.

[Skip to Readme]


Versions,,,, 2.5.0,,,,,,,,, 2.7.1, 2.8, 2.8.1, 2.8.2, 2.8.3,, 2.8.4, 2.9.0, 2.9.1, 2.9.2, 2.9.3, 2.9.4,, 2.9.5, 2.9.5
Change log
Dependencies array, base (>=4.8 && <5), BNFC, containers, deepseq, directory, filepath, mtl (>=2.2.1), pretty (>=1.1 && <1.2), process, semigroups, string-qq, time, transformers [details]
License BSD-3-Clause
Copyright (c) Andreas Abel, Jonas Almström Duregård, Krasimir Angelov, Jean-Philippe Bernardy, Björn Bringert, Johan Broberg, Kyle Butt, Paul Callaghan, Grégoire Détrez, Markus Forsberg, Ola Frid, Peter Gammie, Thomas Hallgren, Pascal Hof, Simon Huber, Patrik Jansson, Kristofer Johannisson, Antti-Juhani Kaijanaho, Andreas Lööw, Justin Meiners, Kent Mein, Ulf Norell, Gabriele Paganelli, Michael Pellauer, Michał Radwański, Fabian Ruch, and Aarne Ranta 2002 - 2023. Free software under the BSD 3-clause license.
Category Parsing
Home page
Bug tracker
Source repo head: git clone
Uploaded by AndreasAbel at 2023-07-26T18:38:07Z


[Index] [Quick Jump]


Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Readme for BNFC-2.9.5

[back to package description]

Hackage version BNFC on Stackage Nightly Stackage LTS version Build status Documentation status

The BNF Converter

What is the BNF Converter?

The BNF Converter (bnfc) is a compiler construction tool generating a compiler front-end from a Labelled BNF (LBNF) grammar. It is currently able to generate Haskell, Agda, C, C++, Java, and OCaml, as well as XML representations.

Given a LBNF grammar the tool produces:

More information:


Some binaries are available at Installation from the Haskell sources is possible via stack or cabal.

You need a running installation of stack. To install and run the latest version of bnfc from stackage, enter at the command line:

  stack install BNFC
  bnfc --help

Installation via cabal

You need a running installation of a recent version of GHC and Cabal, most easily available via the GHCup. To install bnfc from hackage, enter at the command line:

  cabal install BNFC
  bnfc --help

Installing the development version

To install the development version of bnfc with the latest bugfixes (and regressions ;-)):

  git clone
  cd bnfc/source

and then either

  cabal install


  stack install --stack-yaml stack-8.10.7.yaml

(replace 8.10.7 with your GHC version, and if you want to build with your installed GHC then add flag --system-ghc).

Mini tutorial



You can discuss with us issues around bnfc on our mailing list

For current limitations of bnfc, or to report a new bug, please consult our issue tracker.



The project is licensed under the BSD 3-clause license.

BNFC versions until 2.8.4 released under the GNU General Public License.

Example uses of the BNF Converter

In research:

In teaching: