Version française
Home     About     Download     Resources     Contact us    
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: -- (:)
From: Nicolas Pouillard <nicolas.pouillard@g...>
Subject: Re: [Caml-list] Camlp4: example/parse_files.ml
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