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

compilerbook.booth.pm

Linuxのブートプロセスの理解をしているのは世界にどれだけいるのだろう。

さて、Cでも勉強したいのだけれど、作りたいものが見つからない状況なのでコンパイラを作る。

環境設定

WindowsのCLionを使いたい。CLionとしてはMinGWやCygwinなどあるが、筆者の意図に合わせてこれをインストール。 Install Windows Subsystem for Linux (WSL) on on Windows 10 | Microsoft Docs

/mnt/内部にwindows側のディスクがマウントされるのでこの中でコンパイルする。 無事共存

f:id:mitsuo_0114:20190114113940p:plain

Step1, Step2

全く問題なし

Step3

Tokenのvalの部分で、long intとintのWarningが出るぐらいで問題なし。

Step4の前

構文木を組むことによって、演算子の順番の特定ができる話。若干理解が浅い部分。 あとスタックマシンはコンピュータシステムの理論と実践で頑張ったからまぁわかる。アセンブラでスタックマシン実装した良い思い出。

読了 - コンピュータシステムの理論と実装 - エンジニア。

Step4

おおむね写経で済む。書いてないのは以下ぐらい。

  • 循環で関数を読んでるためheaderに別だしする必要あり。もちろんMakefileも。
  • tokenizeで新しく追加した演算子に対応
  • 地味にposの初期化がないのでこれも適当に実装。

Cの理解が浅くて可変長Vectorの実装が出来なくて泣きたい。 引き続き実装を進める。

個人的に勇気づけられたのはここ。 不思議な感じがする=理解が浅いと思っていたが筆者が言ってるんだからこの不思議な感じは理解とは別物なんだろうな。

正直、再帰には非常に慣れているはずの筆者ですら、こういったコードが動くのは一種の魔法のように感じます。再帰的なコードは、仕組みがわかっていてもどこか不思議な感じがするのですが、それはおそらくそういうものなのでしょう。