English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

Ce site est rarement mis à jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml à l'adresse ocaml.org.

Browse thread
Camlp4: example/parse_files.ml
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2008-04-03 (21:24)
From: Hendrik Tews <tews@c...>
Subject: Re: [Caml-list] Camlp4: example/parse_files.ml
"Nicolas Pouillard" <nicolas.pouillard@gmail.com> writes:

   > Do I miss
   >    something if I simplify further to
   >     module Caml =
   >        Camlp4OCamlParser.Make
   >     (Camlp4OCamlRevisedParser.Make(Camlp4.PreCast.Syntax))

   You are applying original and revised parser, so if the
   current parser is empty that's ok. Otherwise the extension can

Right, I missed that: With this simplification I am not starting
with a fresh and empty grammar but with whatever has accumulated
in PreCast.Syntax.

I have a followup question. With the functorial interface I can
build and use several grammars at the same time. For instance

    module FreshGrammar(Unit : sig end) =

    module G1 = FreshGrammar(struct end)
    module M1 = Camlp4OCamlRevisedParser.Make(G1)
    module M2 = Camlp4OCamlParser.Make(G1)

    module G2 = FreshGrammar(struct end)
    module M3 = Camlp4OCamlRevisedParser.Make(G2)
    module M4 = Camlp4MacroParser.Make(G2)  

Now G1.parse_implem parses Ocaml syntax, while G2.parse_implem
parses revised syntax with macros.

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. 

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.