Cコンパイラ(yncc)進捗 20191128

概要

9月頃からちょっとずつ作っていたCコンパイラ(yncc)がひと段落したので、その進捗とこれからやりたいことを書きます

進捗

  • プリミティブ型 (int, char)
  • 変数 (ローカル/グローバル)
  • ポインタ
  • 配列
  • 関数
  • if
  • for
  • while

以上が実装済みの機能、構文です。
↓のようなプログラムをコンパイルすることができます。

int main() {
    int memo[10];
    memo[0] = 1;
    memo[1] = 1;

    int idx;
    for(idx = 2; idx < 10; idx = idx + 1){
        memo[idx] = memo[idx-1] + memo[idx-2];
    }
    return memo[9];
}

f:id:guguru0014:20191128163018p:plain


自分がプログラムを始めたてのときに書いた数当てゲームがあるのですが、一部を変更するだけでコンパイル出来ました

f:id:guguru0014:20191128163811p:plain

これからや りたい ること

 最終的な目標はセルフホスト…ですが、あまりに大きすぎる目標を置いても自爆するだけなので

書いたままのプログラムをコンパイル出来るようにする

を当面の目標にします。

 現段階のynccでプログラムをコンパイルしようとした場合、変数宣言の場所やスコープなど…コンパイラの実装状況に合わせたプログラムに変更してあげる必要があります。

 …なので、「そんなつまらない事なんて考えずに書いたプログラムを手直しせずすぐコンパイルできるようにしたい!」ということです。

 (例えば、for文の初期化式で変数定義が出来ないので1回外で定義する必要がある…など面倒くさい仕様になっている)

まとめ

やるぞ!

並行して進めていること

ついでにこの記事を書いた時点で並行して進めていることを書いておきます。(後から見直したときに役に立つかも)
マルチタスクで、進めるぞ!