Cコンパイラ(yncc)進捗 20191128
概要
9月頃からちょっとずつ作っていたCコンパイラ(yncc)がひと段落したので、その進捗とこれからやりたいことを書きます
Cコンパイラ、完成には程遠いけどひと段落まで行けたってことでブログ書きたいな
— ゆん (@yn0014) 2019年11月8日
進捗
- プリミティブ型 (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]; }
自分がプログラムを始めたてのときに書いた数当てゲームがあるのですが、一部を変更するだけでコンパイル出来ました
これからや りたい ること
最終的な目標はセルフホスト…ですが、あまりに大きすぎる目標を置いても自爆するだけなので
書いたままのプログラムをコンパイル出来るようにする
を当面の目標にします。
現段階のynccでプログラムをコンパイルしようとした場合、変数宣言の場所やスコープなど…コンパイラの実装状況に合わせたプログラムに変更してあげる必要があります。
…なので、「そんなつまらない事なんて考えずに書いたプログラムを手直しせずすぐコンパイルできるようにしたい!」ということです。
(例えば、for文の初期化式で変数定義が出来ないので1回外で定義する必要がある…など面倒くさい仕様になっている)
まとめ
やるぞ!
並行して進めていること
ついでにこの記事を書いた時点で並行して進めていることを書いておきます。(後から見直したときに役に立つかも)
マルチタスクで、進めるぞ!
入門 マルチタスクな人間
— ゆん (@yn0014) 2019年11月6日