如何打印类型化的解析树

How to print typed parse tree

-dparsetree 可以用来打印无类型的解析树,但是如何在 OCaml 中打印类型化的 AST?我查看了源代码中的typing目录,似乎有些功能可以做到这一点。

使用-dtypedtree。它是比 -dparsetree 更新的功能,从 4.01.0 开始引入。如果 ocamlc 没有,你需要升级你的编译器。

不幸的是-dtypedtree没有显示类型化AST的类型信息。恐怕目前没有选项或工具可以使用类型信息打印它。恐怕是因为打印所有附加到子节点的类型信息太难阅读了。例如,即使是简单的代码 let f x = x + 1 也具有以下类型的 AST:

let (f : int -> int) =
  (fun (x : int) ->  
    (( ( (+) : int -> int -> int) (x : int) : int -> int) (1 : int) : int) : int -> int)

最好的方法是编写自己的类型化 AST 打印机,它只打印您感兴趣的类型。