ステートマシンを記述する Xtext 文法があり、以前に宣言されたイベントと状態への参照を使用して遷移を記述しています。
Event:
'event' name=ID
;
State:
'state' name=ID
;
Transition:
event=[Event] '=>' state=[State]
;
MWE を使用してエディターを生成すると、参照アイテムの存在が検証されます。たとえば、
init => idle
これらが必要になります:
event init
state idle
コード内の別の場所に存在する必要があります(ところで、ステートマシンごとに1つのファイルを使用しているため、同じファイルにある必要があります)。私の Xpand コード テンプレートでは、遷移の要素としてイベントと状態にアクセスできます。
«FOREACH statemachine.transitions.event AS event-» // you get the idea
これは非常にうまく機能し、かなり長い間使用しています。
しかし、多くのイベントがすべてのステートマシン ( init
、show
、hide
、 、およびその他いくつか) に共通しているため、以前の方法でイベントを参照するか、上記のイベント名のいずれかfinish
を入力せずに入力できるようにしたいと考えています。すべてのファイルでイベントを宣言します。
しかし、私はこれを行うことはできません:
Transition:
event=( [Event] | ('init'|'show'|'hide'|'finish') ) '=>' state=[State]
;
そこでEventID
、上記のキーワードのいずれかである terminal を定義することにしました。
terminal EventID:
'init'|'show'|'hide'|'finish'
;
しかし、私もこれを行うことはできません:
Transition:
event=( [Event] | EventID ) '=>' state=[State]
;
次に、イベントを組み合わせたルールにしようとしました:
CustomEvent:
'event' name=ID
;
BaseEvent:
name=EventID
;
Event:
CustomEvent | BaseEvent
;
Transition:
event=[Event] '=>' state=[State]
;
どちらも機能しませんでした。
今のところ、回避策に落ち着くことにしました。
Transition:
( event=[Event] | baseevent=EventID ) '=>' state=[State]
;
これは機能しますが、すべてのテンプレートを変更してイベントとベースイベントの両方を探す必要があります。
これは非常に多くのテキストです...最後に、私の質問は次のとおりです。
参照またはEventIDに同じ要素名を使用する方法はありますか?