Java/EclipseでDSLサポート (1) - DSLの形式

やっとこさ時間ができたので、JavaDSLを(やむを得ず)使う場合にどうやってEclipseからサポートするか考えて見ます。

こんな感じがいいんじゃないのかなというところ。

Hoge dsl = HogeParser.parse("<Hoge-DSL>", arg1, arg2,...);

つまり、

  • メソッド呼び出し + 文字列リテラル + 引数リスト

という形式に縛っておいて、文字列リテラルの部分にDSLを直接(ないしファイル経由で間接)記述する感じです。正規表現も文字列のパターンマッチングを行うDSLだと思えば、java.util.regex.Patternなんかもこんな感じですね。
この形式の問題点は、文字列リテラルJavaからすればただの文字列リテラルでしかないので、

  • 文字列リテラルとして正当ならばコンパイルエラーにならない
  • 実行時にエラーを出しても、エラー位置特定するのが意外と難しい(スタックトレースを解釈しても、せいぜい行番号が取れなくもない程度)
  • オートコンプリートが効かない

という問題があります。

今回から少しずつ、IDEと連携してこの問題の解決方法を模索していく予定。