首页 > 解决方案 > 如何从 importURI 中查询根元素?

问题描述

我正在开发一个 DSL,我正在使用 Xtext 的importURI属性来处理导入。它在编辑器中工作正常,但我不知道如何从importURIs 查询资源的根元素——它们只是字符串(稍后在 Acceleo 中)。最好的方法是什么?

PS My DSL 只允许显式导入。我也有 2 个元模型:第一个的根元素是Alg,第二个导入 Alg(s) (根元素 - Root)。

现在,我有一个“遍历”所有元素并返回导入资源的根元素的服务。我认为没有必要为了找到可以从 import 语句中推断出的东西而遍历整个树。

那么,检索所有Alg根的List<Alg> getAlgs(Root root)java 方法是什么?

语法

Root returns Root:
    {Root} (name = QualifiedName ":")?
    (importStatement += ImportStatement)*
    [...];

ImportStatement:
    'import' importURI=STRING;

[...]

加速

[query public getAlgRoot(arg0 : Root) : Sequence(Alg)
    = invoke('org.example.tojava.services.AlgpRootService', 'getAlgs(org.example.mydsl.model.Root)', Sequence{arg0}) 
/]

标签: xtextacceleo

解决方案


通常 importURI 中的 STRING 应该是一个指向您希望导入的资源的 URI,这使得它的元素可以在您的原始语法中进行交叉引用。所以我想说你只是缺少对 Alg 对象的交叉引用。


推荐阅读