Доступ к данным модели Xtend с верхнего уровня (генерация кода)
Если у меня есть грамматика 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];
Как мне получить доступ к name-ID
часть каждого объекта конфигурации с более высокого уровня, чем сервер. Позволь мне объяснить:
Я хочу сгенерировать код, собирая данные из Server.configs.eClass.name
ТАК ЖЕ КАК DomainModel.blahblah.eClass.name
, Я предполагаю, что мне нужно получить доступ к нему из Type, но я не могу получить там в Xtend.
С сервера я могу получить доступ ко всем компонентам Server.configs.eClass.name.
Спасибо вам за помощь.
1 ответ
Автоматический вывод модели Xtext должен выдвигать общие функции (например, "имя" в вашем случае) вверх по иерархии наследования. Когда он этого не делает, вы должны проверить:
Делает каждый
Config
иметьname
особенность? Они того же типа? Проверьте это в вашей грамматике.Делать
RootConfig
,HostConfig
и т.д. происходят отConfig
? Проверьте это в сгенерированных классах.