Centre for Language Technology
Chalmers University of Technology and University of Gothenburg
The BNF Converter is a compiler construction tool generating a compiler front-end from a Labelled BNF grammar. It is currently generating code for the target languages Haskell, Agda, C, C++, Java, and OCaml, as well as XML representations and Pygment syntax highlighters.
Given a Labelled BNF grammar the tool produces:
Install via stack from Stackage:
$ stack install BNFC
Install by Cabal from Hackage:
$ cabal install BNFC
Current development version (source repository on GitHub)
$ git clone https://github.com/BNFC/bnfc
Find the latest releases at https://github.com/BNFC/bnfc/releases.
BNFC release 2.9.5 2023-07-26
BNFC release 2.9.4.1 2022-12-17
BNFC release 2.9.4 2022-02-17
BNFC release 2.9.3 2021-10-01
BNFC release 2.9.2 2021-06-13
BNFC release 2.9.1 2021-03-01
BNFC release 2.9.0 2020-12-28
BNFC release 2.8.4 2020-10-10
BNFC release 2.8.3 2019-08-27
BNFC release 2.8.2 2018-11-04
Send questions, bug reports, usage news, etc, to our Google group.
Implementing Programming Languages, a compiler book using BNFC.
Calc.cf
:
-- Calc.cf: A grammar for arithmetical expressions | ||||||
EAdd. | Exp | ::= | Exp | "+" | Exp1 | ; |
ESub. | Exp | ::= | Exp | "-" | Exp1 | ; |
EMul. | Exp1 | ::= | Exp1 | "*" | Exp2 | ; |
EDiv. | Exp1 | ::= | Exp1 | "/" | Exp2 | ; |
EInt. | Exp2 | ::= | Integer | ; | ||
coercions | Exp | 2 | ; |
bnfc --haskell -d -m Calc.cf && make bnfc --agda -d -m Calc.cf && make bnfc --c -m Calc.cf && make bnfc --cpp -m Calc.cf && make bnfc --java -m Calc.cf && make bnfc --java-antlr -m Calc.cf && make bnfc --ocaml -m Calc.cf && make bnfc --ocaml-menhir -m Calc.cf && make
echo "1 + 2 * 3 - 4 / 5" | Calc/Test
A grammar of C with an example C file.
A grammar of Alfa with an example Alfa file. (For more details, see the Alfa home page.)
A grammar of LBNF.
It is at the same time an example LBNF file.
The development version
of this grammar is used in the implementation of the BNF Converter.
A grammar of Java 1.1 developed by Mike Rainey.
Free software under the BSD 3-clause license.
Versions until 2.8.4 released under the
GNU General Public License
(GPL).