Xtext范围和名称提供程序

时间:2018-04-22 09:28:56

标签: xtext

如何为范围提供程序和语法规则的自定义名称进行集成?

语法

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' );

1 个答案:

答案 0 :(得分:1)

当您对问候语进行调整时,您必须收集问候语

return Scopes.scopeFor(root.vis, scope)

收集Visible而非Greetings 所以你应该解决这个问题。

return Scopes.scopeFor(root.vis.map[make], scope)