如何遍历Xtext生成的EMF对象树?

时间:2010-05-01 16:39:49

标签: eclipse dsl eclipse-emf xtext

我正在使用Xtext来定义我的DSL。 Xtext生成一个解析器,让我遍历输入DSL的EMF模型。我想将这个EMF模型翻译成其他树。要做这个翻译,我需要遍历树。但是,我找不到Xtext生成的EMF模型的访问者类。我发现最接近的是访问单个节点的Switch类。我可以自己遍历EMF模型,并在我访问的每个节点上调用Switch类。但是,我想知道Xtext中是否存在实现模型遍历的访问者功能。

3 个答案:

答案 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这样的一些转换语言?