Browse thread
camlp4 question: Mixing a printer and Ast.fold
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Richard Jones <rich@a...> |
| Subject: | camlp4 question: Mixing a printer and Ast.fold |
I'm trying to translate Sylvain Le Gall's gettext module to use camlp4
from ocaml 3.10.0. The module is a printer which folds over the AST
looking for certain types of function call by name. A simplified
version is shown below.
This program is supposed to look for all instances of a function named
f applied to a string.
I cannot for the life of me work out how to get this to compile. I've
tried about a dozen different variations of the module names, 'open',
'include' etc. and got a dozen different errors.
----------------------------------------------------------------------
module Id = struct
let name = "pr_gettext"
let version = "$Id$"
end
module Make (Syntax : Camlp4.Sig.Syntax)
: Camlp4.Sig.Printer(Syntax.Ast).S =
struct
module Loc = Syntax.Loc
module Ast = Syntax.Ast
class visitor = object
inherit Ast.fold as super
val t = []
method t = t
method expr = function
| <:expr@loc< f $str:singular$ >> ->
let t = str :: t in
{< t = t >}
| e -> super#expr e
end
let print_interf ?input_file ?output_file _ = ()
let print_implem ?input_file ?output_file ast =
let visitor = (new visitor)#str_item in
let t = (visitor ast)#t in
List.iter prerr_endline t
end
(* Register the new printer. *)
module M = Camlp4.Register.Printer(Id)(Make)
----------------------------------------------------------------------
ocamlc -I +camlp4 -I /usr/lib64/ocaml/camlp4/Camlp4Parsers -pp camlp4of.opt camlp4lib.cma test.ml -o test.cmo
File "test.ml", line 19, characters 19-19:
Unbound constructor Ast.ExApp
Please let me know how to compile this before I go mad...
Rich.
--
Richard Jones
Red Hat