I'm trying once again to make some code work under the new camlp4. I don't want to make any real syntax modifications, but just enable quotations performing a simple string transformation on the body of the quotation, e.g. turning
<<hello /\ world>> into default_parser "hello /\\ world" About a year ago, Nicolas Pouillard gave me a recipe, which I've now put in the following form for my actual requirements: open Camlp4.PreCast;; module Caml = Camlp4OCamlParser.Make (Camlp4OCamlRevisedParser.Make (Camlp4.OCamlInitSyntax.Make(Ast)(Gram)(Quotation)));; let quotexpander s = if String.sub s 0 1 = "|" & String.sub s (String.length s - 1) 1 = "|" then "secondary_parser \""^ (String.escaped (String.sub s 1 (String.length s - 2)))^"\"" else "default_parser \""^(String.escaped s)^"\"";; let patt_quotexpander loc _loc_name_opt str = Gram.parse_string Caml.patt loc (quotexpander str);; let expr_quotexpander loc _loc_name_opt str = Gram.parse_string Caml.expr loc (quotexpander str);; let str_item_quotexpander loc loc_name_opt str = <:[EMAIL PROTECTED]< $exp: expr_quotexpander loc loc_name_opt str$ >>;; let () = Syntax.Quotation.add "" Syntax.Quotation.DynAst.expr_tag expr_quotexpander; Syntax.Quotation.add "" Syntax.Quotation.DynAst.str_item_tag str_item_quotexpander; Syntax.Quotation.add "" Syntax.Quotation.DynAst.patt_tag patt_quotexpander;; I can directly compile this file (say "Quotexpander.ml") with ocamlc -pp camlp4of -I +camlp4 -I +camlp4/Camlp4Parsers -a -o Quotexpander.cma Quotexpander.ml and then use it inside the toplevel without problems: /home/johnh/temp/OCaml$ ocaml Objective Caml version 3.10.0 # #load "camlp4o.cma";; Camlp4 Parsing version 3.10.0 # #load "Quotexpander.cma";; # let default_parser s = s;; val default_parser : 'a -> 'a = <fun> # <<hello /\ world>>;; - : string = "hello /\\ world" However, to keep the build process as trivial as possible, I'd like simply to copy the ML code directly into the toplevel (i.e. #use "Quotexpander.ml"). Doing this seems to hit some module dependencies, e.g. $ ocaml Objective Caml version 3.10.0 # #load "camlp4o.cma";; Camlp4 Parsing version 3.10.0 # open Camlp4.PreCast;; # module Caml = Camlp4OCamlParser.Make (Camlp4OCamlRevisedParser.Make (Camlp4.OCamlInitSyntax.Make(Ast)(Gram)(Quotation)));; Unbound module Camlp4OCamlParser.Make ... Can anyone tell me what else I should be loading/opening? John. _______________________________________________ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs