誰かが私に解析ツリー、ASTとメタモデルの間の関係を説明できますか?これまでのところ、xtextは文法からEMF Ecoreメタモデルを導出し、antlrを使用してパーサーを生成することを知っています。しかし、それはどのように解析されますか?入力は最初にレクサーを通過し、次にパーサーはパーサールールから解析ツリーを作成しますよね?そして、解析ツリーから、XtextはASTも作成しますか?何のために?そして、この場合のメタモデルにはどのような目的がありますか?私はすべての定義について少し混乱しています。
1 に答える
あなたは3ステップの解析手順について正しいです:最初にレクサーは入力ストリームで始まり、次にAntlrベースの解析ツリーが作成され、最後にXtextが解析ツリーからEMFベースのASTを生成しました。最初の2つのステップは、すべてのパーサー(ジェネレーター)にとって自然なことですが、3番目のステップには説明が必要です。やる気を持って少し長い説明を始めてから、メタモデルとEMF全般について簡単に説明します。
まず、生成されたパーサーは識別子の解決(変数または関数呼び出しの処理に必要)をサポートしていません。これらの関数は手動で追加する必要があるため、ほとんどすべての言語で手動でコード化された後処理ステップが必要です。既存の解析ツリー。
次に、EMFは、モデルに優れたタイプセーフAPIを提供し、強力なリフレクティブAPIを使用して、モデルの処理を容易にする非常に汎用的で便利なコンポーネント(Acceleoなどのコードジェネレーターや1つの側面など)を作成できます。 Xtendの、 ATL、ETL、VIATRA2などのモデル変換ツール。Antlrの解析ツリーAPIとEMFの違いを正確に知ることはできませんが、LPGパーサージェネレーターのAPIを使用したので、EMFの方が操作しやすいと思います。
さらに良いことに、EMFを使用すると、GMFベースのグラフィカルエディタなどの他のEMFベースのエディタと一緒に豊富なXtext機能を再利用できます。基本的な考え方については、以前のEclipseConプレゼンテーションを参照してください。TMFとGMFの出会い-テキストとグラフィカルモデリングの組み合わせ。
一般に、解析ツリーを解像度情報で拡張する必要がある場合は、すでに使用されているパラダイムを再利用することで、言語と他のツールとの統合を容易にすることができます。
EMFは、メタモデリングの概念に依存しています。接続に関する情報などの追加の制約とともに、モデルで使用可能な要素のセットを定義する必要があります。この概念は、XMLのスキーマ定義(DTDやSMLスキーマなど)に似ています。モデルを記述するための統一された方法があります。Xtextはいくつかの方法でEMFと連携します。
- まず、文法に基づいて、すべてのEMFベースのツールで使用できるEMFメタモデルを生成して登録します。
- 次に、解析プロセスの最終結果はEMFモデルであり、EMF APIを使用して読み取りおよび変更できます。変更は、テキスト形式にシリアル化されて戻されます。
答えは十分に明確だったと思います。必要に応じて、さらに詳しい説明を求めてください。