From: Jeremy Yallop <jeremy.yallop@ed.ac.uk>
To: caml-list@inria.fr
Subject: Re: [Caml-list] building executables with camlp4
Date: Wed, 13 Jun 2007 15:07:17 +0100 [thread overview]
Message-ID: <466FFA15.9080406@ed.ac.uk> (raw)
In-Reply-To: <cd67f63a0706130645y48555471u1409d47526ec8408@mail.gmail.com>
Nicolas Pouillard wrote:
> After thinking a little more, I can explain what's happening there is
> two modes to get into Camlp4 pipeline. The first one is through
> registration and the second one is through dyn-linking of cmo files on
> the command line.
>
> Here your Minimal module is neither on the command line nor registered.
>
> To register it make a functor around your grammar extension and call
> Camlp4.Register.OCamlSyntaxExtension.
Thanks, Nicolas! Everything's working now. In case anyone else wants
to do something similar, here's the fully working example:
minimal.ml:
open Camlp4.PreCast
module Id : Camlp4.Sig.Id =
struct
let name = "minimal"
let version = "1.0"
end
module Extension (Syntax : Camlp4.Sig.Camlp4Syntax) =
struct
include Syntax
DELETE_RULE Gram str_item: "type"; type_declaration END
EXTEND Gram
str_item:
[[ "type"; types = type_declaration ->
<:str_item< type $types$ >>
| "type"; types = type_declaration;
"premiums" ; "(" ; "squigglier" ; ")" ->
prerr_endline "squigglier!";
<:str_item< type $types$ >>
]];
END
end
module M = Camlp4.Register.OCamlSyntaxExtension(Id)(Extension)
File input.ml:
type x = int premiums ( squigglier )
Building:
$ ocamlc -c -pp camlp4of -I /usr/local/ocaml/lib/ocaml/camlp4
minimal.ml
$ ocamlc -g -linkall -I /usr/local/ocaml/lib/ocaml/camlp4 \
-o minimal \
camlp4lib.cma \
unix.cma \
Camlp4Parsers/Camlp4OCamlRevisedParser.cmo \
Camlp4Parsers/Camlp4OCamlParser.cmo \
Camlp4Printers/Camlp4OCamlPrinter.cmo \
minimal.cmo \
Camlp4Bin.cmo
Running:
$ ./minimal input.ml
squigglier!
type x = int
Jeremy.
prev parent reply other threads:[~2007-06-13 14:14 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-06-13 10:47 Jeremy Yallop
2007-06-13 12:23 ` [Caml-list] " Nicolas Pouillard
2007-06-13 13:12 ` Jeremy Yallop
2007-06-13 13:27 ` Nicolas Pouillard
2007-06-13 13:27 ` Jeremy Yallop
2007-06-13 13:45 ` Nicolas Pouillard
2007-06-13 14:07 ` Jeremy Yallop [this message]
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=466FFA15.9080406@ed.ac.uk \
--to=jeremy.yallop@ed.ac.uk \
--cc=caml-list@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