Languagesをほぼ読了。外部DSLについて、複数の手法がでてきたので、すこし整理。DSL本では、外部DSLを実装する方法として、大きく以下の3種類が登場している。model)を生成する方法。Securityの例でいうと、以下のイメージ。特徴と使いどころDSLコードから意味モデルの生成を、2パスの処理(1パス目:DSL→抽象構文木、2パス目:抽象構文木→意味モデル)で行う。中間形式である抽象構文木を導入することで、意味モデルへの変換処理という複雑なタスクを、より単純な2つの処理へ分割する。結果、実装やテストの容易性を高めることが可能。よって、ある程度複雑なDSLや意味モデルとなるケースで有効な方法である。前方参照を扱う場合、1パスの方法にくらべ、容易に実装できる。generatorを使用することができる。TranslationDSLから、直接意味モデルを生成する方法。Securityの例でいうと、以下のイメージ。特徴と使いどころDSLコードから意味モデルの生成を、1パスの処理で行う。Translationで十分な場合が多い。前方参照のような、複雑な処理を行う場合には、コードに工夫が必要となる。generatorを使用して実装する場合、文法ファイル中のactionに、意味モデルの生成ロジックを記述することとなる。InterpretationDSLから(意味モデルを生成せずに)実行結果を算出する方法。generatorのチュートリアルでよく扱われる、計算式の文字列を与えると、計算結果を算出するようなプログラムが該当する。特徴と使いどころこの方法では、意味モデルを生成しない。意味モデルが不要であるような、非常にシンプルなケースで用いることができる。Fowler氏が繰り返し述べているとおり、DSLでは意味モデルが重要である。ある程度複雑なドメインを扱う業務アプリケーションの分野では特に、意味モデルは高い重要性を持つ。Translationを用いることが一般的と考えられる。generatorを使用すれば、ASTを作るのは、ほぼ自動。ASTから意味モデルを生成するのは、DSLから意味モデルを1パスで作成するに比べ、容易である。Constructionを用いるのが一番適切なのではないだろうか。コメントをキャンセルメールアドレスが公開されることはありません。ThemeHall.。