Как вы интегрируете поставщика области и пользовательское имя для правила грамматики?
Грамматика
Model:
g+=Greeting+
(vis+=Visible)*
ref=Ref;
Ref:
'ref_greeting' grt=[Greeting];
Visible:
'vis' make=[Greeting];
Greeting:
'Hallo' name=ID '!';
Правило Visible
используется для определения Greeting
, которые видны другим, в рамках действия правила Ref
. Два входных файла:
Hallo hallo!
Hallo hallo_other_vis!
ref_greeting hallo
а также
Hallo h!
vis hallo_other_vis
ref_greeting hallo_other_vis <--- error here
Для объема второго файла виден h
, но не hallo_other_vis
, который должен быть виден для желаемых результатов.
Поставщик области:
override getScope(EObject context, EReference reference) {
if(context instanceof Ref && reference == MyDslPackage.Literals.REF__GRT){
var root = EcoreUtil2.getContainerOfType(context, Model)
var scope = Scopes.scopeFor(root.g)
if(root.vis !== null){
return Scopes.scopeFor(root.vis, scope) /// XXX is this correct
}
}
return super.getScope(context, reference)
}
ERROR org.eclipse.xtext.linking.lazy.LazyLinkingResource - Cyclic resolution of lazy links : Visible.make->Visible.make
и исключениеLazyLinkingResource$CyclicLinkingException
. Пример этого вопроса работает сейчас. 22.04.2018