読めねえよ!Wipeoutなみのサイバー表記だ。
¬<><∪∪(notavaCC)は上記のBullet¬MLを支えるコンパイラコンパイラだ。コンパイラコンパイラ、とてつもなく面妖な名前だが、コンパイラをコンパイルするコンパイラという意味で、こう書くとなお一層意味が分からなくて楽しい。
実際はコンパイラが利用するパーサを自動生成するものをコンパイラコンパイラと呼ぶ。オールドタイプにはyacc、Java屋にはJavaCCが広く知られている。
- Yacc...そしてLexをよみがえらせる(http://www-6.ibm.com/jp/developerworks/linux/010316/j_l-lex.html)
- JavaCC、構文解析ツリー、およびXQueryの文法(http://www-6.ibm.com/jp/developerworks/xml/030221/j_x-javacc1.html)
- JavaCCの使い方(http://www.dmz.hitachi-sk.co.jp/Java/Tech/javacc/index.html)
¬<><∪∪はJavaCCをより使いやすく、機能を拡充したもの、だと、思う。というのも、私が最後にJavaCCを使ったのがかなり昔なため、もうJavaCCの表記方法をほとんど覚えてないのだ。だもんで、ぱっとサンプルを見ても差分が分からない。JavaCCと比べてここが優れている、というドキュメントがあると助かるのだけども。
- Notes for 1.0.0rc(http://ne.cs.uec.ac.jp/~koto/notavacc/docs/ja/notes.html)
たぶんこの辺に書いてある内容が特長だろう。あと、Bullet¬ML内のBulletNotML.notavaccを読めば、非常にコンパクトな記述ができることがよく分かる。Main.javaを見れば、解析結果をXML表記に落とす方法も記述してあり、参考になるだろう。
¬<><∪∪はビルドするときにスクリプト言語のpnutsを要求することに注意。あと、JDK1.4を使って生成されたパーサは、1.4で導入されたassertionを使っているので、コンパイル時には'-source 1.4'オプション、実行時には'-ea'オプションが必要だ。