ジェネレーターデモ
ジェネレーターチュートリアル
MPS で言語ジェネレーターを定義および拡張するプロセスをガイドする、更新されたジェネレーターチュートリアルへようこそ。
チュートリアルは 7 つのパートで構成されており、徐々に複雑さが増しています。すべてのデモは、同じ基本的なストーリー、つまり Java Swing コンポーネントへの XML コードの変換を共有しています。各デモは前のデモに基づいており、より高度な(または場合によっては単に異なる)機能、プラクティス、アプローチを示しています。
すべてのデモは論理的に関連していますが、教育目的で、各デモで新しいジェネレーターを作成します。ジェネレーターは真空状態では存在せず、常に具体的な言語に属しているため、ジェネレーターをラップするために、デモごとに新しい言語を作成します。これらの言語(デモ 6 および 7 を除く)は、独自の新しい概念(別名構文)を導入していません。代わりに、既存の概念に新しいセマンティクスを与えます。
たとえば、「button」という名前の xml 要素は、もはや単なる xml 要素ではなく、GUI コンポーネントボタンを表す「仮想概念」です。
このドキュメントの使い方
最善のアプローチは、JetBrains MPS をコンピューターにインストールし、新しい空のデモプロジェクトをセットアップして、デモで説明されているすべての手順を実行することです。このようにして、ジェネレーターの開発以降で素晴らしい経験を積むことができます。
2 番目のオプションは、ドキュメントを読み、おそらく MPS ディストリビューションに含まれているジェネレーターデモプロジェクトを参照することです。ジェネレーターデモプロジェクトには、すべてのデモ言語とジェネレーター、およびこれらのデモで作成するテストモデルが含まれています。
ジェネレーターのデモプロジェクトは次の場所にあります: {mps}/samples/generator_demo
セットアップデモプロジェクト
さらに教育的な方法で最初からコードを作成することを計画している場合は、個々の演習を始める前に少しセットアップ作業を行う必要があります。
新規プロジェクト
ファイル -> 新しいプロジェクトを選択します
新しい空のプロジェクトを作成する
プロジェクト名を入力: 'generator_demo'
このデモでは、xml 要素の新しいセマンティクスを定義し、いくつかの xml を含むテストモデルを作成し、その xml から java コードを生成します。XML 言語の構文は、SampleXML サンプル言語ですでに定義されています。SampleXML サンプル言語は、サンプルプロジェクトとして MPS ディストリビューションにもバンドルされています。SampleXML プロジェクトは次の場所にあります。
$HOME/MPSSamples3.0 /samples/sampleXML
MPS で開くことにより、SampleXML プロジェクトを個別に試すことができます。ただし、デモでは、jetbrains.mps.sampleXML 言語のみを再利用します。まず、jetbrains.mps.sampleXML 言語を「generator_demo」プロジェクトに追加しましょう。
左側のプロジェクトビューパネルで generator_demo ノードを右クリックし、プロジェクトモジュールを選択します。Alt+Enter キーショートカットでも同じ効果が得られます。
新しいモジュールを追加するために + ボタンを押してください
$HOME/MPSSamples.3.0 /sampleXML/languages/sampleXML/jetbrains.mps.sampleXML.mpl ファイルを選択します
これで、'jetbrains.mps.sampleXML' 言語に簡単にアクセスできます。
sampleXML 言語ノードを右クリックし、「言語の再構築 ... 」を選択して、言語が使用できるようにします。
新しいデモソリューション
プロジェクトのポップアップメニューで新しいソリューションを選択します
ソリューション名を入力してください: 'test_models'
新しいテストモデル
新しいモデルソリューションのポップアップメニューを選択してください
モデル名を入力してください: 'generator_demo.test1'
モデルプロパティの使用言語セクションに「jetbrains.mps.sampleXML」言語を追加しますダイアログ
これで、単一のモデルを含むソリューションができ、インポートしたばかりの simpleXML 言語を使用して xml を作成する準備が整いました。
「text1」モデルで新しいドキュメントノードを作成し、「ボタン」という名前を付けます。
モデル「test1」にドキュメント「ボタン」を作成します。
このドキュメントにルート要素 'button' を追加する
同様に、要素 'label' を含む文書 'Label' を作成します。
テスト生成
モデル 'test1' のポップアップメニューでテキストの生成を選択します
テキスト生成の結果は、MPS エディターに新しいタブとして表示され、入力とほぼ同じになります。
これで、意味のない xml の概念のセマンティクスを定義していきましょう。
中身は
デモ 1
これは簡単なスタートです。2 種類の XML 要素をラベルとボタンに変換し、ルートマッピングルール、ルートテンプレート、property-macro、スイッチマクロ、テンプレートスイッチの使用方法を練習します。
デモ 2
このデモでは、条件付きルートルール、LOOP マクロ、放棄ルートルールの使用箇所について説明します。
デモ 3
テンプレート宣言とテンプレートフラグメントの使い方を説明します。マッピングラベル「固有の名前」サービス。reference-macros および IF/INCLUDE/MAP_SRC マクロ
デモ 4
マッピングラベルによる参照解決で、縮小規則、COPY_SRC マクロ、より高度な reference-macros の使用方法を示します。
デモ 5
生成スクリプトの使用方法およびジェネレーターでユーティリティクラスを作成する方法について説明します。
デモ 6
このデモでは、独自の高レベルの概念(ボタンとラベル)を定義する「実際の」言語を作成し、言語がどのように統合されるかを確認します。
このデモでは、MPS での生成プロセスについて詳しく説明し、一時モデルと生成トレーサーツールの使用箇所を示します。
デモ 7
ウィービングルールの使用箇所を示します。; テンプレート宣言とテンプレートフラグメント ; マッピングラベル ; 「一意の名前」サービス。reference-macro および IF/INCLUDE/MAP_SRC マクロ。
関連ページ:
MPS プロジェクト構造
言語を設計したりコードを書いたりするときには、優れた構造を使用して各部分を移動したり、組み合わせたりすることができます。MPS はこの点で他の IDE と似ています。プロジェクト:プロジェクトは MPS の主な組織単位です。プロジェクトは 1 つ以上のモジュールで構成されており、それら自体がモデルで構成されています。モデルは生成 / コンパイルの最小単位です。以下でこれらの概念を詳細に説明します。モデル:MPS がもたらす大きな違いは次のとおりです。プログラムはテキスト形式ではありません。プ...
基本的な考え方
この章では、基本的な MPS の概念であるノード、概念、言語について説明します。これらは、MPS の仕組みを正しく理解するための鍵となります。これらはすべて、他の要素と組み合わせることで初めて意味を成すため、すべて一緒に説明する必要があります。このセクションの目的は、各要素の本質を説明することです。詳細については、ノード、概念 (構造言語)、言語 (プロジェクト構造) に関するセクションを確認することを検討してください。抽象構文木 (AST):MPS は、テキスト形式を避けることによって他の多く...
ジェネレーターユーザガイド Demo1
Generator ユーザーガイドのデモ 1:このデモでは、入力 XML ドキュメントごとに java アプリケーションを生成するジェネレーターを作成します。以前に作成したソリューション「test_models」で「generator_demo.test1」モデルを再利用します。このモデルは「jetbrains.mps.sampleXML」言語を使用し、「ボタン」と「ラベル」の 2 つの XML ドキュメントを含みます。出力 java アプリケーションを生成するために、これらの各ドキュメントにル...
ジェネレーターユーザガイド Demo2
Generator ユーザーガイドデモ 2:このデモでは、Java Swing アプリケーションを再度生成しますが、前のデモ 1 とは異なり、今回は入力モデルごとに 1 つの Java アプリケーションになります(デモ 1 では、入力 XML ドキュメントごとに個別の Java アプリケーションを生成しました)。デモ 2 が作成する単一の Java アプリケーションには、入力モデルのすべての XML ドキュメントに記載されているすべてのコンポーネントが含まれます。新しい言語:最初に少し技術的な...
ジェネレーターユーザガイド Demo3
Generator ユーザーガイドデモ 3:デモ 2 では、次のような java ステートメントを生成していました。container.add(new JButton());Swing コンポーネントを作成してアプリケーションのコンテンツペインに追加します。デモ 3 では、コンポーネントプロパティのサポートを追加します。これには、コンストラクターの呼び出しだけでなく、より複雑な初期化コードの生成が必要になります。さらに、生成されるプロパティ初期化コードは、コンポーネントの種類によって異なります。...
ジェネレーターユーザガイド Demo4
Generator ユーザーガイドデモ 4:このデモでは、demoLang3 ジェネレーター (デモ 3 を参照) をさらに進化させ、パネルコンポーネントのサポートを追加します。ボタンやラベルとは異なり、パネルには他のパネルを含む他のコンポーネントを含めることができます。ジェネレーターで再帰が発生します。削減がこの種の問題の解決にどのように役立つかを見ていきます。新しい言語:demoLang4 の demoLang3 ジェネレーターの大部分を再利用します。新しい言語「generator_demo...