交叉引用指的是哪个实体?
Which entity does a cross-reference refer?
如果我有以下输入
test = 3; //first
test = test + 3; //second
用看起来像这样的语法解析(例如)
Declaration:
name=ID "=" DeclarationContent
;
DeclarationContent:
number=INT ("+" DeclarationContent)?
| reference=[Declaration] ("+" DeclarationContent)?
;
引用指的是哪个声明(查看我示例中的第二个声明)?或者换句话说,引用 "test"
(第二个声明)是指第一个声明 ("test = 3;")
还是直接指向它自己 ("test = test+ 3")
,因此在层次结构中是一个循环。
问候 Krzmbrzl
Xtext 将始终 link 交叉引用 [Declaration]
到由给定 ID
标识的第一个元素。在您的示例 hello + 3
中,hello
后面的交叉引用将解析为第 1 行中的声明 hello
。但是如果您有 个元素 在相同范围(可见性容器)内使用相同(限定)名称 Xtext 将抛出异常。你应该
- 实施您自己的 ScopeProvider(使用
your.dsl.scoping.YourDslScopeProvider
中生成的存根)来解决此问题或
使用组合检查自动验证名称。
fragment = validation.JavaValidatorFragment auto-inject {
composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
}
如果我有以下输入
test = 3; //first
test = test + 3; //second
用看起来像这样的语法解析(例如)
Declaration:
name=ID "=" DeclarationContent
;
DeclarationContent:
number=INT ("+" DeclarationContent)?
| reference=[Declaration] ("+" DeclarationContent)?
;
引用指的是哪个声明(查看我示例中的第二个声明)?或者换句话说,引用 "test"
(第二个声明)是指第一个声明 ("test = 3;")
还是直接指向它自己 ("test = test+ 3")
,因此在层次结构中是一个循环。
问候 Krzmbrzl
Xtext 将始终 link 交叉引用 [Declaration]
到由给定 ID
标识的第一个元素。在您的示例 hello + 3
中,hello
后面的交叉引用将解析为第 1 行中的声明 hello
。但是如果您有 个元素 在相同范围(可见性容器)内使用相同(限定)名称 Xtext 将抛出异常。你应该
- 实施您自己的 ScopeProvider(使用
your.dsl.scoping.YourDslScopeProvider
中生成的存根)来解决此问题或 使用组合检查自动验证名称。
fragment = validation.JavaValidatorFragment auto-inject { composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator" }