大切なのはアウトプットとコミットメント。 忘備録てきなかんじです。
C C++ Java Objective-C Perl Python
0除算を行うとだいたいプログラムは以上終了します。 プログラムを書いている時に割り算が出てきたら、除数が0にならないか確認しましょう。 特に除数が変数の場合は等注意です。 ガード処理として除数が0でないかチェックする処理を入れておくのが無難です。 頭では...
C C++ Linux Unix
ソースコードが多くなってくるとコンパイルするのに時間がかかります。 makeコマンドをコンパイルをしている場合は、ジョブの数を増やす事でコンパイル時間を短縮できるかもしれません。 ```bash `gutter:false; $ make -j4 ``` jオプショ...
9cc C
コンパイラ作成のプロジェクトはDocker上のUbuntuで行なっているのですが、WindowsのWSL, VirtualBox上のDebian9.5ではテストが通りませんでした。 環境が違うから仕方ないと思っていたのですが、調べてみると初期化もれが原因でした。 ...
ポインターの演算はポインターだったらポインターのサイズ分加算などする必要があります。 ```c `gutter:true; int *p; int list[3]; list[2] = 12; p = list; return *(p + 2); ``` 上記の場合、pは...
9cc C 低レイヤ
[低レイヤを知りたい人のためのCコンパイラ作成入門](https://www.sigbus.info/compilerbook)を参考にしながらコンパイラを作成しています。 初めは変数はint固定で64ビットなのですが、32ビットにしようとしたらだいぶハマりました。 ...
コンパイラ作成でポインターの演算処理を実装していて、mallocの使い方が間違っていて悩みました。 (ポインターとハンドルをちゃんと理解しておりませんでした) ### 問題のコード テスト用に連続したintの領域を確保するalloc4を作成するのですが、どうもs...
コツコツ作成しているCコンパイラですが、return文が無いと色々不便なのでreturn文を追加しました。 return文はそこに来たら関数の最後にジャンプすれば良いので、jmp命令でプロローグの直前にジャンプすればOKです。 jmpする前にraxに値を入れておき...
関数定義に対応するの大変でした。 初めは今までと同じNodeとして定義していたのですが、それだとうまくいかず プログラムを関数の集まりと定義する事にして関数定義に対応しました。 再帰呼び出しもちゃんとできているのでいったん良しです。 生成規則は以下のような感じに...
関数呼び出しに対応するの大変でした。 正しいかわかりませんが、生成規則を以下のように定義しました。 (試行錯誤のすえ以下のようになったのですが...) ``` `gutter:true; program: stmt program program: ε st...
最近のマイブーム9ccコンパイラ作成 前回単語変数対応したのですが、複数文字のローカル変数対応は宿題になっていました。 ヒントとしては、連想配列を使うと言う事で、連想配列の作成方法は方法が載っていました。 こんな感じか?というのを記事にします。 連想配列...
最近コンパイラを育てるのが密かな楽しみになっています。 Ruiさんが公開してくれている[低レイヤを知りたい人のためのCコンパイラ作成入門](https://www.sigbus.info/compilerbook)を読みながら、コツコツ作成していっています。 大学...