51 lines
1.8 KiB
ReStructuredText
51 lines
1.8 KiB
ReStructuredText
menhir
|
|
------
|
|
|
|
A ``menhir`` stanza is available to support the Menhir parser generator.
|
|
|
|
To use Menhir in a Dune project, the language version should be selected in the
|
|
``dune-project`` file. For example:
|
|
|
|
.. code:: dune
|
|
|
|
(using menhir 3.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 once a Menhir stanza is used anywhere.
|
|
|
|
The basic form for defining menhir_ parsers (analogous to :doc:`ocamlyacc`)
|
|
is:
|
|
|
|
.. code:: dune
|
|
|
|
(menhir
|
|
(modules <parser1> <parser2> ...)
|
|
<optional-fields>)
|
|
|
|
``<optional-fields>`` are:
|
|
|
|
- ``(merge_into <base_name>)`` is used to define modular parsers. This
|
|
correspond to the ``--base`` command line option of ``menhir``. With this
|
|
option, a single parser named ``base_name`` is generated.
|
|
|
|
- ``(flags <option1> <option2> ...)`` is used to pass extra flags to Menhir.
|
|
|
|
- ``(infer <bool>)`` is used to enable Menhir with type inference. This option
|
|
is enabled by default with Menhir language 2.0.
|
|
|
|
Menhir supports writing the grammar and automation to the ``.cmly`` file.
|
|
Therefore, if this is flag is passed to Menhir, Dune will know to introduce a
|
|
``.cmly`` target for the module.
|
|
|
|
- ``(explain <blang expression>)`` is used to control the generation of the
|
|
``.conflicts`` file explaining conflicts found while generating the
|
|
parser. The condition is specified using the
|
|
:doc:`/reference/boolean-language`. This field was introduced in version 3.0
|
|
of the Menhir extension.
|
|
|
|
Note that starting in version 3.0 of the Menhir extension, the ``.conflicts``
|
|
file is generated by default. If this is not desired, it needs to be disabled
|
|
explicitly by using the ``(explain)`` field.
|
|
|
|
.. _menhir: https://gitlab.inria.fr/fpottier/menhir
|