C-コンパイラ(仮)
はじめに
現在開発中のコンパイラです。Cのサブセットの文法で構造体、ポインタがありませんがJavaVM上で動作します。字句解析、構文解析、意味解析、コード生成すべて パーサ・ジェネレータを使わず手書きですので、どちらかというと実用的な言語ではなく学習目的の物です。
オーム社の「IT Text コンパイラとバーチャルマシン」を参考に処理系の学習をしていたのですが、読んでいるだけでは理解できない部分があったので自分なりに実装してみました。処理系に興味がある方は、実用的な言語に比べてもソースコードは少ないので参考にしてみてください。
ダウンロード
Subversionからのチェックアウト方法
$ svn checkout --username anonymous --password anonymous \
http://www.oklab.org/repos/develop/netbean_project/Compiler/tag/1.01 my_compiler
コンパイルと実行
実行にはJava 5.0以上が必要になります。
コンパイル
Windowsでコンパイルする方法. 例: java -cp .;Compiler.jar org.oklab.compiler.Compile ソースコードファイル 例 ソースコードがhogefileの場合: java -cp .;Compiler.jar org.oklab.compiler.Compile hogefile ヘルプの表示: java -cp .;Compiler.jar org.oklab.compiler.Compile -h
実行
Windowsで実行する方法.
例:
java -cp .;Compiler.jar org.oklab.runtime.RunStartup 実行ファイル
例 実行ファイルがhogefileの場合:
java -cp .;Compiler.jar org.oklab.runtime.RunStartup hogefile
ヘルプの表示:
java -cp .;Compiler.jar org.oklab.runtime.RunStartup -h
ソースコードのサンプル
void main() {
}
int p2(int hh) {
printf(hh);
return 1;
}
void main() {
printf(p2(999));
}
void main() {
int a;
a = 1;
while ( a < 5 ) {
a = a + 1;
printf(a);
}
}
void main() {
int a;
a = in();
printf(a);
if (a == 1) {
printf(a);
}
return;
}
