3

ステートマシンを記述する 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

これは非常にうまく機能し、かなり長い間使用しています。

しかし、多くのイベントがすべてのステートマシン ( initshowhide、 、およびその他いくつか) に共通しているため、以前の方法でイベントを参照するか、上記のイベント名のいずれ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に同じ要素名を使用する方法はありますか?

4

1 に答える 1

1

あなたの元々の問題は次のとおりです。複数のファイルで自分自身を繰り返したくありません。この問題を解決するための別のアプローチを提案します。標準ファイルを作成しません。ここでは、共通の状態を定義し、ここで説明されているインポートステートメントでそれらの状態をインポートします: http://www.eclipse.org/Xtext/documentation/ 1_0_1/xtext.html#構文

于 2011-01-24T15:51:47.703 に答える