Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: Gabriel Scherer <gabriel.scherer@gmail.com>
To: Philippe Veber <philippe.veber@gmail.com>
Cc: caml users <caml-list@inria.fr>
Subject: Re: [Caml-list] Using menhir for a camlp4 quotation: a compilation issue
Date: Thu, 20 Sep 2012 16:18:38 +0200	[thread overview]
Message-ID: <CAPFanBE9bZR9_-_iyvrErWXCyJK+ZAwXQK_-gKiKCQWZb9n0hg@mail.gmail.com> (raw)
In-Reply-To: <CAOOOohR+2sOk-_xgLzy7g2d-9geKMKfdfw8YxoY7PaFwqgfH9Q@mail.gmail.com>

I'm not familiar with this part of ocamlbuild, but a look at
ocamlbuild/ocaml_tools.ml suggest that the different rule named
"menhir_modular" (which creates stuff from a file with extension
".mlypack" rather than ".mly", and which I have never used) has a
slightly more expression -ocamlc option, that includes (T
ocamlc_tags), which includes in particular the tags for the .mlypack
file.

You could try to see if, naming your grammar file .mlypack and adding
a "foo.mlypack: package(camlp4.lib)" to your _tags, you at least get a
satisfying menhir invocation. From there, you could either find out
what this "modular menhir" mode is and how to use it in your case, or
suggest patching ocamlbuild to use this (T ocamlc_tags) also in simple
menhir invocations.

On Thu, Sep 20, 2012 at 3:45 PM, Philippe Veber
<philippe.veber@gmail.com> wrote:
> Dear camlers,
>
> I'm currently trying to implement a camlp4 quotation whose contents will be
> parsed using ocamllex and menhir. Everything went unexpectedly well until I
> tried to add antiquotations. Following Tiphaine Turpin's format syntax
> extension (https://forge.ocamlcore.org/projects/format/), an antiquotation
> is parsed as a token in ocamllex, and this token is defined in my parser as:
>
> %token <Camlp4.PreCast.Syntax.Ast.expr> EXPR
>
> The thing is when I try to compile my project with ocamlbuild I get the
> following error:
>
> [gesundheit:~/w/ocaml-r 14:46]$make
> ocaml setup.ml -build
> Finished, 0 targets (0 cached) in 00:00:00.
> + menhir --ocamlc 'ocamlfind ocamlc -I src/syntax' --infer
> src/syntax/r_lang_parser_y.mly
> File "src/syntax/r_lang_parser_y.mly", line 7, characters 40-44:
> Warning: the token EXPR is unused.
> File "src/syntax/r_lang_parser_y.mly", line 7, characters 8-38:
> Error: Unbound module Camlp4
> ...
>
> Now I can easily (but manually) fix this by adding the missing -I option for
> camlp4 libs:
>
> [gesundheit:~/w/ocaml-r/_build 15:22]$menhir --ocamlc 'ocamlfind ocamlc -I
> src/syntax -I +camlp4' --infer src/syntax/r_lang_parser_y.mly
> File "src/syntax/r_lang_parser_y.mly", line 7, characters 40-44:
> Warning: the token EXPR is unused.
> [gesundheit:~/w/ocaml-r/_build 15:22]$
>
> My question is how do I tell ocamlbuild to add this option directly? I fear
> the response is "you cannot", if I refer to the piece of code in ocamlbuild
> that generates the call to menhir:
>
> let menhir mly env build =
>   let mly = env mly in
>   let menhir = if !Options.ocamlyacc = N then V"MENHIR" else
> !Options.ocamlyacc in
>   Ocaml_compiler.prepare_compile build mly;
>   Cmd(S[menhir;
>         A"--ocamlc"; Quote(S[!Options.ocamlc; ocaml_include_flags mly]);
>         T(tags_of_pathname mly++"ocaml"++"parser"++"menhir");
>         A"--infer"; Px mly])
>
> I fail to see in this function a hook which I could use to inject the
> missing argument. Would any one know a workaround to use tokens that have
> hold a value whose type is not defined in the standard library?
>
> Cheers,
>   Philippe.
>
>

  reply	other threads:[~2012-09-20 14:19 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-20 13:45 Philippe Veber
2012-09-20 14:18 ` Gabriel Scherer [this message]
2012-09-20 15:54   ` Philippe Veber
2012-09-20 16:11     ` Benoit Montagu
2012-09-20 16:30       ` Philippe Veber

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAPFanBE9bZR9_-_iyvrErWXCyJK+ZAwXQK_-gKiKCQWZb9n0hg@mail.gmail.com \
    --to=gabriel.scherer@gmail.com \
    --cc=caml-list@inria.fr \
    --cc=philippe.veber@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox