MPS 2019.1ヘルプ

Using_typesystem

型システムを使う

言語の型システムを定義した場合、タイプチェッカーは自動的にそれをエディターで使用して、開いているノードをエラーと警告で強調表示します。また、エディターアクションやジェネレータクエリなど、クエリの型に関する情報を使用することもできます。ノードの型を使用することも、特定の型が別の型のサブタイプかどうかを知りたいこともあります。または、与えられた形式を持つ型のスーパータイプを見つけたいと思うかもしれません。

タイプ操作

type操作を使用して、クエリ内のノードの種類を取得できます。<expr> .typeを書くだけです。ここで、<expr>はノードに対して評価される式です。

推論規則および推論方法の中で型演算を使用しないでください。推論規則は型の計算に使用され、型操作はすでに計算された型を返します。

サブタイプ式

ある型が別の型のサブタイプであるかどうかを調べるには、isSubtype式を使用してくださいisSubtype( type1 :< type2 )またはisStrongSubtype( type1 :<< type2 )と書くと、タイプ1タイプ2のサブタイプである場合、またはタイプ1タイプ2の強いサブタイプである場合は、それぞれtrueが返されます

強制表現

強制発現の結果は、特定のタイプは、このタイプの指定されたフォーム(満足ある条件)を有するスーパータイプを有するかどうか、すなわち、所定の形式強制することができるかどうかを言うブール値です。条件は、概念宣言へ参照として記述することもできます。つまり、求めるスーパータイプはこの概念のインスタンスにする必要があります。またはパターンとして、求められているスーパータイプは一致しなければなりません。
強制式coerce( type :< condition )またはcoerceStrong( type :<< condition )と書かれています。ここで、conditionは上記で説明したものです。

強制ステートメント

強制ステートメントステートメントリストで構成され、特定のタイプを特定の形式に強制できる場合に実行されます: それは次のように書かれています:

coerce ( type :< condition ) { ... } else { ... }

型が条件を満たすように強制できる場合は最初の(if)ブロックが実行され、それ以外の場合はelseブロックが実行されます。型が強制変換されるスーパータイプは、強制文の最初のブロック内で使用できます。条件がパターンであり、型が強制変換されるスーパータイプの一部と一致するパターン変数が含まれている場合は、そのようなパターン変数を強制ステートメントの最初のブロック内で使用することもできます。

マッチステートメント

matchステートメントはノードをパターンと比較します。そのパターンの変数には、一致したノードまたはその子から対応する値が割り当てられます。

Pattern3
最終更新日: 2019年6月7日