我正在使用Xtext来定义我的DSL。 Xtext生成一个解析器,让我遍历输入DSL的EMF模型。我想将这个EMF模型翻译成其他树。要做这个翻译,我需要遍历树。但是,我找不到Xtext生成的EMF模型的访问者类。我发现最接近的是访问单个节点的Switch类。我可以自己遍历EMF模型,并在我访问的每个节点上调用Switch类。但是,我想知道Xtext中是否存在实现模型遍历的访问者功能。
答案 0 :(得分:3)
如果您考虑this thread,Switch(例如used here)几乎是XText的官方访问者模式。
您还拥有custom Validation process:
AbstractDeclarativeValidator
的目的是允许您以声明的方式编写约束 - 正如类名已经建议的那样。
这不是编写详尽的if-else结构或扩展生成的EMF开关,只需将@Check
注释添加到任何方法中,它将在验证发生时自动调用。
但这可能不是你所需要的。
答案 1 :(得分:3)
我猜EcoreUtil.getAllProperContents(Resource,false)可能就是你要找的东西。您将获得一个将遍历资源内容的TreeIterator。将iter.next()的结果传递给Switch,并根据元素类型执行转换逻辑。
答案 2 :(得分:0)
嗯,使用EMF API还不够吗?如果你想转换模型,是不是可以使用像Xtend这样的一些转换语言?