From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: X-Spam-Status: No, score=0.4 required=5.0 tests=AWL autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by yquem.inria.fr (Postfix) with ESMTP id CD801BBCA for ; Fri, 4 Apr 2008 16:20:40 +0200 (CEST) X-IronPort-AV: E=Sophos;i="4.25,604,1199660400"; d="asc'?scan'208";a="9199711" Received: from peray.inria.fr (HELO ausone.inria.fr) ([128.93.8.98]) by mail2-relais-roc.national.inria.fr with SMTP; 04 Apr 2008 16:20:40 +0200 Received: by ausone.inria.fr (sSMTP sendmail emulation); Fri, _d Apr 2008 16:19:21 +0200 From: "Nicolas Pouillard" Cc: Caml_mailing list Subject: Re: [Caml-list] Camlp4: example/parse_files.ml To: Hendrik Tews References: <18420.4901.506029.744640@tandem.cs.ru.nl> <1207236568-sup-3680@port-ext16.ensta.fr> <1207316266-sup-9155@ausone.inria.fr> In-Reply-To: Date: Fri, 04 Apr 2008 16:19:16 +0200 Message-Id: <1207318438-sup-662@ausone.inria.fr> User-Agent: Sup/git Content-Type: multipart/signed; protocol="application/pgp-signature"; boundary="=-1207318761-26359-97874-6366-4-="; micalg="pgp-sha1" MIME-Version: 1.0 X-Spam: no; 0.00; camlp:01 hendrik:01 syntax:01 runtime:01 dynlink:01 syntax:01 runtime:01 dynlink:01 camlp:01 syntaxes:01 ocaml:01 functor:01 statically:01 functor:01 doable:01 X-Attachments: cset="UTF-8" type="application/pgp-signature" name="signature.asc" name="signature.asc" --=-1207318761-26359-97874-6366-4-= Content-Type: text/plain; charset=UTF-8 Excerpts from Hendrik Tews's message of Fri Apr 04 16:01:57 +0200 2008: > "Nicolas Pouillard" writes: > > > Can I do the same with a syntax extention that is only > > loaded at runtime via Dynlink? Assume a syntax extention X > > that is only available at runtime and not at compiletime. > > After loading X with Dynlink, all I can do is invoke the > > callback of X, but this will add the grammar extension of X > > to Camlp4.PreCast.Syntax. > > You can do it but you will to resort to some kind of > registering of your extensions, as it's done in camlp4 for the > default grammar. > > > Is there a way to obtain two functions parse_implem (as > > above) that mix X with different syntaxes (eg Ocaml + X and > > Revised + X)? For that, I believe, it would be necessary to > > extract parse_implem from a syntax module such that it > > survives clearing that Syntax. > > Yes but your extension X has to be a functor, then you can get > X(OCamlOriginal), X(OCamlRevised). > > But this only works if I can statically link against X. There is > no way to access the functor X through the Dynlink interface. Dynlink cannot access the X functor, but it can register itself. > With the standard interface of Camlp4 syntax extensions the > loaded module applies X only to PreCast.Syntax. This could be > repeated but one would have to clear PreCast.Syntax in between. You can either reuse the current setup, by clearing the PreCast.Syntax in between but also setup another registration functor. > Changing the Camlp4 interface one could chieve that X is applied > to two or maybe three times (to PreCast.Syntax1 ... Syntax3). But > how about the general case, where X is applied to n Syntax > modules and n depends on the input? I believe this is impossible. I think that's doable (not tested), basically you need three primitive functors: Register : (Syntax -> Syntax) -> Unit Clear : Unit -> Unit Apply : Syntax -> Syntax -- Nicolas Pouillard aka Ertai --=-1207318761-26359-97874-6366-4-= Content-Disposition: attachment; filename="signature.asc" Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.8 (Darwin) iEYEARECAAYFAkf2OOQACgkQj+FCNw9dwLlD8gCeIIbpvFmms0hzSO8xZTJhV+5j t3cAn0XmTwS7B55359g5mfLq+JKFJjPS =toIS -----END PGP SIGNATURE----- --=-1207318761-26359-97874-6366-4-=--