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: | -- (:) |
| 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