MPS 2019.2ヘルプ

基本的な考え方

この章では、MPSの基本的な概念( ノード概念、および言語)について説明します。これらはMPSがどのように機能するかを正しく理解するための鍵です。それらはすべて他のものと組み合わされたときに意味をなさないため、それらについてすべて一緒に話さなければなりません。このセクションでは、各要素の本質について説明します。詳細については、ノード、概念(構造言語)、および言語(プロジェクト構造)に関するセクションを確認してください。

抽象構文ツリー (AST)

MPSは、テキスト形式を避けることによって他の多くの言語ワークベンチとは一線を画しています。あなたのプログラムは常にASTで表されます。コードをASTとして編集し、それをコンパイルしたASTとして保存し、それをASTとしてもコンパイルします。これにより、文法を定義したり、自分の言語用のパーサーを構築したりする必要がなくなります。代わりに、ASTノードのタイプとそれらの相互関係の規則に関して言語を定義します。MPSエディターで作業するほとんどすべてのものがASTノードで、Abstract Syntax Tree(AST)に属しています。このドキュメントでは、AST ノードにはより短い名前のノードを使用します。

AST

プロジェクションエディター

MPSのエディターは直接ASTを操作します。コードは常にツリー形式で表されるため、解析は不要です。エディターは、言語作成者がデザインした方法でASTをユーザーに提示します。

DSGN 5911 sliders MPS b 04

1つの言語で複数のプレゼンテーションを利用できます。その場合、ユーザーは任意の時点で適用するコードの視覚化を選択できます。

DSGN 5911 sliders MPS b 06

キーボードでの文字入力を含むすべてのユーザーアクションは、エディターアクションに変換されます。エディターアクションは、ASTの対応するノードによって処理されます。

ノード

ノードは木を形成します。各ノードには、ノード(ルートノードを除く)、ノード、プロパティー、および他のノードへの参照があります。

basicNotions

ASTノードはモデルに編成されています。ルートノードと呼ばれる、親を持たないノード。これらは言語の一番上の要素です。例:BaseLanguage(MPSのJava版)では、ルートノードはクラス、インターフェース、および列挙型です。

コンセプト

ノードは互いに非常に異なる場合があります。各ノードはその宣言、その概念への参照を格納します。概念は接続されたノードの"タイプ"を設定します。ノードのクラスを定義し、そのクラス内のノードの構造を結合します。ノードのインスタンスが持つことができる子、プロパティー、および参照を指定します。概念宣言は継承階層を形成します。ある概念が別の概念を拡張する場合、その親からすべての子、プロパティー、および参照を継承します。
MPSのすべてがASTを中心に展開しているため、概念宣言はそれ自体がASTノードです。実際、それらは特定の概念、コンセプト宣言のインスタンスです。

concepts

言語

MPSの言語は、いくつかの追加情報を含む一連の概念です。追加情報には、その言語に関連するエディター、補完メニュー、インテンション、型システム、データフローなどの詳細が含まれます。この情報はいくつかの言語的側面を形成します。
明らかに、言語は他の言語を拡張することができます。拡張言語は、その拡張子で定義されているすべての概念をその子または参照の型として使用でき、その概念は拡張言語の任意の概念から継承できます。ご存じのとおり、MPSの言語は完全に再利用可能なコンポーネントを形成しています。

生成プログラム

言語ではユーザーがモデルに格納されているコードを作成できますが、ジェネレータはこれらのソースモデルをターゲットモデルに変換できます。ジェネレータは、ASTモデルに対してmodel-to-model変換を実行します。ターゲットモデルはソースモデルとは異なる言語を使用し、1つ以上の目的を果たします。

  • テキストソースファイルに変換してから標準のコンパイラでコンパイルすることができます (Java、Cなど)

  • テキスト文書に変換してそのまま使用することができます (設定、ドキュメント - プロパティーファイル、xml、pdf、html、latex)

  • 直接解釈できる

  • コード解析やサードパーティーのツールによる正式な検証に使用可能 (CBMS、ステートマシンの到達可能性分析など)

  • 実システムのシミュレーションに使用可能

ジェネレータは通常、ドメインフレームワーク(生成コードが呼び出しまたは継承する一連のライブラリー)に依存しています。フレームワークは目的のソリューションの安定部分をエンコードし、可変部分は実際に生成されたコードに含まれています。

Domain framework

MPSでの生成は段階的に行われ、1つのジェネレータの出力がパイプライン内の別のジェネレータの入力になることがあります。オプションのmodel-to-text変換フェーズ(TextGen)を続けて、テキスト形式のコードを生成することができます。この段階的なアプローチは、元の問題ドメインと技術的実装ドメイン間の潜在的に大きな意味論のギャップを埋めるのに役立ちます。それはまたジェネレーターの再利用を促進します。

次へ

最終更新日: 2019年8月30日