MPS 2020.1ヘルプ

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

修正操作

フィーチャー変更

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

以下に例を示します。

  • classDef.name = "NewClassName" ;

  • classDef.name.set( "NewClassName" );

  • myNode.condition = trueConstant;

  • node <InstanceMethodDeclaration> method = classDef.member.add new Initialized(InstanceMethodDeclaration);

ターゲットを参照リンクに設定するときは、ターゲットノードにアクセスする必要はありません。ターゲットへのポインタがあれば十分です。これは、参照リンクアクセス式に適用可能なset ptr操作で可能です。

node.instanceMethodDeclaration.set ptr(Object->equals)

同様に、ノードが特定のノードであることを確認するために、利用可能な「is」操作があります。

node.parent.is(Object->equals);

新規ノード作成

新しいノードを作成する方法はいくつかあります。

  • 新規オペレーション: 新しいノード<Concept>()

  • モデルに対する新規インスタンス操作: model.newInstance()

  • 概念に対する新しいインスタンス操作: concept.newInstance()

  • 特徴式に適用された新規追加(コンセプト)および新しく設定する(コンセプト)操作

  • 新しいものと交換する(コンセプト)オペレーション

  • モデルに適用された新しいルートノード(概念)操作。この場合、概念は根付きやすいはずです

  • 既存のノードに新しい兄弟を追加する次の兄弟<コンセプト> / 新しい前の兄弟<概念>操作

コピー

モデルのツリー形状を維持するために、1つのノードは最大1つの親しか持つことができません。親ノードに子としてノードを追加するとすぐに、そのノードは以前の親ノードから自動的に切り離されます。そのため、サブツリーを含めてノードのコピーを作成すると便利です。既存のノードのコピーを作成するには、コピー操作を使用できます。例:node <> yourNode = myNode.copy

置換

AST内のノードを別のノードのインスタンスと置き換えるには、'と置換する'操作を使用できます。同時に置き換えと作成をしたい場合は、ショートカット操作'新しい(概念)に置き換えます'があります。これは概念をパラメータとして取ります。

削除および切り離し操作

モデルからノードを削除したい場合は、デタッチ操作を使用できます。それでも、後でデタッチノードをモデルに追加できます。

最終更新日: 2020年6月18日