如何引用 属性 引用而不是 '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
中执行任何操作
此问题是
我有以下语法部分:
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
中执行任何操作