我在Xtext中有一个语法,它有一个自定义ScopeProvider
,它扩展了AbstractDeclarativeScopeProvider
。我正在使用此范围提供程序来准确地在同一DSL文件中对元素进行范围定位。
在文件中范围很简单,因为可以简单地在模型中向上/向下遍历。
但是,我现在想支持其他类的导入。但我一直坚持如何在我的范围提供者中找到其他文件中的元素。
我可以找到导入的实例,这些实例在语法中指定为:
Import:
"import" importURI=STRING
;
我可以从模型中获取对导入的引用,但这只包含作为引用其他文件的URI的字符串。
如何访问导入文件中的元素?
答案 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中访问外部作用域(来自导入文件的作用域) 但它与它的关系高度取决于你的用例