5
我有这段包含camlp4引用的代码。打印OCaml AST作为OCaml代码
let f_name = "my_func"
<:str_item< value $lid:f_name$ a = a * 2 >>
通过camlp4of
运行此之后,它会产生这样的:
Ast.StExp (_loc,
(Ast.ExApp (_loc,
(Ast.ExApp (_loc, (Ast.ExId (_loc, (Ast.IdLid (_loc, "=")))),
(Ast.ExApp (_loc,
(Ast.ExApp (_loc,
(Ast.ExId (_loc, (Ast.IdLid (_loc, "value")))),
(Ast.ExId (_loc, (Ast.IdLid (_loc, f_name)))))),
(Ast.ExId (_loc, (Ast.IdLid (_loc, "a")))))))),
(Ast.ExApp (_loc,
(Ast.ExApp (_loc, (Ast.ExId (_loc, (Ast.IdLid (_loc, "*")))),
(Ast.ExId (_loc, (Ast.IdLid (_loc, "a")))))),
(Ast.ExInt (_loc, "2")))))))
我的问题是这样的,反正是有打印生成的代码OCaml的?我应该使用什么camlp4of
命令或选项来显示代码?我期望从上面的例子中看到的是:
value my_func a = a * 2
这可能吗?原因是因为我想做一些调试,看看生成的ocaml代码是怎样的。
函数'Camlp4.PreCast.Printers.OCaml.print_implem'只适用于'str_item'。有没有其他打印机可以打印'expr's? –
当然,在钩子下,但他们不通过'Printers'界面暴露。把你的表情换成'let _ ='str_item?对于类型,你也可以'输入foo = '等。 –
gasche