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