(Xtext)如何通过importURI更改导入资源的范围?

时间:2019-05-23 13:41:38

标签: xtext

我有一个DSL,它允许显式导入资源(通过importURI属性)。一切工作正常,除了我想直接通过其ID(而不是完全限定的名称)引用导入的元素这一事实。

我不使用importedNamespace,因为我将GlobalScope限制为仅显式导入的内容,并且对于每个资源,我需要所有元素(例如 ModelName 。*)。

因此,现在我可以引用这样的导入元素: ModelName OuterElement InnerElement 但我想要这样的东西: OuterElement InnerElement

当然,一般情况更为复杂且有所不同,但是我试图简化围绕该问题的所有内容。因此,请参考以下语法:

Model:
  name=ID ':'
  (include+=Include)?
  (outerElems+=OuterElement ';')*
  (uses+=Use ';')*;

Include:
  'import' importURI=STRING ;

OuterElement:
  'def' name=ID
  '(' (innerElements+=InnerElement (',' innerElements+=InnerElement)* )? ')' ;

InnerElement:
  name=ID;

Element:
    OuterElement | InnerElement;

Use:
  'use' use =[Element|FQN];

FQN:
    ID('.'ID)* ;

1 个答案:

答案 0 :(得分:0)

如果要通过简单名称引用元素,则必须绑定

SimpleNameProvider

IQualifiedNameProvider

public Class<? extends IQualifiedNameProvider> bindIQualifiedNameProvider() {
    return SimpleNameProvider.class;
}

分别

override bindIQualifiedNameProvider() {
    SimpleNameProvider
}