Eclipse Xtext项目中所有文件的交叉引用

Eclipse Xtext项目中所有文件的交叉引用,eclipse,scope,dsl,xtext,cross-reference,Eclipse,Scope,Dsl,Xtext,Cross Reference,我正在用xtext制作一个非常简单的DSL。项目将包含定义消息名称或引用消息名称的文件。我提供了一个简化的示例: 语法: Model: statements+=(MessageDefinition | MessageUsage)*; MessageDefinition: '[MESSAGE_DEF]' name=ID; MessageUsage: '[MESSAGE_USAGE]' usage=[MessageDefinition]; File1.ex: [MESSAG

我正在用xtext制作一个非常简单的DSL。项目将包含定义消息名称或引用消息名称的文件。我提供了一个简化的示例:

语法:

Model:
    statements+=(MessageDefinition | MessageUsage)*;
MessageDefinition:
    '[MESSAGE_DEF]' name=ID;
MessageUsage:
    '[MESSAGE_USAGE]' usage=[MessageDefinition];
File1.ex:

[MESSAGE_DEF] EXAMPLE_1
[MESSAGE_DEF] EXAMPLE_2
[MESSAGE_USAGE] EXAMPLE_1
File2.ex:

[MESSAGE_USAGE] EXAMPLE_2
在本例中,来自示例_1的交叉引用起作用,因此使用上的“开放声明”将我带到定义。但是,示例_2上的交叉引用不起作用。我认为默认范围规则阻止不同的文件共享引用

我需要添加什么,以便项目中的所有文件共享相同的全局范围进行交叉引用

其他信息:

  • 在运行时项目中启用“自动生成”选项
  • .project文件包括xtextBuilder的buildCommand和 自然换自然
  • 我只是在尝试使用IDE 交叉引用功能,无需生成代码
  • 运行时项目中的所有文件都存在于同一文件夹中

该项目是使用标准向导中的“Xtext project”创建的,我只编辑了预生成代码中的语法,其他所有内容都按照默认设置。我想我需要添加一些自定义的作用域行为/规则来将所有文件加载到全局范围,但我不确定应该如何执行此操作?

如果您

  • 在运行时工作区中自动启用生成
  • 您在其中建模的项目已启用xtext nature和xtext builder(右键单击->配置->…)
  • 如果是java项目,则模型文件必须位于源文件夹或源文件夹内的包中

  • 在何处指定作用域/名称解析规则,以允许Xtext知道file2中的标识符EXAMPLE_2引用file1中EXAMPLE_2的定义?一般来说,语言具有任意的范围规则(见证C++,在参考手册中有600页专门用于此)。语法并不能告诉你范围规则。我理解你的观点并同意。我没有修改xtext默认值中的作用域规则。我不明白的是如何配置xtext,以便项目中每个文件中的每个定义都自动在同一范围内。感谢您的建议,尽管如此,我仍然有一些问题。对第1点和第2点表示满意,但不清楚第3点的含义,请详细说明?我已经在我原来的帖子中添加了一些额外的信息。File1.ex和File2.ex驻留在什么样的项目中?截图就好了。如果使用“打开模型元素”对话框Crtl/Cmd+Shift+F3,如果搜索元素,是否会在那里显示元素?我创建的项目是“常规>项目”。我创建了一个新的运行时项目来确认我以前所做的工作,并创建了具有相同内容的等效文件。这似乎足以让问题消失!似乎第二个文件(File2.ex)顽固地没有接收到对语法的更改。将相同的内容移动到一个新项目中似乎就足以使它工作。古怪的谢谢你的帮助。