Cコンパイラを作る-その1

下記のサイトを参考にしながらCコンパイラを作っています. エラーが出たところとかをメモがわりに残していきながらやりたいと思います.

https://www.sigbus.info/compilerbook

僕の現状の実装経過

github.com

STEP4

error_at(token->str, "数ではありません")

にコードをアップデートするとあるが,tokenizeの中ではtokenに値が代入されていないため,token->strではなく以下のようにpを渡すようにする.そうしないとトークナイズできなかった際にSegmentation faultが起こってしまう.

error_at(p, "トークナイズできません");

user_inputを初期化し忘れると無限ループするので注意.

STEP6

リファレンス実装とサイト実装で単項を複数受け入れるかどうかで実装差が存在していた.リファレンス実装のほうのテストコードを参考にしてテストしようとすると通らないので注意.

リファレンス実装では単項を複数受け入れるような実装にしているため「- - 1」などが解釈できるようになっているが,サイト実装では解釈できない.

STEP7

token->strには該当トークン部分の文字列だけしか入っていないと思ってしまっており,new_tokenする際に二文字だけ渡すようなコードを書こうとしてしまった.token->strは該当トークン文字列が始まるポインタが入っているので,そこから何文字を解釈するかを表すlenだけで特に他の変更は必要なかった.

STEP8

今まで作成したtest.cとか残ってるとmainが複数あるよってエラー出る.