COINS で Brainfuck のコンパイラ (1)

「COINS を使えば簡単にコンパイラが作れるよ」という宣伝文句にのせられて、試しに COINS を利用して Brainfuckコンパイラを作ってみましょう。実用上の意味はありませんけれども、入門編ということで。

参考文献は

あたりです。

JDK、ANT のインストール

COINS のコンパイラ(C、Fortran77)を利用するだけなら JRE だけでもいいですけど、コンパイラを作りたいならば JDK 1.4 以降と Apache Ant が必要。なんかまあ、適当に入れておいてください。
公式には JDK 5 までが動作確認されてるみたいです。一応手元の環境では JDK 6 で動かしてますけど、(たぶん)ちゃんと動いてます。
あと GNU Make も必要なので、無い人はそれも。

COINS のインストール

まずはアンケートなどに答えつつ、Jar アーカイブのダウンロードを。
http://www.coins-project.org/download/dl.cgi
ダウンロードするのはどっちでもいいですけど、まあ日本語のドキュメントなどが付いててお得ってことで日本語版で。

適当なところにインストールしましょう。ここでは「~/lib」あたりにインストールしてみます。

~/lib  % jar xf coins-1.4.2.2-ja.jar
~/lib  % cd ..
~  % cat >hoge.c
#include <stdio.h>
int main(){puts("hogehoge");}
~  % java -classpath lib/coins-1.4.2.2-ja/classes coins.driver.Driver -coins:assembler=as -b x86 hoge.c
~  % ./a.out
hogehoge
~  %

うーん大学で生まれたものなんて「がくじつてき」にはきっとすごいんだけど使いにくいに違いない、という俗な偏見を砕く簡単さ。

COINS の開発環境づくり

そこまでやったら、あとは coins-1.4.2.2-ja/src 以下に 適当なディレクトリを掘って、コンパイラドライバと対象言語(Brainfuck)から HIR(高水準内部表現)への変換のためのコードを書けばいいだけです。

クラスパスの設定

bash 系だったら .profile とかに「 export CLASSPATH=$CLASSPATH:.:~/lib/coins-1.4.2.2-ja/classes 」とか、csh 系だったら setenv とかで、環境変数クラスパスに追加しておくと「java -cp ~/lib/coins-1.4.2.2-ja/classes ...」とかしなくてよくなるので、後々楽だと思います。

test