Entry

今日読んだ本 - 『コンパイラ入門』

2010年02月12日

古本屋で安かったから買ってみました。Amazon の評価はすこぶる悪いけれども,言ってるほど悪くはない。コンパイラが何をやっているのか,(実装も含めて)数日でざっくり知りたい向きなんかは参考になると思います。

コンパイラ入門 C#で学ぶ理論と実践 (ソフトウェア実践講座)
冨沢 高明
ソフトバンククリエイティブ
売り上げランキング: 319021
おすすめ度の平均: 1.5
1 ハイヒールで冬山登山するようなもの
1 クオリティの低い本
2 解答のない問題集

言うまでもないことですけれど,コンパイラをちゃんと知るのであれば,ドラゴン本を読んで,実際に簡単なコンパイラを実装すること。近頃は,安易なコンパイラ本がたくさん出版されているけれど,どれもドラゴン本の劣化コピー(初心者や趣味の人向け)か,読み捨ての企画モノです。安易に劣化コピーに頼ると,思わぬ遠回りになる可能性がある。本書のような本は,そゆことを踏まえて読むのが,お作法つかなんつかなんですけどね。

コンパイラ―原理・技法・ツール (Information & Computing)
A.V. エイホ R. セシィ J.D. ウルマン M.S. ラム
サイエンス社
売り上げランキング: 181064

と,そこまで言っといて書くのもアレなんだけれど,『入門』の特徴は,C# で実装していながら,割と低水準なお作法で実装しているということ。これはいいと思う。

普通,コンパイラは C のような低水準の言語で作るわけで,Java とか C# とかいった言語で作ることはあまりありません。例えば,スキャナの記述について,ドラゴン本では低水準ならではの検討事項として,入力バッファの扱いをかなり詳細に亘って検討していたりする。

しかし,高水準な言語だと,ここら辺は周辺のクラスライブラリで吸収できちゃったりします。面倒でボトルネックになるような工夫のしどころはさておいて,美味しいとこだけ説明しているわけで,これが「現実の」コンパイラ開発なり,パーサ開発にどれだけ役に立つのか疑問です。

その点,本書では,クラスライブラリを使わずに,わざと自前の関数でスキャナを実装していたりします。実際は C でスキャナを作る場合も,Lex や Flex といったスキャナジェネレータを使うのが一般的なんだけれども,こゆもんは,一回自分で作っておくべきだと思う。比較的人気のあるコンパイラ初心者本である『ふつうのコンパイラをつくろう』では,JavaCC をガッツリ使ってたりするもんで,これって JavaCC の使い方の本なんでね?と思うくらい。それと比べたら,本書のアプローチは正しいと思います。

ふつうのコンパイラをつくろう 言語処理系をつくりながら学ぶコンパイルと実行環境の仕組み
青木 峰郎
ソフトバンククリエイティブ
売り上げランキング: 22347
おすすめ度の平均: 4.5
3 思ったほど、、
5 ふつうのプログラマに贈る名著
5 史上最強のコンパイラ本

コンパイラ本のうち,コードジェネレータ(機械語を出力する処理)以前の処理,つまり,スキャナやパーサのような技術については,機械語を扱う向き以外にも有用だったりします。例えば,自前で XML や JSP のようなマークアップ言語を解析したいと思っている向きはいるはず。

(構文|字句)解析器の作り方は,今や理論を通り過ぎて,定番のプログラミング作法になっているので,本書のような薄い本でも,一読するとプログラミングの幅が広がるんじゃないかと思います。応用できる箇所は意外と多かったりするんですよね。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN