如果我有以下输入
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
答案 0 :(得分:0)
Xtext将始终将交叉引用[Declaration]
链接到由给定ID
标识的第一个元素。在您的示例hello + 3
中,hello
后面的交叉引用将解析为第1行中的声明hello
。但如果您有多个元素 < em>相同(合格)名称 相同范围(可见性容器)Xtext将抛出异常。你应该
your.dsl.scoping.YourDslScopeProvider
中生成的存根)来解决此问题或使用组合检查自动验证名称。
fragment = validation.JavaValidatorFragment auto-inject {
composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
}