1

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

因为我现在并没有真正看到如何“登录”过滤器,例如我尝试匹配并且当匹配失败时我登录,我使用 Camlp4AstLifter 函数将模块转换为树,然后打印在控制台上,像这样我尝试创建我的匹配模式,如下所示:

camlp4o -filter Camlp4AstLifter -printer o name_of_file.ml

当我想获取一个 mli 文件并使用 camlp4 过滤器来创建这个 mli 文件的默认实现时,这有点短。

我无法使用 Camlp4AstLifter 查看树,因为此命令似乎不适用于 mli(它再次向我显示 mli 作为输出),因此我在尝试匹配时有点盲目。

有人有想法吗?或者也许是关于如何改进我的过滤/匹配方法的提示(我不觉得我做得对,非常乏味)。

卡斯帕

4

2 回答 2

0

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

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

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

于 2014-02-26T13:58:02.907 回答
0

放入module type S = <contents of mli file>ml文件并应用升降机?

于 2014-02-14T15:50:38.787 回答