From: Jeff Henrikson <jehenrik@yahoo.com>
To: caml-list@inria.fr
Subject: compiling camlp4 dynamic_functor_example.ml
Date: Sat, 07 Apr 2007 15:51:16 -0700 [thread overview]
Message-ID: <46182064.5030209@yahoo.com> (raw)
The "dynamic_functor_example.ml" from the documentation appears to not
compile anymore with the latest camlp4 release. Here's my attempt to
make it work.
from http://gallium.inria.fr/~pouillar/camlp4-changes.html
dynamic_functor_example.ml
type t1 = A | B
type t2 = Foo of string * t1
open Camlp4
module Id = struct (* Information for dynamic loading *)
let name = "My_extension"
let version = "$Id$"
end
(* An extension is just a functor: Syntax -> Syntax *)
module Make (Syntax : Sig.Syntax.S) = struct
include Syntax
let foo = Gram.Entry.mk "foo"
open Camlp4.Sig.Camlp4Token
EXTEND Gram
GLOBAL: foo
foo: [ [ "foo"; i = LIDENT; b = bar -> Foo(i, b) ] ];
bar: [ [ "?" -> A | "." -> B ] ];
END;;
Gram.parse_string foo (Loc.mk "<string>") "foo x?" = Foo("x", A)
DELETE_RULE Gram foo
end
(* Register it to make it usable via the camlp4 binary. *)
module M = Register.SyntaxExtension(Id)(Make)
The first thing I am reasonably sure needs changing is Sig.Syntax.S
doesn't seem to exist anymore, and judging by the signature of the
Register.SyntaxExtension functor, we want a Sig.SyntaxExtension. If we
make the parameter Syntax a Sig.Syntax then Make becomes a functor with
signature Sig.SyntaxExtension.
The next thing I figured out by looking at the translated
json_static.ml, which is that
GLOBAL: foo
needs to be
GLOBAL: foo;
To avert a syntax error.
Likewise, the DELETE_RULE seems to upset the lexer with syntax errors:
~/src/camlp4-beta jehenrik$ ocamlc -I +camlp4 -I +camlp4/Camlp4Parsers
-pp camlp4orf camlp4.cma -c dynamic_functor_example3.ml
File "dynamic_functor_example3.ml", line 21, characters 19-22:
Parse error: [name] expected after [qualuid] (in [delete_rule_body])
Preprocessor error
I don't know what to do about this, so I'll temporarily delete the
DELETE_RULE just so that I can get on to the other errors.
The closest I can see to making it compile, in a possibly defective state:
(* An extension is just a functor: Syntax -> Syntax *)
-module Make (Syntax : Sig.Syntax.S) = struct
+module Make (Syntax : Camlp4.Sig.Syntax) = struct
include Syntax
let foo = Gram.Entry.mk "foo"
open Camlp4.Sig.Camlp4Token
EXTEND Gram
- GLOBAL: foo
+ GLOBAL: foo;
foo: [ [ "foo"; i = LIDENT; b = bar -> Foo(i, b) ] ];
bar: [ [ "?" -> A | "." -> B ] ];
END;;
Gram.parse_string foo (Loc.mk "<string>") "foo x?" = Foo("x", A)
- DELETE_RULE Gram foo
end
(* Register it to make it usable via the camlp4 binary. *)
module M = Register.SyntaxExtension(Id)(Make)
And yet there is still a symbol not found:
~/src/camlp4-beta jehenrik$ ocamlc -I +camlp4 -I +camlp4/Camlp4Parsers
-pp camlp4orf camlp4.cma -c dynamic_functor_example3.ml
File "dynamic_functor_example3.ml", line 14, characters 2-29:
Unbound module Camlp4.Sig.Camlp4Token
Which is an unbound because in the current version Camlp4,
Camlp4.Sig.Camlp4Token is a module type, not a module. I have no idea
what is intended here.
BTW, my compilation string is:
ocamlc -I +camlp4 -I +camlp4/Camlp4Parsers -pp camlp4orf camlp4.cma -c
dynamic_functor_example3.ml
Which I'm not totally sure is right.
So that's the best I can do. Please help. The application I want to
write is not feasible in the old camlp4, but I suspect may be possible
in the new. Thanks for all the effort getting the system to the next level.
Jeff Henrikson
next reply other threads:[~2007-04-07 22:47 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-04-07 22:51 Jeff Henrikson [this message]
2007-04-08 10:34 ` [Caml-list] " Nicolas Pouillard
2007-04-15 5:05 ` Jeff Henrikson
2007-04-15 9:00 ` 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=46182064.5030209@yahoo.com \
--to=jehenrik@yahoo.com \
--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