From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail4-relais-sop.national.inria.fr (mail4-relais-sop.national.inria.fr [192.134.164.105]) by sympa.inria.fr (Postfix) with ESMTPS id 0610E7ED7A for ; Thu, 20 Sep 2012 16:19:21 +0200 (CEST) Received-SPF: None (mail4-smtp-sop.national.inria.fr: no sender authenticity information available from domain of gabriel.scherer@gmail.com) identity=pra; client-ip=209.85.223.182; receiver=mail4-smtp-sop.national.inria.fr; envelope-from="gabriel.scherer@gmail.com"; x-sender="gabriel.scherer@gmail.com"; x-conformance=sidf_compatible Received-SPF: Pass (mail4-smtp-sop.national.inria.fr: domain of gabriel.scherer@gmail.com designates 209.85.223.182 as permitted sender) identity=mailfrom; client-ip=209.85.223.182; receiver=mail4-smtp-sop.national.inria.fr; envelope-from="gabriel.scherer@gmail.com"; x-sender="gabriel.scherer@gmail.com"; x-conformance=sidf_compatible; x-record-type="v=spf1" Received-SPF: None (mail4-smtp-sop.national.inria.fr: no sender authenticity information available from domain of postmaster@mail-ie0-f182.google.com) identity=helo; client-ip=209.85.223.182; receiver=mail4-smtp-sop.national.inria.fr; envelope-from="gabriel.scherer@gmail.com"; x-sender="postmaster@mail-ie0-f182.google.com"; x-conformance=sidf_compatible X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Ah8CAMMkW1DRVd+2m2dsb2JhbABFvQ0IIwEBAQEBCAkLCRQngiABAQEEEgIsARsdAQMMBgULDS4hAQERAQUBHAYTIodOAQMPC5s9CQOMJYJ0hH4KGScNWYh0AQUMii5ihkEDlA+BVYEUigODKxYphAg X-IronPort-AV: E=Sophos;i="4.80,453,1344204000"; d="scan'208";a="156397419" Received: from mail-ie0-f182.google.com ([209.85.223.182]) by mail4-smtp-sop.national.inria.fr with ESMTP/TLS/RC4-SHA; 20 Sep 2012 16:19:20 +0200 Received: by ieak10 with SMTP id k10so1056312iea.27 for ; Thu, 20 Sep 2012 07:19:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type; bh=UmMhqi5Nz9dxj9p5JEghRBpf81LWlvQAeVrur9PtEDo=; b=eoqpoEzuKSVYd0zrS5O1wl3vTkk0KqaKBQCDY7C8Dk5p03YtxSIiro9SBCUirFbTsr UE3aRKj7vkD8rTSNRWihJsElkQTqRjQ3+WyLZhioRqrro9aUlY9XJQjoHcE6gH2FUD9U aABObCMy+Xbuy0pzNddciM8SpdzD+J+s6NSfs67Nu9AYgW5J4IzcZdI2JYqLUmWgx3pN uefi/bZBS5hTO+M+uIy1PgdDX1UsGRqEcyMNW7gP4Okf4azeWAS8sTdxPVo105kG3Kyr xNp6oZPsT6qLYKOGDuc0cWbEfUc69NwvVadbI/kNSaULmlLlKoqpTkGVwlhNqD1V4Bww n3og== Received: by 10.50.168.66 with SMTP id zu2mr2156566igb.34.1348150758626; Thu, 20 Sep 2012 07:19:18 -0700 (PDT) MIME-Version: 1.0 Received: by 10.50.194.202 with HTTP; Thu, 20 Sep 2012 07:18:38 -0700 (PDT) In-Reply-To: References: From: Gabriel Scherer Date: Thu, 20 Sep 2012 16:18:38 +0200 Message-ID: To: Philippe Veber Cc: caml users Content-Type: text/plain; charset=ISO-8859-1 Subject: Re: [Caml-list] Using menhir for a camlp4 quotation: a compilation issue 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 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 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. > >