Reference Xtext交叉引用和范围界定

Reference Xtext交叉引用和范围界定,reference,xtext,scoping,Reference,Xtext,Scoping,我对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'

我对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;
}
它总是显示“无法解析对员工‘Pooyan’的引用。” 谁能帮帮我吗?
我不知道…

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

  • 如果您的语言始终使用平面名称空间,则可以在语言生成器中启用SimpleNamesFragment并删除QualifiedNamesFragment。这应该能奏效
  • 或者,您可以自定义范围提供程序中具体引用“g”的作用域
    添加到Sebastians的答案中以使其更精确:您需要在xtext项目的相应.mwe2文件中将“fragment=export.QualifiedNamesFragment auto injection{}”更改为“fragment=export.SimpleNamesFragment”

    希望这有帮助