XMLテンプレートエンジンを作成するにあたり、JSTL互換の式言語を組み込みたかったので、Apache Jakarta TaglibのJSTL実装を参照しながら作ってみた。で、面白い。JavaCCは初体験だったのですが、言語を自分で作れてしまう。ちゃんと動いたら、なんだか異様に感動できた。
と、この喜びを伝えて、理解してくれる人が周りに余りいないので、BLOGで発散。
これだけでは、なんなので。
JavaCC(Java Compiler Compiler)は、Javaの言語パーサー生成の仕組み。コンパイラーのコンパイラーという名称からも分かるように、プログラミング言語、スクリプト、あるいはコマンドラインを、パースするためのフレームワークというところだろうか。実際、Javaのコンパイラーも、JavaCCを使って作成されている。Javaの言語仕様に照らし合わせて、Javaファイルを読み込みながら、実行バイナリに組み立てるわけだ。
なお、JSTLの場合は、評価式や値の取得だけ目的なので、JavaCCの上に、ちょっとしたフレームワークを載せている。Jakarta CommonsにELがあるけど、そちらはJSTLのパーサ部分だけを抜き出したものだ。若干、JSPの仕様にひきずられるが、ちょっと修正すればJSPに依存しないところでも使えるので、既存のフレームワークにも導入できるだろう。ていうか、EL自身は、javax.servlet配下に作らなくても良かったのではという疑問も浮上する。ま、JDK1.4以降なら、そもそも含まれているからそれほど気にならないとは思うけど。

コメント (2)
Parser Generatorなら
http://www.cs.princeton.edu/~appel/modern/java/
にあるCUP+JFlexが使いやすかったです。
あと、SableCCとANTLRも流行モノですが、忙しくて見れていないんです。
http://sablecc.org/
http://www.antlr.org/
面白そうですよ。
投稿者: yhojo | 2004年12月17日 16:30
日時: 2004年12月17日 16:30
yusukdeです。yhojoさん、コメントありがとうございます。そう、Parser Generatoも、いろいろ種類があるんですよね。ANTLRは、Struts2.0のValidatorにおけるValidWhenで使われているので、ちょっと見たことあります。そのときはよく分からなかったので、パスしてしまったのですが。勉強してみます。
投稿者: yusuke | 2004年12月20日 13:08
日時: 2004年12月20日 13:08