MPS 2020.3 ヘルプ

振る舞い

During syntax tree manipulation, common operations are often extracted to utility methods in order to simplify the task and reuse functionality. It is possible to extract such utilities into static methods or create node wrappers holding the utility code in virtual methods. However, in MPS a better solution is available: the behavior language aspect. It makes it possible to create virtual and non-virtual instance methods, static methods, and concept instance constructors on nodes.

Behavior example

The methods in the Behavior aspect are implemented using BaseLanguage, typically enhanced with extensions:

  • the collections language for intuitive collection API

  • the closures language for easy use of function literals

  • the smodel language for manipulating the code (構造)

コンセプトインスタンスメソッド

A Concept instance method is a method, which can be invoked on any specified concept instance. They can be both virtual and non-virtual. While virtual methods can be overridden in extending concepts, non-virtual ones cannot. Also a virtual concept method can be declared abstract, forcing the inheritors to provide an implementation.

概念インスタンスメソッドは、概念宣言と概念インターフェースの両方で実装できます。これにより、メソッド解決の問題が発生する可能性があります。MPS が継承階層でどの仮想メソッドを呼び出すかを決定する必要がある場合は、次のメソッド解決順序(MRO)アルゴリズムが適用されます。

  • 現在の概念がマッチングメソッドを実装している場合は、それを呼び出します。計算値を返します。

  • 拡張概念がある場合は、そのアルゴリズムを再帰的に呼び出します。成功した場合は計算値を返します。

  • Invoke the algorithm recursively for all implemented concept interfaces in the order of their definition in the implements section. The first found interface implementing the method is used. In case of success return the computed value.

  • 失敗を返します。

動作メソッドをオーバーライドする

スーパーコンセプトから継承したメソッドをオーバーライドするには、Ctrl キーボードショートカットを使用してオーバーライドダイアログを呼び出します。そこで、オーバーライドするメソッドを選択できます。目的のメソッドの名前を入力してオーバーライドすることにより、メソッドのリストを絞り込みます。

コンセプトコンストラクター

概念インスタンスが作成されるとき、いくつかのプロパティ / 参照 / 子をデフォルト値に初期化することはしばしば役に立ちます。これが、概念構築子が使用できるものです。概念構成内のコードは、特定の概念の新しいノードがインスタンス化されるたびに呼び出されます。

Behavior コンストラクターは次の場合に呼び出されます

  • 新しい initialized() を追加新しい initialized() をセットj.m.lang.actionsj.m.lang.smodel の類似の方法でノードを作成する

  • new node<Car>() でノードを作成する

Using quotation like <Car()> will not call the Behaviors constructor. Consider using the smodel constructor instead.

コンセプトスタティックメソッド

一部のユーティリティメソッドは概念インスタンスに属していないため、インスタンスメソッドとして作成しないでください。概念全体の機能のために、MPS は静的概念メソッドを提供します。制約も参照してください。

null ノード / コンセプトに対する振る舞いメソッドの呼び出し

ノードまたは概念を表す null オブジェクトに対して振る舞いメソッドが呼び出された場合、呼び出しは NullPointerException にはなりません。代わりに、呼び出されたメソッドの戻り型が ClassifierType または StringType の場合、null 値が返されます。PrimitiveType の場合、そのタイプのデフォルト値が返されます。

関連ページ:

引用符

引用符は、必要な構造を持つノードを簡単に作成できるようにする言語構成です。もちろん、smodelLanguage を使用してノードを作成してから、同じ smodelLanguage を使用して適切な子、プロパティ、参照を手動で追加することもできます。ただし、これを実現するためのより簡単で、より視覚的な方法があります。次の 2 つの構成要素は同一のノードを構築します。最初の構成要素は引用符を使用し、2 番目の計画モデル API を使用します。node<IntegerType> node = &...

エディターのアクション

MPS エディターには、完了アクション、ノード作成ポリシーにかなり実用的なデフォルトがあります。しかし、カスタマイズしたい場合は、アクション言語を使用しなければなりません。サイド変換アクションとノード代替アクションは MPS 3.4 で非推奨になり、新しい変換メニュー言語に置き換えられました。ノードファクトリあるノードが別のノードと交換されるとき、交換されるノードによって保持される値で交換するノードの作成プロセスをパラメーター化すること、またはおそらくモデル内の交換するノードの将来の位置を反映す...

制約

構造言語は、言語構造に関する高度な制約を表現するには不十分な場合があります。制約アスペクトは、このような追加の制約を定義する方法を提供します。デフォルトの具体的な概念:抽象概念の場合は、制約アスペクトを使用して、抽象概念のノードを作成する必要があるときに代わりに使用する概念を示すことができます。例: 子コレクションが AbstractCommands を保持することになっている場合、ユーザーが Enter キーを押して新しい子をコレクションに挿入すると、EmptyLine コンセプトのノードが作成さ...

型システム

言語のための型システムを定義する:このページでは、MPS 型システムについて詳しく説明します。最初の型システムルールを定義するためのより軽量な導入を希望する場合は、型システムクックブックを確認することを検討してください。コードから型システムを使用する方法をよく知りたい場合は、型システムを使うの章も参照してください。型システムとは:型システムは、言語を使用して書かれたモデル内のノードに型を割り当てる言語定義の一部です。型システム言語は、ノードとそのタイプに対する特定の制約をチェックするためにも