Browse thread
Camlp4: example/parse_files.ml
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ 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 fail. 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) = Camlp4.OCamlInitSyntax.Make (Camlp4.PreCast.Ast)(Camlp4.PreCast.Gram)(Camlp4.PreCast.Quotation) 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. Bye, Hendrik