首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用OCaml解析OCaml文件

使用OCaml解析OCaml文件
EN

Stack Overflow用户
提问于 2014-04-23 10:15:50
回答 2查看 554关注 0票数 5

我想用OCaml分析OCaml文件(.ml)。我想把这些文件分解成抽象语法树进行分析。我尝试过使用camlp4,但没有成功。以前有没有其他人成功地做到了这一点?这是解析OCaml文件的最佳方法吗?

EN

回答 2

Stack Overflow用户

发布于 2014-04-23 10:35:52

(我假设您已经了解了OCaml的基本部分:如何编写OCaml代码、如何链接模块和库、如何编写构建脚本等等。如果您不了解,请先学习它们。)

最好的方法是使用OCaml编译器本身使用的真正的OCaml代码解析器,因为它在定义上是100%兼容的。

CamlP4还实现了OCaml解析器,但它与真正的解析器略有不兼容,并且解析树在某种程度上专门用于编写语法扩展:对于任何其他类型的分析都不是很好。

您可能希望使用P4解析具有语法扩展名的.ml文件。即使在这种情况下,您也应该坚持使用真正的解析器:您可以使用P4对源代码进行去粘处理,然后使用真正的解析器将结果发送到您的分析器。

要使用编译器的解析器,最简单的方法是使用OCaml -libs.common OCamlFind包。它包含OCaml编译器的解析器和类型检查器。

从修改OCaml编译器源代码的driver/compile.ml开始,实现了主要的编译阶段:调用预处理器、解析、键入、代码生成。要解析.ml文件,您应该修改(或简化) Compile.implementation。对于.mli文件,请使用Compile.interface

祝好运。

票数 6
EN

Stack Overflow用户

发布于 2014-04-24 00:37:10

不能对ocaml编译器使用-dparsetree选项吗?

hello.ml:

代码语言:javascript
复制
let _ = print_endline "Hello AST"

现在编译它:

代码语言:javascript
复制
$ ocamlc -dparsetree hello.ml

这会导致:

代码语言:javascript
复制
[
  structure_item (hello.ml[1,0+0]..[1,0+33])
    Pstr_eval
    expression (hello.ml[1,0+8]..[1,0+33])
      Pexp_apply
      expression (hello.ml[1,0+8]..[1,0+21])
        Pexp_ident "print_endline" (hello.ml[1,0+8]..[1,0+21])
      [
        <label> ""
          expression (hello.ml[1,0+22]..[1,0+33])
            Pexp_constant Const_string("Hello AST",None)
      ]
]

另请参阅this blog post on -ppx extensions,其中包含有关扩展点语法扩展( OCaml 4.02中编写语法扩展的新方法)的一些信息。那里有关于各种AST操作模块的信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23233636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档