MPS 2024.3 ヘルプ

Using_typesystem

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

タイプ操作

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

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

サブタイプ式

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

強制表現

coerce 式を使用すると、型の形式を変更できます。特定のを特定の形式強制変換できる場合、つまり、このに特定の形式を持つ (特定の条件を満たす) スーパータイプがある場合、coerce 式はそのようなスーパータイプを返します。条件は、概念宣言への参照として記述できます。この場合、求められるスーパータイプはこの概念のインスタンスである必要があります。または、求められるスーパータイプが一致する必要があるパターンとして記述できます。

強制式は、coerce(type:<condition) または coerceStrong(type:<< condition)と記述されます。ここで、condition は上記で説明したものです。

強制ステートメント

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

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

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

マッチステートメント

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

Pattern3.png

関連ページ:

型システム

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

型システムのデバッグ

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