使用ScopeProvider导入Xtext

时间:2014-02-04 20:25:41

标签: xtext

我在Xtext中有一个语法,它有一个自定义ScopeProvider,它扩展了AbstractDeclarativeScopeProvider。我正在使用此范围提供程序来准确地在同一DSL文件中对元素进行范围定位。

在文件中范围很简单,因为可以简单地在模型中向上/向下遍历。

但是,我现在想支持其他类的导入。但我一直坚持如何在我的范围提供者中找到其他文件中的元素。

我可以找到导入的实例,这些实例在语法中指定为:

Import:
   "import" importURI=STRING
;

我可以从模型中获取对导入的引用,但这只包含作为引用其他文件的URI的字符串。

如何访问导入文件中的元素?

1 个答案:

答案 0 :(得分:2)

嗨,我不太清楚你的用例是什么。 import语句只是使导入资源中的元素可见,以便您可以引用它们

Model:
    imports+=Import*
    defines+=Define*
    uses+=Use*
;

Import:
    "import" importURI=STRING
;

Define:
    "def" name=ID
;

Use:
    "use" use=[Define]
;

a.mydsl

def a

b.mydsl

import "a.mydsl"
use a

我不知道为什么你明确想要在scopeprovider中搜索它。 它们是自动可见的

你可以致电

delegeteGetScope(ctx,ref)
在scopeprovider中

访问外部作用域(来自导入文件的作用域) 但它与它的关系高度取决于你的用例