[英]How are cardinalities written on XText from ecore meta model?
我為 state 機器創建了一個 ecore 元模型。 一台 state 機器具有 0..* 狀態、1..1 初始 state、1..1 最終 state 和 1..* 轉換。 當我生成 XText 語法時,我得到了這樣的東西
StateMachine:
'{'
('states' '{' states+=State ( "," states+=State)* '}' )?
'transitions' '{' transitions+=Transitions ( "," transitions+=Transitions)* '}'
'initialstate' initialstate=InitialState
'finalstate' finalstate=FinalState
'}';
現在由於狀態具有 0..* 關系,它們不應該只有 * 表示 0 或更多的運算符嗎? 為什么他們也有“?” 運算符表示 0 還是 1? 此外,轉換具有 1..* 關系,它們不應該使用“+”運算符而不是 * 嗎?
我們先來看看transitions
。
規則是transitions+=Transitions ( "," transitions+=Transitions)*
而不是(transitions+=Transitions)+
因為這是確保轉換用逗號 "," 分隔的簡單方法。 它可以讀作“至少一個轉換,然后是任意數量的轉換,每個轉換都以逗號為前綴”,它與 [1..*] 基數匹配。
states
也是如此:
('states' '{'... '}' )?
表示當您的 state 機器不包含 state (與 0 下限匹配)時,可以省略整個塊('states' '{' states+=State... '}' )?
表示如果狀態塊被寫入,那么它必須包含至少一個 state('states' '{' states+=State ( "," states+=State)* '}' )?
表示如果寫入狀態塊,則它必須包含至少一個 state,並且可以通過用逗號分隔它們來指定更多狀態“,”(與 * 上限匹配)。我個人認為你不需要? 運算符,因為您已經使用了 * 運算符,這意味着它可以為 0。是的,運算符 * 是正確的,因為您已經強制聲明了至少一個 state 並且可以省略另一個(逗號分隔)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.