一旦我从ANTLR Grammar生成AST,我试图了解如何应用Visitor模式。它是不同于穿越树的方法吗?
例如,假设我有以下AST(From this question):
如果我想将FUNDEF ID添加到其所有VARDECL ID中,我的方法是进行树遍历以找到BLOCK中的所有VARDECL并添加一个新的子节点(FUNDEF id + old_name)并删除旧的子节点。
这是正确的方法还是以某种方式访客模式最好?如果访问者模式,在这种特定情况下的示例代码是什么?
提前致谢!
答案 0 :(得分:1)
我怀疑访客模式会对此有所帮助。当您拥有数据结构并将其带到每个节点进行更改时,将使用它。这是Freeman& Co.的“Head First Design Patterns”中描述的典型案例。弗里曼正在订购咖啡。这是您访问每个合成器以获取其他信息(牛奶,糖)的对象。
使用树步行修改AST的最初想法可能是您的最佳选择。