我希望能够为给定的 OCaml 程序获取 AST(例如,我想遍历 AST 并生成代码的检测版本或进行某种转换)。是否有任何 OCaml 工具支持此功能?
问问题
736 次
4 回答
3
从 OCaml 4.02.1 开始,可以使用由Alain Frisch 编写的 PPX 工具来精确执行此操作。例子:
% 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 的位置参数是隐藏的。
于 2016-03-11T18:30:26.600 回答
2
您正在寻找的是 [camlp4][1]。我以前没有使用过camlp4,所以我无法证明它作为软件的优点。我听说有人使用camlp5 [ http://pauillac.inria.fr/~ddr/camlp5/],根据维基百科,它比当前版本的camlp4有更好的文档。
于 2010-06-30T02:55:48.837 回答
2
您可以使用compiler-libs
来实现这一点。请参阅Parsetree
、Asttypes
和Ast_helper
。
于 2017-02-24T19:20:44.047 回答