如果我有一个类似下面的Xtext语法:
grammar org.xtext.example.mydsl.ServerGeneratorLanguage with org.eclipse.xtext.common.Terminals
generate serverGeneratorLanguage "http://www.xtext.org/example/mydsl/ServerGeneratorLanguage"
Model:
(types+=Type)*;
Type:
Server | DomainModel;
Server:
"SERVER" name=ID "{"
"CONFIG" "{"
(Configs+=Config)*
"}"
"}";
Config:
rootConfig | hostNameConfig | portConfig | logConfig | sqldbConfig | resourceConfig;
rootConfig:
"ROOTDIR" "=" name=ID;
hostNameConfig:
"HOSTNAME" "=" name=ID;
portConfig:
"PORT" "=" name=ID;
logConfig:
"LOG" "=" name=ID;
sqldbConfig:
"SQLDB" "=" name=ID;
resourceConfig:
"RESOURCE" "=" name=ID;
DomainModel:
"DOMAINMODEL" name=ID "{"
"ENTITYS" "{"
(Entitys+=Entity)*
"}"
"ENTITY_RELATIONSHIP" "{"
(Relationships+=Relationship)*
"}"
"}";
Entity:
name=ID "{"
(Attributes+=Attribute)*
"}";
Attribute:
StringAttribute | NumberAttribute | ImageAttribute;
StringAttribute:
"STRING" name=ID;
NumberAttribute:
"NUMBER" name=ID;
ImageAttribute:
"IMAGE" name=ID;
QualifiedName:
ID ('.' ID)*;
Relationship:
name=[Attribute|QualifiedName] "->" refName=[Attribute|QualifiedName];
如何从比服务器更高级别访问每个Config对象的name-ID
部分。
让我解释一下:
我想通过从Server.configs.eClass.name
AS WELL AS DomainModel.blahblah.eClass.name
收集数据来生成代码。我假设我需要从Type访问它,但我似乎无法在Xtend中访问它。
从服务器我可以访问所有组件Server.configs.eClass.name.
感谢您的帮助。
答案 0 :(得分:0)
Xtext的自动模型推导者应该将继承层次结构中的常用功能(如您的情况中的“名称”)推送出去。如果不这样做,你应该检查:
每个 Config
都有name
功能吗?它们是同一类型吗?用你的语法检查一下。
RootConfig
,HostConfig
等来自Config
吗?在生成的类中检查这一点。