Xtext交叉引用和范围

时间:2012-07-27 17:56:10

标签: 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' name=ID
    '{' es+= Employee* '}';
Employee: 'Employee' name=ID ';' ;

这是我的dsl:

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

它始终显示“无法解析对员工'Pooyan'的引用。” 有人可以帮帮我吗? 我不知道......

2 个答案:

答案 0 :(得分:4)

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

  1. 如果您的语言始终使用平面命名空间,则可以在语言生成器中启用SimpleNamesFragment并删除QualifiedNamesFragment。这应该可以解决问题。
  2. 或者,您可以在范围提供程序中自定义具体引用“g”的范围。

答案 1 :(得分:1)

加入Sebastians'回答让它更精确:你需要改变" fragment = exports.QualifiedNamesFragment auto-inject {}" to" fragment = exports.SimpleNamesFragment"在xtext项目的相应.mwe2文件中。

希望这有帮助。