ふつうのコンパイラをつくろう 言語処理系をつくりながら学ぶコンパイルと実行環境の仕組み

JAVAによるC言語とほぼ同等のCフラットという言語を作ることを通じて、コンパイラのしくみから、x86のアセンブラ、リンカ、ローダーの仕組みまでが学べます。
 パーサーのところの構文解析、意味解析の部分と、その部分で何が論点になるのか、中間表現への変換までは、JAVAで書かれていますが、すべてのコードが書かれている訳ではなく大部であるためその主要な部分が記載されており、後は自分でコードを見て勉強すると良いと思います。
 後段部分は、x86のアセンブラを理解するのに必要なレジスタ、メモリのアドレッシングの仕組みと、中間表現から、どのようにアセンブラ(gas)に変換するかが記載されています。この辺りあまり書いてある本がないので、勉強になりました。
 最後は、LinuxのELFのオブジェクトファイルのでき方と、リンカ、ローダーがどのように動くかということが書いてあって、ここもなかなか触れられている本は少ないので、コンパイラがどのような仕組みで動くということだけでなく、プログラムが、Linux上でどのように動くのかの仕組みが段階を追って記載されており、参考になりました。
 JAVAのコードは、genericなどがバシバシ使われており、その辺り知見がないと難しいかもしれませんが、丁寧に追っていけば、コンパイラのみならず、JAVAでの比較的規模の大きなプログラムのコーディングについても勉強になるのではないでしょうか。
 私は、この著者の書かれたRubyの本と、Rubyのソースコード完全解説を読んだことがありますが、どちらも勉強になりました。また改めて紹介したいと思います。

コメント