RustでCコンパイラ その09 STEP17まで(キーワードintの導入)
2026-04-12 11:04:44
- Tags:
- Rust
下記をRustで実装する続き。
Githubは下記。
commitコメントに、learnt step N って書いているから、該当のところをみれば変更が分かると思う。
STEP17は、ようやくintというキーワード。
つまりは型を導入する。
といっても、変数宣言だけなので、宣言と同時に初期化などはできない。
また、複数の変数を一度に宣言とかもできない。
ただ、これにより、下記のように関数の戻り値や引数の定義でintという型が使えるようになる。
int add3(int a, int b) {
int c;
c = 3;
return a + b + c;
}
今回は参照実装を見ずに、
自分で考えて実装してみた。
最初、自分の言語のBNFをもう覚えてなくて、いちいちプログラム読むのもだるかったので、
README.mdにBNF (正確にはEBNF) を書いておいて、
言語に機能足す度にこれを更新していくようにした。
そこからintを追加したけど、
まあ実装は少し時間くったけど、
エラーなくテストも完了。
アセンブリを生成するgeneratorはほぼいじらなかったけど、これでよいのかって不安はある。
余計な値をどっかでスタックに乗せている気がするので、このコンパイラでプログラムをコンパイルしたら、いつかメモリ枯渇するかも。
で、そのあと参照実装である下記をみたんだけど、
Add keyword “int” and make variable definition mandatory · rui314/chibicc@b4e82cf
複数宣言も、宣言と同時に初期化もやっとるやないかい!
ってことで、この参照実装にはまだたどり着いていない。
だけど、参照実装は、順番がSTEPどおりになっていないので、
先に、下記でポインタ型導入していたりする。
Make pointer arithmetic work · rui314/chibicc@a6bc4ab
なので、あとでまとめてやるつもり。
いつか追いつけたらいいなーぐらいで。
次はSTEP18。ポインタ型。


There are currently no comments on this article, be the first to add one below
Add a Comment
Note that I may remove comments for any reason, so try to be civil. If you are looking for a response to your comment, either leave your email address or check back on this page periodically.