はじめに
少し前まではプログラム言語と言えばJavaかC++、VBという感じでしたが、Webの広まりと共にPerlが使われて、PHPが現れ、Rubyが注目されて、JavaScriptが熱をおび、いろいろな言語が活気付いてきました。そして最近は、手続き型以外の関数型言語や論理型言語などにも触手が伸びているようです。
こうなると、次はプログラム言語を実装したりオリジナルのプログラム言語を作ってみたい人も増えてくるかもしれません。そこで本稿では、JavaCCを使ってプログラム言語を実装する手順を解説します。
対象読者
Javaの基本が分かっていてプログラム言語の作成に興味がある方。
必要な環境
JavaCCは最新の4.0を利用します。ダウンロードしたファイルを任意のフォルダに展開しておいてください。
今回はJ2SE 5.0をベースにプログラムを記述します。JavaCC自体はJ2SE 5.0に依存するわけではないので、J2SE 5.0の拡張構文を使わなければJ2SE 1.4などでも利用できます。
ビルドにはAntを利用します。パスの設定などを行い、Antが利用できる状態にしておいてください。Antのバージョンは1.6.5で確認しています。
JavaCCとは
「JavaCC」はJava Compiler Compilerの略で、文法定義を与えると、その文法に従って読み込み処理を行うプログラムを生成することができます。
以前はソースが公開されていませんでしたが、現在ではBSDライセンスのオープンソースで公開されています。JavaCCが実際に使われている事例としては、PythonのJava実装であるJythonや、式言語のOGNLが挙げられます。
同じようなパーサー生成ツールとしてANTLRがあります。実は構文定義ファイルの書き方や処理プログラムの記述はANTLRの方が若干やりやすいのですが、実現できることに大きな違いはありません。
主な違いは、JavaCCで生成する場合、特別なライブラリに依存しないことです。ANTLRの場合は「antlr.jar」が必要になります。
ANTLRはStrutsのValidatorでの条件式定義に使われているので、Strutsを利用した方なら「antlr.jar」というファイルを見かけたことがあるかもしれません。
JavaCCで生成したパーサーの場合は、このようなライブラリは不要です。
JavaCCとJJTree
「JJTree」は、JavaCCで作成したパーサーで構文ツリーを生成するために前処理を行うプリプロセッサです。現実的には、JavaCCを使う場合にはJJTreeを使うことになると思います。前述のJythonやOGNLでもJJTreeが使われています。
本稿では、構文定義ファイルにJavaコードを記述しないこと、生成したファイルを編集しないことを基本方針にしていきます。そのためにはJJTreeが欠かせないので、本稿ではJJTreeを前提にして話を進めていこうと思います。