MPS 2020.3 ヘルプ

Using_typesystem

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

タイプ操作

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

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

サブタイプ式

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

強制表現

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

強制ステートメント

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

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

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

マッチステートメント

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

Pattern3

関連ページ:

型システム

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

型システムのデバッグ

型システムをデバッグするために、MPS は型システムトレースを提供します - それは型システムエンジンの中で起こる評価プロセスへのインサイトをあなたに与える統合された視覚的なツールです。自分で試してみる:型システムを簡単に試すことができるように、専用のサンプル言語を用意しました。MPS にバンドルされている式サンプルプロジェクトを開きます。これは、ユーザーホームフォルダー内のサンプルプロジェクトの中で使用可能になります。サンプル言語実験する言語は、いくつかの型、4 つの算術演算(+、-、*、/...