5

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

4

3 回答 3

3

我猜 EcoreUtil.getAllProperContents(Resource, false) 可能是您正在寻找的。您将获得一个遍历资源内容的 TreeIterator。将 iter.next() 的结果传递给 Switch 并根据元素类型执行转换逻辑。

于 2010-05-02T10:11:36.893 回答
3

如果你考虑这个线程,Switch(例如在这里使用)几乎是 XText 的官方访问者模式。
您还有自定义验证流程

的目的AbstractDeclarativeValidator是允许你以声明的方式编写约束——正如类名已经暗示的那样。
这不是编写详尽的 if-else 结构或扩展生成的 EMF 开关,您只需将@Check注释添加到任何方法,它会在验证发生时自动调用。

不过,这可能不是您所需要的。

于 2010-05-01T17:10:24.607 回答
0

嗯,使用 EMF API 还不够吗?如果要转换模型,是否无法使用 Xtend 之类的转换语言?

于 2010-05-01T19:57:59.640 回答