交叉引用涉及哪个实体?

时间:2015-05-31 15:54:49

标签: xtext

如果我有以下输入

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

1 个答案:

答案 0 :(得分:0)

Xtext将始终将交叉引用[Declaration]链接到由给定ID标识的第一个元素。在您的示例hello + 3中,hello后面的交叉引用将解析为第1行中的声明hello。但如果您有多个元素 < em>相同(合格)名称 相同范围(可见性容器)Xtext将抛出异常。你应该

  1. 实施您自己的ScopeProvider(使用your.dsl.scoping.YourDslScopeProvider中生成的存根)来解决此问题或
  2. 使用组合检查自动验证名称。

    fragment = validation.JavaValidatorFragment auto-inject {
        composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
    }