0

以下のような 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.nameAS WELL ASからデータを収集してコードを生成したいDomainModel.blahblah.eClass.name。Type からアクセスする必要があると思いますが、Xtend ではアクセスできないようです。

サーバーからすべてのコンポーネントにアクセスできますServer.configs.eClass.name.

お手伝いありがとう。

4

1 に答える 1

0

Xtextの自動モデル推論機能は、一般的な機能(この場合は「name」など)を継承階層にプッシュする必要があります。これが行われない場合は、以下を確認する必要があります。

  • それぞれ Configname機能がありますか?それらは同じタイプですか?文法でこれを確認してください。

  • 等は由来しRootConfigますか?生成されたクラスでこれを確認してください。HostConfigConfig

于 2013-03-22T07:41:21.077 に答える