是否可以获得OCaml程序的AST?

时间:2010-06-29 20:50:01

标签: ocaml abstract-syntax-tree camlp4

我希望能够获得给定OCaml程序的AST(例如,我想走AST并生成代码的检测版本或进行某种转换)。是否有任何OCaml工具支持此功能?

4 个答案:

答案 0 :(得分:4)

camlp4是一种方法。这是一个motivating example。文档稀疏 - 真实,但是人们可以通过wiki,现有示例,tutorials,甚至是camlp4来源阅读。

答案 1 :(得分:2)

您正在寻找的是[camlp4] [1]。我之前没有使用过camlp4,所以我无法证明它作为软件的优点。我听说有人使用camlp5 [http://pauillac.inria.fr/~ddr/camlp5/],根据维基百科,它有比当前版本的camlp4更好的文档。

答案 2 :(得分:2)

自OCaml 4.02.1起,可以使用PPX tools written bu Alain Frisch来精确地执行此操作。例如:

% ocamlfind ppx_tools/dumpast -e "1 + 2"
1 + 2
==>
{pexp_desc =
  Pexp_apply ({pexp_desc = Pexp_ident {txt = Lident "+"}},
   [("", {pexp_desc = Pexp_constant (Const_int 1)});
    ("", {pexp_desc = Pexp_constant (Const_int 2)})])}
=========

也可以使用该程序转储普通代码文件的AST,各种选项控制转储的精度。例如,在上面的示例中,AST的位置参数是隐藏的。

答案 3 :(得分:0)

您可以使用compiler-libs来实现此目的。请参阅ParsetreeAsttypesAst_helper