Tagged "C"

コンパイラ作成日記 5日目

こちらの挑戦日記5日目

低レイヤを知りたい人のためのCコンパイラ作成入門

リポジトリはこちら。 gennei/compilerbook-challenge

今日やったこと

分割コンパイルとリンク

  • 1つのファイルで管理するのがしんどくなってきたので小さくする
  • 9cc.cという1つのファイルを、以下の5つのファイルに分割する。
    • 9cc.h: ヘッダファイル
    • main.cmain関数
    • parse.c: パーサ
    • codegen.c: コードジェネレータ
    • tokenize.c: トークナイズ

やっと分割できる。分割してみてわかったのは header file というものを久しく書いていなくて懐かしかった。header file はなんとなく interface に似ている。存在する function はありながら実態は別のファイルに記述されている、そういうところが似ている。
コンパイルするので実装漏れがあってもエラーになるのであんまり不安はないがグローバル変数を引き回すのはやはり分かりづらいなあ。

Read more...

コンパイラ作成日記 4日目

こちらの挑戦日記4日目

低レイヤを知りたい人のためのCコンパイラ作成入門

リポジトリはこちら。 gennei/compilerbook-challenge

今日やったこと

  • 比較演算子の実装

commit: gennei/compilerbook-challenge@ba71e9b

Read more...

コンパイラ作成日記 3日目

こちらの挑戦日記3日目

低レイヤを知りたい人のためのCコンパイラ作成入門

リポジトリはこちら。 gennei/compilerbook-challenge

今日やったこと

  • 再帰下降構文解析の復習
  • スタックマシンの概念の復習
  • 四則演算のできる言語の作成
  • 単項プラスと単項マイナス
  • 比較演算子のアイディアを読むところまで

commit: gennei/compilerbook-challenge@7a25e4a

Read more...

コンパイラ作成日記 2日目

こちらの挑戦日記2日目

低レイヤを知りたい人のためのCコンパイラ作成入門

2日目は以下のことをやった

  • strtol 関数の調査
  • トークナイザの導入
  • エラーメッセージの改良
  • 抽象構文木とスタックマシンのお勉強

strol 関数について

ポイントの一つとして、文字列に数字と無関係の文字が含まれている場合等、読み込みに失敗した場合に、第二引数のポインタにそのアドレスを格納できる点がある。これにより読み込みに失敗した箇所を正しく同定できる。この処理が不要な場合はNULLを指定すればよい。

Read more...

コンパイラ作成日記 1日目

まとまった時間がとれたのでこれに挑戦する。

低レイヤを知りたい人のためのCコンパイラ作成入門

環境構築

M1 Mac編

M1 Mac で動くかどうかは書いていなかったのでとりあえず環境構築やってみた。

Read more...