我使用Xtext來定義我的DSL。 Xtext生成一個解析器,可以讓我遍歷輸入DSL的EMF模型。我想將這個EMF模型翻譯成其他樹。爲了做這個翻譯,我需要遍歷樹。但是,我找不到由Xtext生成的EMF模型的訪問者類。我發現的最接近的是一個訪問單個節點的Switch類。我可以自己遍歷EMF模型,並在我訪問的每個節點上調用Switch類。但是,我想知道在Xtext中是否存在實現模型遍歷的訪問者功能。如何遍歷由Xtext生成的EMF對象樹?
回答
如果您考慮this thread,Switch(例如used here)幾乎是XText的官方訪問者模式。
你也有custom Validation process:
的
AbstractDeclarativeValidator
的目的就是讓你寫的約束聲明方式 - 作爲類名稱已經暗示。
這不是寫詳盡的if-else結構或擴展生成的EMF開關,您只需將任何方法添加註釋,並且在驗證發生時它將自動調用。
雖然這可能不完全是你所需要的。
嗯,是不是足夠使用EMF API?如果你想轉換模型,是不是可以使用像Xtend這樣的一些轉換語言?
您如何使用Xtend將EMF模型轉換爲另一個模型? – reprogrammer 2010-05-01 21:20:20
@reprogrammer查看文檔:http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.xpand.doc/help/ch01s05.html – 2010-05-01 22:14:32
我猜EcoreUtil.getAllProperContents(資源,假)可能是你在找什麼。你會得到一個將遍歷資源內容的TreeIterator。將iter.next()的結果傳遞給Switch,並根據元素類型執行轉換邏輯。
同樣,你可以得到一個'TreeIterator'從你的模型的'Resource.getAllContents()'。 – plagal 2012-03-02 01:33:41
- 1. 遍歷對象樹
- 2. Python生成器遍歷樹
- 3. 以升序生成樹遍歷樹
- 4. 如何遍歷Clojure中生成器函數生成的樹?
- 5. 對樹的遍歷
- 6. 遍歷JavaScript的一個樹對象
- 7. ruby中的對象樹遍歷
- 8. 遍歷樹遍歷
- 9. c#遍歷對象成員
- 10. 如何遍歷對象的對象?
- 11. ,如何遍歷對象
- 12. 如何遍歷此對象
- 13. 如何遍歷DOM對象?
- 14. ActionScript - 如何遍歷對象?
- 15. 使用LINQ遍歷對象樹
- 16. 遍歷對象,並建立樹天堂
- 17. 遍歷抽象語法樹
- 18. 二叉樹遍歷抽象
- 19. 遍歷對象
- 20. 遍歷對象
- 21. 遍歷對象
- 22. 如何使用生成器遍歷樹結構?
- 23. 樹的遍歷
- 24. 如何遍歷由spidermonkey生成的AST(Javascript文件)
- 25. 樹遍歷如何工作?
- 26. 在Ember.js中,如何使用super()遍歷對象繼承樹?
- 27. 如何生成網絡遍歷密鑰?
- 28. 如何生成遍歷速率圖
- 29. 如何遍歷div類中的對象?
- 30. 如何遍歷對象的ArrayList?
@VonC,我已經閱讀過你提到的線索。我很清楚Switch類。如果有一個實現遍歷邏輯的類,我也只是在徘徊。 – reprogrammer 2010-05-01 17:30:39
@reprogrammer:我這麼認爲,只是想指出Switch的「只有XText訪問者」狀態。 – VonC 2010-05-01 18:35:23