我在OCaml中实现了一个简单的C语言语言,并且像往常一样,AST是我的中间代码表示形式。因为我会在树上做相当多的遍历,所以我想实现 访客模式来缓解疼痛。我的AST当前遵循该语言的语义:OCaml访问者模式
type expr = Plus of string*expr*expr | Int of int | ...
type command = While of boolexpr*block | Assign of ...
type block = Commands of command list
...
现在的问题是,树中的节点是不同类型的。理想情况下,我会传递给访问过程的一个单一函数处理一个节点的 ;该过程将切换节点的类型并相应地完成工作。现在,我必须为每个节点类型传递一个函数,这似乎不是最佳解决方案。
在我看来,我可以(1)真正采用这种方法或(2)只有一种类型以上。通常的方法是什么?也许使用OO?
你能指定你想要的函数的类型吗? –