書評:コンパイラとインタプリタの作成

私はコロラド州立大学の図書館で、私の好きな場所のひとつであるこの本に出会い、興味をそそられました。 難解な計算式などに頼るのではなく、最適化、O表記などについて話し合う代わりに、本書ではコンパイラとインタプリタの直接的な実装に直接ダイビングする方法を取っていたように見えました。 副題が示唆しているように(「C ++を使ったアプライドアプローチ」)、この本はC ++プログラミング言語に堪能なプログラマー向けに書かれています。 C ++言語についての紹介はなく、C ++でプログラミングする方法を知っていなければなりません。あるいは、C ++コードが意味することを少なくとも理解して、本書の価値を最大限に引き出すことができます。

この本は1996年に出版されているので、テクニックやコーディングスタイルの一部は日付が付いていますが、実際に直接実装され、ほぼすべての章で実用的な “ユーティリティ”プログラムが作成されています。 私が知る限り、この本のコードは、実行可能なC ++コンパイラで動作するはずです。 私は実装の方法を説明するために少しの理論がカバーされると思っていましたが、私は “理論”には簡単に触れ、最後には近いことが分かりました。 たとえば、コンパイラとインタプリタのデザインでは緑色で、シフトと置換パーサーとは対照的に、再帰的に下降するパーサを構築していたことは認識していませんでした。 覚えてる。)

それで面白い注意点だと思います。自分自身のような人にとって、この本はほぼすべての理論をスキップして、すぐに実装に向かうのは良いことです。 私は非常に “実装”指向の人であり、より抽象的な数学理論(それは私が取り組んでいるものです)とは対照的に、直接実装の観点から抽象アルゴリズムなどを考えることがよくあります。 特定のアルゴリズムの技術に迷うことなく、パスカルコンパイラ/インタプリタの内部動作を垣間見ることができます。

しかし、ある意味では両刃の剣でもあります。 それはあまり理論には入っていないので、この本は、「実装」指向ではなく、より抽象的な人にとってはあまり役に立ちません。 また、コンパイラ/インタプリタの設計の教科書としては機能しません。基本的には、特定の種類のインタプリタを作成する方法を説明しています。 または別のもの。

それは、パスカルの特定の予約語についての構文図から行く過程を示し、それが分解され、コードで実装されたときの様子を示していますが、私が言ったのと同じように、 デザインについて。 この本が他の方法や別の方法で実現することができれば面白かっただろうが、コードリストなどで範囲が大きすぎると分かっている。

これも同様に、ほぼ完全なパスカルコンパイラ/インタプリタの構築を探っています(少なくとも1つの機能が不足しているため、ほぼ完成していますが、残念ながらこの本をライブラリに戻す必要がありました。 )、これはPascalがサポートしているプログラミングのパラダイムのみを探索することを意味します。

たとえば、オブジェクト指向システムや自律型エージェントシステムをどのようにプログラムするのか、並行性には触れないのかについては言及していません。 コンパイラに関する多くの本のように、Prologや他の「論理的な」言語に見られるような言語構造も考えていないようです。 ワーナーの仮想マシンに自分の論理言語を実装するために適用できるこの本の一般的な知識を得るためには…ファイルの入出力方法を学びます。 それはそれです。

しかし、その本は何をするのですか。 C ++コンパイラなどを使用して独自のドメイン固有の言語の構築を実装する方法について把握していました。 実は、私は図書館で本を手に入れたので、CDは付属していませんでした(私にはCDが付属しているかどうかはわかりません)。 私はコードを入手できるかどうか分からないので、私はいくつかの難解な場所のすべてのコードをオンラインで入手できると主張し、それを読む前に私は躊躇していました。 しかし、結局のところ、私はその本に含まれるコードを読んだだけで、CDやダウンロードされたコードなしで自分自身が理解できることがわかりました。 もちろん、私は実際に(すべてのコードが必要だった)自分のコンピュータに獣を実装していませんでしたが、テキストを理解するだけでコンパニオンコードが不要であることがわかりました。

明らかにこの本の新しい版があり、それはあなたが左に見ることができます。 この本は、パスカルのコンパイラ/インタプリタの作成に焦点を当てていますが、C ++を使用する代わりにJavaを使用しているようです。 また、UMLモデリング、XML中間構造、Java Collections Frameworkなど、いくつかの最新のツールについても説明します。 私が新しいプログラマ、あるいは少なくともコンパイラ/インタプリタを実装するのに新しい人であれば、私は上記の前回のエディションの代わりにこの本を手に入れました。 しかし、もしあなたがC ++で何かを探しているのであれば、上記の本は年齢とともに知恵のナゲットを提供しています。

私は実際にこの本の第3版を読んでいないが、そこにあるものを見ることは面白いだろう。 したがって、私は実際にレビューベースでこの本を推奨することはできません、私はそれが私が実際にレビューしている本は現代版を持っていることを示すためにそれを含めるだけです。

もしあなたが興味を持っている、あるいはJava言語をすでに知っているなら、おそらく第3版は前の本よりも良いでしょうが、あなたが「昔の学校」でC ++のようなものは古いものと一緒に行くのがよいでしょう。 それはおそらく安いでしょう。

しかし、両方の本についての私の唯一の注意点は、それにコーディングスタイルや練習が少し日付があるということです。 近代的なプログラミングの多くは依存関係の削減に重点を置いています.Makのコードは依存性を少し厚くする傾向があります。 また、いくつかの関数のオーバーロードは、より良い “ungluing”を残すことがあります。

コンパイラ/インタープリタを理解するのが難しいと思っている人は、理論はそのままに(コンパイラを作る方法を知る前にコンパイラを最適化することを学んでいますか?)、これはおそらくあなたの本です。 私がオリジナル版(C ++)から手に入れることができたことを知ったので、私は将来、より頭の良い、理論を抱えた本を把握できるようになり、CSUのいくつかの論文 ライブラリは激しい!

これは”アッシャーは読んだ本“のリストの一部です

あなたが私の執筆を感謝するなら、私のパトロンを通して私を支えてください。( パトロン )

あるいは、あなたが毎月の約束をしていないなら、あなたはいつも「私にコーヒーを買う」ことができます

photo credit: justonlysteve yoga and compilers via photopin (license)

あわせて読みたい

コメントを残す

%d人のブロガーが「いいね」をつけました。