如何引用属性引用而不是“命名”引用?

时间:2019-04-30 22:01:59

标签: eclipse grammar dsl xtext

这个问题是对/how-to-add-a-separate-in-in-xtext-list的跟进。

我有以下语法部分:

 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;

如何做到这一点?

1 个答案:

答案 0 :(得分:1)

这里涉及三件事

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