TOP / C-コンパイラ

C-コンパイラ(仮)

はじめに

現在開発中のコンパイラです。Cのサブセットの文法で構造体、ポインタがありませんがJavaVM上で動作します。字句解析、構文解析、意味解析、コード生成すべて パーサ・ジェネレータを使わず手書きですので、どちらかというと実用的な言語ではなく学習目的の物です。

オーム社の「IT Text コンパイラとバーチャルマシン」を参考に処理系の学習をしていたのですが、読んでいるだけでは理解できない部分があったので自分なりに実装してみました。処理系に興味がある方は、実用的な言語に比べてもソースコードは少ないので参考にしてみてください。

ダウンロード

コンパイラと実行環境をダウンロード.(1.01)

ブラウザでソースコード閲覧

言語処理系開発者向けAPIドキュメント(Javadoc)

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;
}

API

標準ライブラリ

参考資料



イバラキングへのリンク Get Firefox Valid XHTML 1.1 Apple Darwinへのリンク