MPS 2023.3 ヘルプ

エディターのアクション

MPS エディターには、完了アクション、ノード作成ポリシーにかなり実用的なデフォルトがあります。しかし、カスタマイズしたい場合は、アクション言語を使用しなければなりません。

ノードファクトリ

あるノードが別のノードと交換されるとき、交換されるノードによって保持される値で交換するノードの作成プロセスをパラメーター化すること、またはおそらくモデル内の交換するノードの将来の位置を反映することも役に立つでしょう。ノードファクトリはあなたにまさにそれを与えます。新しいノードを代入アクションで、または新しい初期化ノード <>新しい初期化ノードを設定する初期化された新しいノードを追加する初期化された新しいノードに置き換えます新しい初期化インスタンス <> のいずれかのメソッドで作成する必要があるときに必ず呼び出される一連のハンドラーを作成します。

簡単に言うと、ノードファクトリでは新しいノードのインスタンス化をカスタマイズできます。ノードファクトリを作成するには、まず新しいノードファクトリルートノードを作成する必要があります。このルートの中に、概念用のノードファクトリを作成できます。各ノードファクトリは、次のパラメーターを持つノード作成ブロックで構成されています。newNode(作成されたノード)、sampleNode(現在置換されているノード、null でも可)、囲むノード(モデル内の newNode の親になるノード)、モデル。ノードファクトリハンドラーは、新しいノードがモデルに挿入されるに呼び出されます。

ノードファクトリの概念継承階層を利用して繰り返しを減らすことができます。

Ac6.png

貼り付けラッパー

これらを使用すると、ノードの貼り付けを他のコンテキストにカスタマイズできます。例: BaseLanguageLocalVariableDeclaration をコピーし、それを ClassConcept に貼り付けてクラスのフィールドにする場合、LocalVariableDeclaration から新しい FieldDeclaration作成する単純な変換をトリガーする必要があります。

Ac10.png

コピー & ペーストハンドラー

これらはあなたにコピーされているかクリップボードから貼り付けられているモデルの部分をカスタマイズする可能性を与えます。

Ac11.png

コピー プリプロセッサーブロック gets のコピーパラメーターには、元のパラメーターノードの正確なディープコピーが含まれています。オリジナルとは異なり、コピーはモデルから切り離されているため、親ノードはありません。

Ac12.png

貼り付けポストプロセッサーのタスクは通常、参照が新しいコンテキストで有効な宣言を指すように参照を再解決することです。

関連ページ:

SModel 言語修正オペレーション

修正操作:フィーチャー変更 SModel で最も一般的に使用される変更操作は、機能を変更する操作です。プロパティの値を設定したり、0..1 または 1 カーディナリティーの子または参照ノードを割り当てたりするには、直接割り当て(= を使用)または集合演算を使用できます。0..n または 1..n の子コレクションに子を追加するには、コレクション言語から .add 操作を使用するか、ノード <> で次の兄弟を追加 / 前の兄弟を追加操作を呼び出して、別のノードをパラメーターとして渡します。...

エディター

言語の構造が定義されたら、開発者がそれを使用して AST を簡単に構築できるようにする手段を作成することになるでしょう。AST を直接操作することは、あまり直感的でも生産的でもないでしょう。AST を非表示にして、ユーザーに快適で直感的な操作を提供するのが、言語エディターのロールです。エディターの概要:ノードのエディターは、そのビューおよびそのコントローラーとして機能します。エディターにノードが表示され、ユーザーはそれを変更、置換、削除などできます。異なる概念のノードは異なるエディターを持ちま...

変換メニュー言語

概要:変換メニュー言語は、エディターのさまざまな場所に表示されるサブメニューとアクションの階層構造を説明する変換メニューを定義するために使用されます。現在、変換メニューが表示される可能性のある場所はいくつかあります: サイド変換メニュー、代替メニュー、コンテキストアシスタント、およびコンテキストアクションツール。変換メニュー言語の拡張に記載されているように、言語設計者とプラグイン作成者は追加の場所を定義し、場所ごとに必須またはオプションの機能 (アイコンやツールチップなど) を指定できます。メニ...