MPS 2020.1 ヘルプ

SModel 言語

SModel 言語の目的は、MPS モデルを照会および変更することです。これにより、モデルのノード、属性、プロパティ、リンク、他の多くの本質的な品質を調査できます。言語は、言語のいくつかの異なる側面(アクション、リファクタリング、ジェネレーター)をエンコードして、最も目立つものに名前を付ける必要があります。通常、BaseLanguage と組み合わせて jetbrains.mps.lang.smodel 言語を使用します。

null 値の扱い

SModel 言語は null 値を非常に安全な方法で扱います。Java や C# などのオブジェクト指向言語では、コード全体に散在する expr == null および expr!= null ステートメントの形式で null 値を確認することが多くあります。これらは NULL ポインタ例外を防ぐために必要です。ただし、同時にコードが乱雑になり、コードが読みにくくなります。この問題を軽減するために、MPS は自由値で null 値を扱います。例:プロパティに null ノードを要求すると、そのプロパティの型のデフォルト値に戻ります。null ノードにその子リストを要求すると、空のリストなどが表示されます。null ノードで振る舞いメソッドを呼び出すと、呼び出されたメソッドの戻り型が ClassifierType または StringType の場合、null 値が返されます。PrimitiveType の場合、そのタイプのデフォルト値が返されます。これはあなたの言語デザイナーとしての生活を楽にするはずです。

操作パラメーター

SModel 言語の多くの操作はパラメーターを受け入れます。操作の最後に <を入力してパラメーターリストを開くと、パラメーターを指定できます。例: myNode.ancestors <concept = IfStatement、concept = ForStatement>

これらの操作のパラメーターとしての「+」記号は、「自分を含める」を意味します。操作が呼び出されているノードは、「+」、条件に合致するノードはまた、返される結果に含まれることを保証するときすなわち、- それは IfStatement であればたとえば myNode.ancestors <concept = IfStatement、+>、MYNODE を返すことがあります。