これには簡単な解決策があることは知っていますが、それを実装する方法がわかりません。
何をする必要があるかではなく、答えを実装する方法を探しています。答えの半分はすでにこのページにあります: Xtext 相互参照とスコープ
私の問題は、以下の文法にあります。
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;
// Relationship = [new table name] : [shared key name] -> ref_table(ref_id)
Relationship:
name=ID ":" newEntityName=ID "->" refEntityName=[Entity|ID]"("refName=[Attribute|ID]")"; // <- Problem here
モデルを作成するときに、エンティティ内の属性を参照するための "refName=[Attribute|ID]" を取得できません。以下のコードで
DOMAINMODEL auctionHouse{
ENTITYS {
lots{
NUMBER id0
NUMBER lotNo
STRING name
STRING priceEstimate
STRING description
}
auctions{
NUMBER id1
NUMBER date
STRING description
}
auction_lots{
NUMBER id2
STRING lot_id
NUMBER auction_id
}
}
ENTITY_RELATIONSHIP {
auction_lots : lot_id -> lots(id0) // <- Will not find 'id0'
auction_lots : auction_id -> auctions(id1) // <- Will not find 'id1'
}
}
どうすれば範囲を広げることができますか?名前が同じでスコープが異なる 2 つの属性を区別するにはどうすればよいですか?