MPS 2026.1 ヘルプ

説明コメント

ノードに属性を追加する機能を活用する方法を学びます。この機能については、構造章の属性セクションで詳しく説明されています。このクックブックでは、電卓チュートリアル言語に機能を追加し、計算機定義の入力フィールドと出力フィールドに説明コメントを付加できるようにします。これらの説明コメントは、入力フィールドと出力フィールドに対応する Swing テキストフィールドに付加される「ポップアップツールチップ」の形で、生成される Java コードに反映されます。

計算機の言語

実験のテスト環境として、計算機のチュートリアル言語を選択しました。電卓チュートリアルプロジェクトは、MPS ディストリビューションに付属するサンプルプロジェクトセットに含まれています。先に進む前に、チュートリアルに目を通して言語に慣れておくことをお勧めします。

フィールドへの変更

入力フィールドと出力フィールドに説明的なコメントを追加するための機構の構築を始めましょう。私たちのアプローチは、生成されたコードだけでなくノードに追加されたときにそれらの外観に影響を与えるアノテーションに基づいています。私たちの望む機能を可能にするいくつかの重要な要素があります。

  • どのノードが説明コメントを保持できるかを示すマーカーインターフェース

  • ノードが説明コメントを保持しているかどうか、および説明が何であるかを示すためのアノテーション自体

  • キャレット配下のノードに説明コメントをすばやく追加および削除するためのキーボードショートカットを提供するアクション

  • 記述されたコンポーネントの視覚的な「ツールチップ」を生成するためにコード生成プロセスを更新する

すべてのコメント可能なノードをマークするための新しいインターフェースから始めます。

Marking the nodes

ここで、InputFieldOutputField の両方の概念で、新しい ICanHaveDescription インターフェースを実装する必要があります。

Implementing the ICanHaveDescription interface

DescriptionAnnotation のコンセプト

まだパズルの核心となるピース、つまり入力フィールドと出力フィールドに割り当てられる説明コメントを指定するための実際のアノテーションが欠落しています。さっそく作成しましょう。

Creating the description

コンセプトに NodeAttribute を拡張させると、MPS は、属性の詳細を示す詳細情報を提供するようにヒントを提供します。Alt+Enter を介してクイックフィックスを呼び出すと、カスタマイズに必要な情報が追加されます。

Invoking a quick-fix

ロール属性付きの概念の値を設定して、新しいアノテーションの追加の品質を指定する必要があります。アノテーションのロール を descriptionComment として設定します。これは、ノードに DescriptionAnnotation のアノテーションが付けられているかどうかを確認するために、クエリで使用する名前です。また、アノテーションは ICanHaveDescription を実装するノード(この場合は InputFieldOutputField)に のみ帰属できることも示しています。

Specifying additional qualities

DescriptionAnnotation には、説明の実際のテキストも保存する必要があります。これには、文字列プロパティ descriptionText を使用します。

Adding the description text

DescriptionAnnotation のエディターは、説明コメントが添付されたノードの視覚的な動作を定義する重要な要素です。アノテーションが付けられたノードの先頭に「described」定数を追加し、括弧で囲まれた実際の説明テキストを追加します。属性付きノードセルは、属性が添付されているノードである実際のノードのエディターを表します。

Attaching to a node

さらなるエディターの機能強化

ノードの説明コメントのオンとオフを切り替えるために、新しい KeyMap を作成します。

Creating a new key map

コードを編集するには、BaseLanguagesmodel の概念を使用します。これらは、デフォルトで使用可能になっているはずです。そうでない場合は、Ctrl+L を介してインポートします。初期化されたノードを簡単に作成するために、アクション言語も必要になります。これはおそらく明示的にインポートする必要があります(Control + L)。

Adding an import statement

これでアクションを完了できます。

Completing the action

ICanHaveDescription を実装しているノードで Control + Alt + Shift + D を押すと、アクションはノードとの間で DescriptionAnnotation を追加または削除します。

KeyMap は、Control + Alt + Shift + D に反応する必要があるすべてのフィールドに追加する必要があります。この場合、これは InputField と OutputField に対するものです。Control + Alt + Shift + D キーの組み合わせに反応するエディターセルには、keycap プロパティで指定されたキーマップが必要です。

Adding the key map to all fields

これまでどのようにしていますか?

