2013-06-24 97 views
0

我想了解如何應用訪問者模式,一旦我有從ANTLR語法生成的AST。它是否與遍歷樹不同?ANTLR AST和訪問者模式

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

enter image description here

如果我想appened FUNDEF IDS向其所有VARDECL的ID,我的做法是做一個樹遍歷查找所有VARDECL在BLOCK內部,並添加一個新的(FUNDEF ID + old_name)孩子,並刪除舊的。

這是正確的方法還是會以某種方式訪客模式工作最好?如果訪問者模式,這個特定情況下的示例代碼是什麼?

在此先感謝!

回答

1

我懷疑訪客模式在這裏會有所幫助。當你有一個數據結構並且將它帶到每個節點進行更改時使用它。 Freeman提供的「Head First Design Patterns」中描述的典型案例是& Freeman正在點咖啡。這是你的對象,訪問每個compositor的額外信息(牛奶,糖)。

你最初的想法是使用樹行走來修改AST可能是你擁有的最佳選擇。