是否有可能获得 OCaml 程序的 AST?

发布于 2024-09-08 06:13:21 字数 80 浏览 7 评论 0原文

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

I'd like to be able to get the AST for a given OCaml program (I'd like to walk the AST and generate an instrumented version of the code or do some kind of transformation, for example). Do any of the OCaml tools support this functionality?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

羁拥 2024-09-15 06:13:21

从 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 的位置参数被隐藏。

Since OCaml 4.02.1 it is possible to use the PPX tools written bu Alain Frisch to precisely do this. Example:

% 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)})])}
=========

It is possible to use this program to dump the AST of a normal code file as well, and various options control the degree of precision of the dump. In the example above, for instance, the location parameters of the AST are hidden.

白日梦 2024-09-15 06:13:21

camlp4 是一种可行的方法。这是一个激励示例。文档很稀疏 - 确实如此,但人们可以通过阅读 wiki、现有示例、教程,甚至可能还有 camlp4 源代码。

camlp4 is a way to go. Here is a motivating example. The docs are sparse - true, but one can make his way reading through wiki, existing examples, tutorials, and maybe even camlp4 sources.

潜移默化 2024-09-15 06:13:21

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

What you're looking for is [camlp4][1]. I haven't used camlp4 before, so I can't attest to it's virtues as software. I have heard of people using camlp5 [http://pauillac.inria.fr/~ddr/camlp5/] which, according to wikipedia, has better documentation than the current version of camlp4.

月下客 2024-09-15 06:13:21

您可以使用compiler-libs来实现这一点。请参阅 ParsetreeAsttypesAst_helper

You can use compiler-libs to achieve this. See Parsetree, Asttypes, and Ast_helper.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文