From: "Harrison, John R" <john.r.harrison@intel.com>
To: OCaml <caml-list@yquem.inria.fr>
Cc: "Harrison, John R" <john.r.harrison@intel.com>
Subject: camlp4 module dependencies
Date: Sun, 21 Sep 2008 11:05:36 -0700 [thread overview]
Message-ID: <BC67582D4FC8ED45BAABE48343BF571102FD6A9B8E@azsmsx501.amr.corp.intel.com> (raw)
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 =
<:str_item@loc< $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.
next reply other threads:[~2008-09-21 18:05 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-09-21 18:05 Harrison, John R [this message]
2008-10-09 18:36 ` [Caml-list] " Nicolas Pouillard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=BC67582D4FC8ED45BAABE48343BF571102FD6A9B8E@azsmsx501.amr.corp.intel.com \
--to=john.r.harrison@intel.com \
--cc=caml-list@yquem.inria.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox