2

我对 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' 的引用”。有人可以帮我吗?我不知道...

4

2 回答 2

4

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

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

添加到 Sebastians 的答案以使其更精确:您需要在 xtext 项目的相应 .mwe2 文件中将“fragment = exporting.QualifiedNamesFragment auto-inject {}”更改为“fragment = exporting.SimpleNamesFragment”。

希望这可以帮助。

于 2014-08-06T00:29:30.043 回答