とらドラ (Modern Compiler Implementation in C と Compilers: Principles, Techniques, and Tools 的な意味で)
ざっとModern Compiler Implementation in C(タイガーブック)目を通しました。Compilers: Principles, Techniques, and Tools(ドラゴンブック)との比較してみます。実際に比較できるのは、ある程度内容を理解しているレキサーとパーサーの部分だけですが、参考にはなるかと思います。
全体的にタイガーブックは、ドラゴンブックに比べると、内容が実践的で練習問題がわかりやすいです。ドラゴンブックの練習問題は、抽象的(本質的)な問題が多いように思いますが、タイガーブックは実践的な問題が多いように感じます。
タイガーブックの方が、小さい処理系を作るという目的がある分、説明に筋が通っています。例えば、C言語の#include や#pragmaは、トークンでないという説明はタイガーブックにはありますが、ドラゴンブックにはありません。ドラゴンブックは特定の処理系を想定していないのでしょうがないと思います。パーサーに関しても、ドラゴンブックはLALRを特別扱いはしていないのですが、タイガーブックは処理系で使うためLLよりもLALRの説明に力が入っています。
タイガーブックは、コンパイラで使うC言語の型宣言が書いてあり、実際にコンパイラを書く上ではとても参考になります。教科書のソースコードは、http://www.cs.princeton.edu/~appel/modern/c/ からダウンロードできます。
最適化以降の話でも、ドラゴンブックが一般的な話をして、タイガーブックはある程度内容を絞ってでも、実践的な所を選んで書いてあります。例えば、パイプラインを考慮した最適化では、MIPSアーキテクチャをターゲットにスケジューリングの話が載っています。MIPSのシミュレータも、http://www.cs.princeton.edu/~appel/modern/c/ からダウンロードできます。ドラゴンブックも、見るからにMIPSアーキテクチャに対する最適化なのですが、MIPSという文字列は出てきません。
まとめると、広くコンパイラに関する勉強をしたいならドラゴンブック、すぐにでも何か作ってみたいならタイガーブックかなと。
The comments to this entry are closed.


Comments
>タイガーブックは処理系で使うためLLよりもLALRの説明に力が
LR 系に力が入っていると思いますけど、LALR に限定すると梯子を外されてる
(LR(1)からの引き算の説明になっているので実際に yacc を自作しようと思うと悩ましい)ような。
Posted by: m.ukai | 2008.05.27 12:11 PM
m.ukaiさん
フォローありがとうございます。
タイガーブック、予想以上に面白そうでわくわくしています。
> LR 系に力が入っていると思いますけど、LALR に限定すると梯子を外されてる
> (LR(1)からの引き算の説明になっているので実際に yacc を自作しようと思うと悩ましい)ような。
なるほど、そこまでは突っ込んで読めていませんでした。
Posted by: なつたん | 2008.05.28 06:30 PM
お久しぶりです。
タイガーブックを読んで同じような感想を持ちました。
実践的でわかりやすいですね。
レキサーやパーサーの部分よりもその先の部分が面白いと思いました。
さて、次はドラゴンブックにチャレンジします。
Posted by: Noppi | 2008.06.02 07:40 PM