我正在测试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;正如所料。我该如何编译这个文件?
答案 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
编译。这就是为什么最终的可执行文件什么都不做。
您的代码包含一个奇怪的引号名ocamlc
,Cstrm
不是表达式而是结构项。以下是最近的编译代码之一:
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