Доступ к данным модели 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? Проверьте это в сгенерированных классах.

Другие вопросы по тегам