Ocaml 请参阅mli文件的AST

Ocaml 请参阅mli文件的AST,ocaml,camlp4,Ocaml,Camlp4,我希望能够看到某个模块的AST是什么,这样我就可以针对它编写一个合适的过滤器 因为我现在不知道如何“记录”过滤器,例如,我尝试匹配,当匹配失败时,我记录,我使用CAMLP4AST升降机函数将模块转换为树,然后在控制台上打印出来,我尝试创建匹配模式,如下所示: camlp4o -filter Camlp4AstLifter -printer o name_of_file.ml 现在,当我想要获取一个mli文件并使用camlp4过滤器来创建这个mli文件的默认实现时,这有点不够 我无法使用CAML

我希望能够看到某个模块的AST是什么,这样我就可以针对它编写一个合适的过滤器

因为我现在不知道如何“记录”过滤器,例如,我尝试匹配,当匹配失败时,我记录,我使用CAMLP4AST升降机函数将模块转换为树,然后在控制台上打印出来,我尝试创建匹配模式,如下所示:

camlp4o -filter Camlp4AstLifter -printer o name_of_file.ml
现在,当我想要获取一个mli文件并使用camlp4过滤器来创建这个mli文件的默认实现时,这有点不够

我无法使用CAMLP4AST升降机查看树,因为此命令似乎不适用于mli,它将mli再次显示为输出,因此我在尝试匹配时有点盲目

有人有主意吗?或者是关于如何改进我的过滤/匹配方法的提示,我觉得我还没有做好,非常乏味


Kasper

将模块类型S=放入ml文件并应用升降机?

ocaml编译器有一些未记录的开关,但在执行ocamlc-h时会显示这些开关,这可能要感谢模块Arg,ocamlopt还有更多:

-dsource  (undocumented)
-dparsetree  (undocumented)
-dtypedtree  (undocumented)
-drawlambda  (undocumented)
-dlambda  (undocumented)
-dclambda  (undocumented)
...

我发现-dsource提供了源代码的预打印。您想要的选项也应该在那里。

是的,我首先尝试了,但它似乎没有给出与mli文件相同的树,或者我的匹配是不正确的,目标是最终都有,所以在ml文件中有一个类型的模块,在mli文件中有一个类型的模块。因此,我还需要尝试获取mli文件的树。正如我所说的,与模块内部声明的类型相比,这似乎有点不对劲。