如何引用 属性 引用而不是 'named' 引用?

How to refer to a property reference instead of a 'named' reference?

此问题是 的后续问题。

我有以下语法部分:

 Fixture:
                            name            = ID
    ('('                    abbreviation    = ID ')')?
    ':'                     type            = FixtureType 
    'startDmxChannel' '='   startDmxChannel = INT
    ';';

FixtureGroup:
                            name            = ID 
    ('('                    abbreviation    = ID ')')?
    ':'                     fixtures += [Fixture.abbreviation]*
    ';';

我在实例中有以下部分:

Fixtures
{
    FrontRight1  (FR1) : FunPar startDmxChannel=1;
    FrontRight2  (FR2) : FunPar startDmxChannel=9;
    FrontRight3  (FR3) : FunPar startDmxChannel=17;
    FrontRight4  (FR4) : FunPar startDmxChannel=25;
}

FixtureGroups
{
    FrontRight: FrontRight1 FrontRight2 FrontRight3 FrontRight4;

我想在最后一行使用缩写名称:

    FrontRight: FR1 FR2 FR3 FR4;

或者更好的是,名称或缩写的组合,例如:

    FrontRight: FrontRight1 FR2 FR3 FR4;

如何实现?

这里涉及到三件事

  • 对于全局引用(文件之间):自定义 IDefaultResourceDescriptionStrategy(通过子类化 DefaultResourceDescriptionStrategy)允许在多个名称下索引元素并向用户数据添加信息,例如如果索引名称是缩写
  • 对于本地引用,同样可以在 org.eclipse.xtext.scoping.impl.ImportedNamespaceAwareLocalScopeProvider.internalGetAllDescriptions(Resource)
  • 处完成
  • 然后您可以调整 MyDslScopeProvider 以过滤正确的参考。
  • 如果引用是本地的,那么您可以在 MyDslScopeProvider
  • 中执行任何操作