0

一旦我从 ANTLR 语法生成了 AST,我试图了解如何应用访问者模式。它与遍历树的方法不同吗?

例如,假设我有以下 AST(来自这个问题):

在此处输入图像描述

如果我想将 FUNDEF id 添加到其所有 VARDECL id,我的方法是进行树遍历以查找 BLOCK 内的所有 VARDECL 并添加一个具有 (FUNDEF id + old_name) 的新子级并删除旧的子级。

这是正确的方法还是以某种方式访问​​者模式最有效?如果是访问者模式,那么在这种特定情况下的示例代码是什么?

提前致谢!

4

1 回答 1

1

我怀疑访问者模式在这里会有所帮助。当您有一个数据结构并将其带到每个节点进行更改时使用它。Freeman & Freeman 在“Head First Design Patterns”中描述的一个典型案例是点一杯咖啡。这是您的对象,它访问每个合成器以获取更多信息(牛奶、糖)。

您最初使用树遍历来修改 AST 的想法可能是您拥有的最佳选择。

于 2013-06-25T08:25:29.030 回答