The BNFC package

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,
but starting from Version 2.0, it can also be used for generating Java, C++, and C.

Given a Labelled BNF grammar the tool produces:
an abstract syntax as a HaskellC++C module or Java directory,
a case skeleton for the abstract syntax in the same language,
an Alex, JLex, or Flex lexer generator file,
a Happy, CUP, or Bison parser generator file,
a pretty-printer as a HaskellJavaC++/C module,
a Latex file containing a readable specification of the language.