如何使用Camlp4编译?

时间:2016-03-11 00:14:00

标签: ocaml camlp4

我正在测试Camlp4中的引文。我的tester.ml程序如下:

open Camlp4.PreCast;;
let x = <:Cstm< x = 1 + 2 >>;;
let y = <:expr< let y = 1 + 2 >>;;
print_string "done";;

我尝试过以各种方式编译它,例如。

ocamlc -pp "camlp4of pa_extend.cmo -loc" -I +camlp4 tester.ml

然而,所生成的可执行文件并没有打印出来&#34;已完成&#34;正如所料。我该如何编译这个文件?

1 个答案:

答案 0 :(得分:3)

camlp4 --help说:

-loc <name>      Name of the location variable (default: _loc).

你忘记了-loc的论点。您可以通过ocamlc的{​​{1}}选项检查此结果。 (-verbose非常方便找出编译中发生的事情):

-verbose

输入文件名$ ocamlc -verbose -pp "camlp4of pa_extend.cmo -loc" -I +camlp4 tester.ml + camlp4of pa_extend.cmo -loc "tester.ml" > /blahblah//ocamlpp2f0635 不被视为文件名,但被视为位置变量的名称。使用空输入tester.ml输出一个空程序,它由camlp4of编译。这就是为什么最终的可执行文件什么都不做。

您的代码包含一个奇怪的引号名ocamlcCstrm不是表达式而是结构项。以下是最近的编译代码之一:

let y = 1 + 2

您可以使用(* compilable by ocamlc -pp "camlp4of pa_extend.cmo" -I +camlp4 tester.ml *) open Camlp4.PreCast;; let x _loc = <:expr< x = 1 + 2 >>;; let y _loc = <:str_item< let y = 1 + 2 >>;; print_string "done";; 选项以人类可读的形式检查CamlP4的输出。这是使用CamlP4的另一项重要技术:

-printer Camlp4OCamlPrinter