コンパイル後、入力フィールドと出力フィールドの両方で Control + Alt + Shift + D を使用して、説明コメントを切り替えることができます。

Toggling the description comment

ジェネレーターを更新する

現在、DescriptionAnnotation は生成プロセス中に失われます。代わりに、コメント化された入力フィールドと出力フィールドを表すテキストフィールドの Swing「ツールチップ」を生成したいと考えています。

Updating the generator

コード生成時、現在では電卓内のすべての入力フィールドまたは出力フィールドを取得し、それらに対応する JTextField を生成します。コンストラクターでは、生成された各 JTextField の初期化コードも生成します。この場所で、入力フィールドまたは出力フィールドを表す JTextField に説明コメント付きの Swing 「ツールチップ」を添付できます。

Creating JTextFields

$IF$ ノードマクロは、DescriptionComment アノテーションが添付されたノードに対してのみ「ツールチップ」が生成されるようにします。

Adding a macro

「ツールチップ」のテキストのプロパティマクロは、現在のノードに添付されている DescriptionAnnotationdescriptionText を設定します。

Property macro

言語とサンドボックスソリューションを再構築すると、生成された Calculator フォームには、DescriptionAnnotation でマークされたフィールドに「ツールヒント」が添付されます。

Resulting tooltip

要約

ここでツアーを終了できます。入力フィールドと出力フィールドは両方とも、DescriptionAnnotation で記述でき、生成されたコードには、それぞれの記述の「ツールヒント」が含まれます。

2026 年 5 月 06 日

関連ページ:

構造

MPS では、意図する言語の文法を定義する必要がないため、当然ながら、言語の構造を指定するための別の方法が必要になります。ここで構造言語が役立ちます。構造言語は、言語構造を定義するためのあらゆる手段を提供します。先に記述されていたように、MPS でコーディングする場合、実質的に AST を直接構築することになるため、言語の構造では、AST を構築するために使用する要素、つまり構成要素を指定する必要があります。プロパティ、参照、および子供: レンガをコンセプトと構造言語が公開の概念と概念インターフ...

汎用プレースホルダーと汎用コメント

汎用プレースホルダー:汎用プレースホルダーは、2 つのノード間の空白を表し、任意のノードコレクションに追加できます。キーの組み合わせで、コレクション内の現在の位置にプレースホルダーを挿入します。プレースホルダーは透過的に動作します。プレースホルダーノードの補完メニューを呼び出してノードに置き換えたり、Enter キーを押して通常のノードを次の兄弟ノードの位置に追加したりできます。たとえその言語がそのような概念をサポートしていなくても、どの言語の汎用プレースホルダーユーザーを使用しても、任意の...

MPS 電卓言語チュートリアル

このチュートリアル導入、テンプレートの実装、導入このチュートリアルでは、MPS での言語デザインのさまざまな分野について説明します。単純なスタンドアロン言語の抽象的な構造を定義し、そのためのエディターを設計し、タイプを制限し、スコープを作成し、最後に Java コードを生成するジェネレーターを準備します。以前の MPS への露出に応じて、このチュートリアルでは完了までに約 1 日かかります。このチュートリアルでは、主に MPS を評価する必要のある言語デザイナーを対象とし、ベアボーンの例以外のも...

要求追跡言語

このクックブックでは、要件追跡サンプルプロジェクトの手順を説明します。このサンプルプロジェクトは、言語に依存しない要件追跡を実装しています。その過程で、いくつかの便利な言語構造を解説します。異なる言語のノードにアノテーションを付けるノード属性、コンセプトごとの複数のエディター(プレゼンテーション)とエディターヒントによるそれらの切り替え、選択されたエディターへのプログラムによるアクセスヒントとエディターのプログラムによる選択、参照のコレクションでの繰り返しを避けるための参照スコープ、要件追跡サン...

スコープ

カスタム言語要素のスコープを定義する 2 つの方法、つまり継承された(階層的)アプローチと参照アプローチについて見ていきます。実験のテストベッドとして計算機のチュートリアル言語を選択しました。MPS ディストリビューションに付属するサンプルプロジェクトのセットに含まれている電卓チュートリアルプロジェクトを見つけることができます。2 つの方法:すべての参照は許可されたターゲットのセットを知る必要があります。これにより、ユーザーが参照の値を入力しようとしているときはいつでも MPS が完了メニュー...