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'を印刷できる他のプリンタはありますか? –
フックの下で、確かに、それらは 'Printers'インタフェースを通して公開されません。あなたの式を 'let _ =' str_itemとしてラップするのはどうですか?型については、 'type foo = 'などもできます。 –
gasche