Java/EclipseでDSLサポート (1) - DSLの形式
やっとこさ時間ができたので、JavaでDSLを(やむを得ず)使う場合にどうやってEclipseからサポートするか考えて見ます。
こんな感じがいいんじゃないのかなというところ。
Hoge dsl = HogeParser.parse("<Hoge-DSL>", arg1, arg2,...);
つまり、
- メソッド呼び出し + 文字列リテラル + 引数リスト
という形式に縛っておいて、文字列リテラルの部分にDSLを直接(ないしファイル経由で間接)記述する感じです。正規表現も文字列のパターンマッチングを行うDSLだと思えば、java.util.regex.Patternなんかもこんな感じですね。
この形式の問題点は、文字列リテラルはJavaからすればただの文字列リテラルでしかないので、
- 文字列リテラルとして正当ならばコンパイルエラーにならない
- 実行時にエラーを出しても、エラー位置特定するのが意外と難しい(スタックトレースを解釈しても、せいぜい行番号が取れなくもない程度)
- オートコンプリートが効かない
という問題があります。
今回から少しずつ、IDEと連携してこの問題の解決方法を模索していく予定。