2010-05-01 30 views
4

我使用Xtext來定義我的DSL。 Xtext生成一個解析器,可以讓我遍歷輸入DSL的EMF模型。我想將這個EMF模型翻譯成其他樹。爲了做這個翻譯,我需要遍歷樹。但是,我找不到由Xtext生成的EMF模型的訪問者類。我發現的最接近的是一個訪問單個節點的Switch類。我可以自己遍歷EMF模型,並在我訪問的每個節點上調用Switch類。但是,我想知道在Xtext中是否存在實現模型遍歷的訪問者功能。如何遍歷由Xtext生成的EMF對象樹?

回答

3

如果您考慮this thread,Switch(例如used here)幾乎是XText的官方訪問者模式。
你也有custom Validation process

AbstractDeclarativeValidator的目的就是讓你寫的約束聲明方式 - 作爲類名稱已經暗示。
這不是寫詳盡的if-else結構或擴展生成的EMF開關,您只需將任何方法添加註釋,並且在驗證發生時它將自動調用。

雖然這可能不完全是你所需要的。

+0

@VonC,我已經閱讀過你提到的線索。我很清楚Switch類。如果有一個實現遍歷邏輯的類,我也只是在徘徊。 – reprogrammer 2010-05-01 17:30:39

+0

@reprogrammer:我這麼認爲,只是想指出Switch的「只有XText訪問者」狀態。 – VonC 2010-05-01 18:35:23

0

嗯,是不是足夠使用EMF API?如果你想轉換模型,是不是可以使用像Xtend這樣的一些轉換語言?

+0

您如何使用Xtend將EMF模型轉換爲另一個模型? – reprogrammer 2010-05-01 21:20:20

+0

@reprogrammer查看文檔:http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.xpand.doc/help/ch01s05.html – 2010-05-01 22:14:32

3

我猜EcoreUtil.getAllProperContents(資源,假)可能是你在找什麼。你會得到一個將遍歷資源內容的TreeIterator。將iter.next()的結果傳遞給Switch,並根據元素類型執行轉換邏輯。

+0

同樣,你可以得到一個'TreeIterator'從你的模型的'Resource.getAllContents()'。 – plagal 2012-03-02 01:33:41