如何为范围提供程序和语法规则的自定义名称进行集成?
语法
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)
}
,这对于所需的结果必须是可见的。
范围提供者是:
var identidad = document.createElement( 'INPUT' );
答案 0 :(得分:1)
当您对问候语进行调整时,您必须收集问候语
return Scopes.scopeFor(root.vis, scope)
收集Visible
而非Greetings
所以你应该解决这个问题。
return Scopes.scopeFor(root.vis.map[make], scope)