簡體   English   中英

如何從ecore meta model 在XText 上寫入基數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM