MPS 2020.3 ヘルプ

SModel 言語

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

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>

これらの操作のパラメーターとしての「+」記号は、「自分自身を含める」ことを意味します。つまり、操作が呼び出されているノードが条件に一致すると、「+」はノードも返される結果に含まれるようにします。たとえば、myNode.ancestors <concept = IfStatement、+> は myNode を返す場合があります。IfStatement の場合。