Excerpts from Hendrik Tews's message of Thu Apr 03 01:13:41 +0200 2008: > Hi, > > I have a few questions to the parse_files example. > > The example starts with building the parser and printer via the > following functor application > > module Caml = > Camlp4.Printers.OCaml.Make > (Camlp4OCamlParser.Make > (Camlp4OCamlRevisedParser.Make > (Camlp4.OCamlInitSyntax.Make(Ast)(Gram)(Quotation))));; > > > 1. Can I omit the printer functor if I am only interested in > parsing files (and not printing) and simplify to > > module Caml = > Camlp4OCamlParser.Make > (Camlp4OCamlRevisedParser.Make > (Camlp4.OCamlInitSyntax.Make(Ast)(Gram)(Quotation))) Yes I think so. > 2. Ast, Gram, Quotation come from Camlp4.PreCast. Right. > 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. > 3. I looked into the registration of syntax extentions (Register > functors) and how the syntax extention callbacks are called > in Register.iter_and_take_callbacks. I have the impression > that in camlp4 not the above nested functor application is > performed but the Make functors are sequentially applied to > the same Syntax functor. Therefore, can I further simplify to > > module Caml = Camlp4.PreCast.Syntax > let () = > let module M1 = Camlp4OCamlRevisedParser.Make(Caml) in > let module M2 = Camlp4OCamlParser.Make(Caml) > in > () Right, assuming you're starting with an empty grammar. -- Nicolas Pouillard aka Ertai