1 はじめに
2 例題 2.1 コンパイル 2.2 アプリケーション
3 DSLの説明 3.1 クラス宣言 3.2 基本情報 3.3 申請情報 3.3.1 字句上の工夫 3.3.2 by-nameパラメタ 3.3.3 施設と設備 3.3.4 同時使用
4 JSON,XMLとの比較 4.1 JSON 4.2 XML
5 メインルーチン
6 DSLの基底クラス 6.1 インスタンス変数 6.2 implicit conversion 6.3 メソッド
7 Candidate 7.1 流れるようなインタフェース
8 Enumeration
9 HTML生成器 9.1 XMLリテラル 9.2 時間
10 HTML
11 まとめ
1 はじめに
本記事では,Scalaをホスト言語としたDSLの定義と,このDSLを処理するプログラムの作成方法について,例題を用いて説明します。今回は「5 メインルーチン」までを,次回は「6 DSLの基底クラス」以降を掲載します。
2 例題
Scala DSLの例題として,公共施設の利用申請書をScala DSLで作成してみましょう。App20090505.scala(リスト1)はScalaをホスト言語とした内部DSLによる公共施設の利用申請書です。
package data
import scala.collection.mutable.ArrayBuffer
import scala.xml.Node
import app._
import app.施設区分._
import app.設備区分._
case class App20090505() extends 施設利用申請書 {
会員番号 = 123456
名前 = "Scala太郎"
理由(<div>Scalaの勉強会を行うため。</div>)
理由("Liftも少し取り上げるかもしれません。")
申請 {
施設(20090601, 1300, 1400, 講堂) 理由は <div>初日は講堂で講演したいから</div>
同時利用(20090602, 1000, 1200) {
施設(第1会議室)
施設(第2会議室) 理由は "第1会議室だけだと足りないから"
設備(ホワイトボード) 個数は 2 理由は "会議室ごとに利用"
} 理由は """両方同時に利用希望します。片方だけだと入りきらないので。"""
}
}
申請者の会員番号,名前と施設や設備の申請内容をテキストで記述しています。内容の詳細は後ほど説明しますが,このテキストを見るとおおよその内容はわかると思います。