是否有可能获得 OCaml 程序的 AST?
我希望能够获取给定 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
从 OCaml 4.02.1 开始,可以使用 Alain Frisch 编写的 PPX 工具来精确地执行此操作。示例:
也可以使用该程序转储普通代码文件的 AST,并且各种选项控制转储的精度。例如,在上面的示例中,AST 的位置参数被隐藏。
Since OCaml 4.02.1 it is possible to use the PPX tools written bu Alain Frisch to precisely do this. Example:
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.
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.
您正在寻找的是 [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.
您可以使用
compiler-libs
来实现这一点。请参阅Parsetree
、Asttypes
和Ast_helper
。You can use
compiler-libs
to achieve this. SeeParsetree
,Asttypes
, andAst_helper
.