ANTLR AST和访客模式

时间:2013-06-24 22:00:08

标签: antlr antlr3 visitor

一旦我从ANTLR Grammar生成AST,我试图了解如何应用Visitor模式。它是不同于穿越树的方法吗?

例如,假设我有以下AST(From this question):

enter image description here

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

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

提前致谢!

1 个答案:

答案 0 :(得分:1)

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

使用树步行修改AST的最初想法可能是您的最佳选择。