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: | 2008-03-21 (15:06) |
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