Menhir

To use menhir in a dune project, the language version should be selected in the dune-project file. For example:

(using menhir 2.0)

This will enable support for menhir stanzas in the current project. If the language version is absent, dune will automatically add this line with the latest menhir version to the project file once a menhir stanza is used anywhere.

Basic Usage

The basic form for defining menhir parsers (analogous to ocamlyacc) is:

(menhir
 (modules <parser1> <parser2> ...))

Modular Menhir

Modular parsers can be defined by adding a merge_into field. This correspond to the --base command line option of menhir. With this option, a single parser named base_name is generated.

(menhir
 (merge_into <base_name>)
 (modules <parser1> <parser2> ...))

Flags

Extra flags can be passed to menhir using the flags flag:

(menhir
 (flags <option1> <option2> ...)
 (modules <parser1> <parser2> ...))

--infer mode

Menhir language 2.0 automatically enables using menhir with type inference. This ability can also be manually controlled with the infer field manually.

(menhir
  (infer false)
  (modules <parser1> <parser2> ...))

cmly targets

Menhir supports writing the grammar and automaton to .cmly file. Therefore, if this is flag is passed to menhir, dune will know to introduce a .cmly target for the module.