2012-07-27 55 views
2

我有一些问题XTEXT交叉引用 这是一个非常简单的语法:的Xtext交叉引用和范围

grammar org.xtext.example.mydsl1.Test with org.eclipse.xtext.common.Terminals 
generate test "http://www.xtext.org/example/mydsl1/Test" 
Model: block=Block? cs+=Company* ; 
Block: '{' g=[Employee] '}'; 
Company: 'Company' name=ID 
    '{' es+= Employee* '}'; 
Employee: 'Employee' name=ID ';' ; 

,这是我的DSL:

{ Pooyan } 
Company Sony{ 
    Employee Pooyan; 
    Employee John; 
} 

它总是显示“Couldn解决员工'波燕'的提法。“ 任何人都可以帮我吗? 我不知道...

回答

4

Pooyan的完全合格的名字是Sony.Pooyan。由于块中的交叉引用'g'是在另一个包含中定义的,因此必须进行较小的自定义以将其放到范围中。

  1. 如果您的语言始终使用平面命名空间,则可以在语言生成器中启用SimpleNamesFragment并移除QualifiedNamesFragment。这应该做的伎俩。
  2. 或者,您可以自定义作用域提供程序中具体引用'g'的作用域。
1

添加到塞巴斯蒂安的回答,使之更准确:在您的XTEXT相应.mwe2文件,你需要改变‘片段= exporting.QualifiedNamesFragment自动注射{}’到‘片段= exporting.SimpleNamesFragment’项目。

希望这会有所帮助。