DSLとXtext

Xtext書けるようになっておいてねという指示を頂いたので、勉強してたらどうも今までのプログラミング言語とは毛色が違うらしいので定義からさらってみる。XtextはDSL生成のためのIDEらしいのでそもそもDSLってなんじゃいってところから。

DSLについて

DSLとは

ドメイン特化言語(Domain Specific Language)の略

「ドメイン」に特化した言語なので特定の種類の問題に対してのみ有効な言語である。

主にメタプログラミングに用いられる。

メタプログラミングとは?

meta- は、高次の-とかいう意味なのでプログラミング言語をプログラミングする的な意味かな?

内部DSLと外部DSL

内部DSL

ホスト言語自身で強力なDSLを記述できる、所謂「プログラム可能なプログラミング言語」。実装が楽な反面、内部言語に依存するため表現力に劣る。多分interfaceをインプリするのも広義で言えば内部DSL。

EX)Ruby on rails、Rakeとか

外部DSL

ホスト言語とは異なる言語で作成するDSL。DSL設計者が自由にフォーマットを作成することができるが、フォーマットをパースする「パーサ」という処理を書く必要があるため内部DSLよりは実装コストは高い。パーサっていうのは簡単に言うとこれがクラスで、これが予約語で~といった処理を書くのだ。

EX) Make,SQL,UML(UMLはグラフィカルに形式を表すという意味でLanguageになる)など

参考: 第1回 DSLとは? – gihyo.jp

Xtextについて

Xtextとは

Xtextとは、Eclipse上で動くDSL開発支援環境。言語を定義するとエディタを勝手に作ってくれるのが強み。定義を元にDSLエディタ、パーサ、言語モデル、ジェネレータまで作る。MDD(モデル駆動開発)に基づいているのじゃ。XtextはXtext本体の他に、Xtend(Java生成LL),MWE(パースやモデル変換をするエンジン),EMF(Eclipse Modeling Framework:あらゆるEclipseプラグインの基板)というフレームワーク及びエンジンが基板に乗っかっており、それらが組み合わさってDSLを生成している。

参考: Xtext入門 – Slideshare

具体的にどのように実装するか?

ごくごく簡単に言うと、

  1. EclipseでXtextプロジェクトを作成する。
  2. パーサを記述する。
  3. 実行するとEclipseがもう一個起動してその中で指定した拡張子を使ってやるとDSLが適用されている。

これだけ。

とりあえずは、ここまで。次からは実際に実装するべ。