言語を作る本とかを読むと、おもむろに構文解析を行ったり、必要な機能なので実装しますみたいな出だしが多い中、言語に必要な機能を説明した後で、いくつもの現実的なパターンを交えながら構文解析からコンパイラの作成までを駆け抜けてます。駆け抜けるとは言うモノの言語分野におよそ必要と思われるものを提示してくれています。勿論実際の言語に使用されているテクニックで出てこないものもたくさんあります。

あ、前提知識で木構造とか探索アルゴリズムをある程度理解していないと途中で置いてけぼりになるのでその部分のみ注意ですね。そんなに難しい物でもないので、出て来てから勉強するのでも問題ないレベルかと思いますが。
あと、著者が何故か中盤超えてから、最初に Java 以外で実装しようとするのはやめてくださいと断りを入れてます。僕は C でちょこっと実装した後その部分を読みました。もっと早く言って欲しかった…
実際、かなり無謀なチャレンジなのでコツを掴むまではやめた方が良いですね。

内容

言語を作る事自体を学生の時に漠然と考えていたんですが、最近までこの本は購入して全く読めてなかったです。
作りたいと言うくせに小難しい事から自分から離れて、自分でも理解出来そうな割と楽に読めそうな本をずっと読んでました。要するに新語を覚えたり使い方を覚えるだけのタイプの本ですね。

ただ、自分で構文解析器の初歩程度は作ってみたりはしていたので実際に読み始めると序盤はすんなり頭に入って来ました。定説というか、効率の話になるとこういう本は必要になるんだなぁレベルです。
この本を読むべき理由があるとすれば、解析器よりも、抽象木の構築や、コンパイラの実装を、ANTLR を使って学べる事ですね。やっぱりツールで真ん中を楽すると捗ります。
また、ANTLR を通して言語設計を学べるのでガンガン使って覚えていくと良いでしょう。

まとめ

専門的な話も多いのですが、往々にしてコードベースで話が展開されているので、非常に分かりやすかったです。
数学的な無茶ぶりも無く、根気よく読んでればすぐにでもテンプレートな言語なら実装出来そうです。
オリジナリティ溢れる言語はまた別のお話ですね。

コンパイラの話に関してはドラゴンブックが僕をまだ待ち受けているのでしばらく Java から抜け出せないのかなぁという印象です。言語実装系の本で読みきれていない本は未だいくつかあるのでそれも出来れば消化して行きたいなぁと思いつつ、来月読む本を考えておきたいと思います。

今月はまだ本を買ってないから買うかどうかも悩む…