PocketSModel言語クエリ比較:式:およびne:演算子を使用して、ノードの同等性を比較できます。演算子はnullセーフであり、2つの比較されたノードによって表されるサブツリー全体を比較します。/.../コンストラクトを使用して、名前を使用してノードへの参照を取得します。(英語)ノードが特定のものであることを確認するために、「is」操作が使用可能です。equals.is(Object->equals);ノードへのポインターを取得するには、ポインター構造を使用します。(英語)名前で概念を取得する概念/.../コンストラクトを使用して、名前を指定して概念宣言を取得します。concept/CommandList/;コンセプトスイッチコンストラクトは、手元のコンセプトに応じて、ロジックをブランチでオフにするために使用できます。(英語)機能へのアクセスSModel言語を使用して、次の機能にアクセスできます。参照それらにアクセスするには、次の構文が使用されます。expression>.featureName.フィーチャがプロパティである場合、式全体のタイプはプロパティのタイプです。<LinkTarget>です(LinkTargetは参照または子宣言のターゲットコンセプトです)。<LinkTarget>です。いわゆる暗黙的な選択を使用して、子ノードの機能にアクセスできます。例:次のクエリ:thisNode.children.grandChildrenMPSによって次のようなものに自動的に変換されます。})その結果、指定されたリンク宣言のチェーンを介してアクセス可能なすべての非nullモデル要素のプレーンコレクションが作成されます。nullチェックMPSではnullは自由に扱われるため、null値をチェックする方法が必要です。isNullおよびisNotNull操作は、ここで私たちの友達です。IsInstanceOfチェックと型キャスト多くの場合、ノードが特定の概念のインスタンスであるかどうかを確認する必要があります。Javaのinstanceof演算子は、MPSノードではなく、javaオブジェクトのみを理解するため使用できません。このタイプのチェックを実行するには、次の構文を使用する必要があります。expression>.isInstanceOf(Concept)また、ノードの概念がユーザーが指定したものと正確に一致するかどうかを確認するisExactly操作があります。コンセプトに対してノードのタイプを確認したら、通常、コンセプトインスタンスに式をキャストし、このコンセプトの機能の一部にアクセスする必要があります。そのためには、次の構文を使用する必要があります。Conceptノードを特定の概念インスタンスにキャストする別の方法は、asキャスト式を使用することです。Concept通常のキャスト(コロンを使用)とasキャストの違いは、左側の式の結果を指定されたConceptインスタンスに安全にキャストできない場合の状況を処理する方法にあります:NullPointer例外がレギュラーによってスローされますこの場合はキャストしますが、asキャストによってnullが返されます。これをsmodel言語のnullセーフドット演算子と組み合わせると、モデルをナビゲートする非常に便利な方法が得られます。BinaryOperation.leftExpression.isLValue()インテンションは、1つのタイプのキャスト式から他のタイプに簡単に移行するために使用できます。(英語)(英語)ノードコレクションキャストノードのコレクションは、ofConceptコンストラクトを使用して、ノードの概念によってフィルタリングおよびキャストできます。特定の側面のノードをフィルターする親ノードの親を見つけるために、すべてのノードで親操作を使用できます。子children操作は、現在のノードのすべての直接の子ノードにアクセスするために使用できます。この操作には、オプションのパラメーターlinkQualifierがあります。<linkQualifier>操作の結果はnode.linkQualifier操作の呼び出しに相当するため、linkQualifierグループ/ロールに属する子のみをリコールします。<注釈、メンバー>兄弟クエリASTを操作するとき、ノードの兄弟(つまり、検討中のノードと同じロールと親を持つノード)にアクセスすることがよくあります。このタスクには、次の操作があります。prev-sibling-ノードの次/前の兄弟を返します。そのような兄弟が存在しない場合、nullが返されます。prev-siblings-ノードの次/前の兄弟のnlistを返します。これらの操作には、現在のノードを含めるかどうかを指定するオプションのパラメーターがあります。兄弟-ノードのすべての兄弟のnlistを返します。これらの操作には、現在のノードを含めるかどうかを指定するオプションのパラメーターがあります。上位モデルの操作中、指定されたノードのすべての祖先(親、親の親、親の親の親など)を見つけるのが一般的です。このような場合、2つの操作があります。ノードの単一の祖先を返しますancestors-ノードのすべての祖先を返しますどちらにも、リストを絞り込むための次のパラメーターがあります。InstanceMethodDeclaration、+>子孫また、指定されたノードのすべての子孫(直接の子、子の子など)を見つけることも役立ちます。このような目的のために子孫操作があります。以下のパラメーターがあります。InstanceMethodDeclaration>ルートとモデルを含む指定されたノードの最上位の祖先ノードにアクセスするには、包含ルート操作を利用できます。モデル操作の結果として、包含モデルが使用可能になります。/.../式は、モデルへの解決可能な参照を取得します。リポジトリを使用すると、モデル<>タイプに解決できます。多くの場合、特定の条件を満たすモデル内のすべてのノードを検索する必要があります。<>タイプの式に適用可能ないくつかの操作があります。roots(Concept)-モデル内のすべてのルートを返します。model.roots(<all>)またはmodel.nodes(IfStatement)検索範囲クエリ状況によっては、指定されたノードにどの参照を設定できるかを調べたいことがあります。このような場合には、検索範囲操作があります。次の構文で呼び出すことができます。operationContext)コンセプトリテラル多くの場合、指定された概念への参照が必要です。このタスクには、概念リテラルがあります。特定のノードの概念を検索する場合は、ノードで概念操作を呼び出すことができます。<>タイプとconceptNode操作は非推奨になりました。<>をコンセプト<>に変換します。<AbstractConceptDeclaration>を返します。3.1ではコンセプト<>と呼ばれていました。3.1における概念と呼ばれていました。概念階層クエリ概念タイプを使用して、式のスーパー/サブコンセプトを照会できます。次の操作を自由に行えます。指定されたコンセプトのすべてのスーパーコンセプトを返します。現在のコンセプトを含める/除外するオプションがあります。指定された概念のすべての直接的なスーパーコンセプトを返します。繰り返しますが、現在のコンセプトを含める/除外するオプションがあります。<+>;concept.sub-concepts(model、myScope);hasRole操作ノードに特定のロールがあるかどうかを確認したい場合があります。このために、次の構文があります。child)以下に例を示します。elsifClauses)リンククエリlink、linkName、およびlinkNode操作により、ノード間のリンクの詳細にアクセスできます。...リンククエリを含む次の式を使用して、あるノードが別のノード(親)に追加された場合:parent.childLinkRole.add(node)その後、次の操作を呼び出して、包含関係情報にアクセスできます。-戻るノード<LinkDeclaration>このノードを含む親ノードのリンク宣言を表するindex-対応するロールを持つ子のリストでこのノードのインデックスを表すint値を返します。上記のモデルに対する次のクエリと同じです。parent.childLinkRole.indexOf(node)ダウンキャストより低い意味レベルへのダウンキャストSModel言語は、生のMPSクラスで機能するコードを生成します。これらのクラスは通常の作業では非常に低レベルですが、例外的な場合にはそれらにアクセスする必要があります。低レベルのオブジェクトにアクセスするには、ダウンキャストを使用してセマンティックレベルの構造を下げます。expression>/以下に例を示します。.getConcept()。2019年12月25日SModel言語タイプSModel言語クエリ関連ページ:SModel言語タイプタイプ:SModel言語には以下の種類があります。ASTノードのリストに対応する。