いぬおさんのおもしろ数学実験室

おいしい紅茶でも飲みながら数学、物理、工学、プログラミング、そして読書を楽しみましょう

インタプリタを作る

 専門ではないので説明が曖昧な部分もありますが、勘弁してください。ぼくはソフトを書くのが趣味なんですが、何年か前、インタプリタ作りにはまっていました。とにかく面白かったです。
 例えばCという言語では、
for(i = 1, s = 0; i <= 10; i++){
    s += i;
}
と書いてパソコンで実行すると s = 55 と値が入ります。1から10までの総和です。最近はPythonが流行のようですが、CにしてもPythonにしても、誰かが設計して作ったコンピュータ言語です。設計者が「for文の働きは……、itoa()という関数は……」とか全てを決めるのです。コンピュータ言語にはコンパイラインタプリタと働きの異なるタイプがあります。CはコンパイラPythonインタプリタです。コンパイラプログラマが書いたプログラムを実行前に完全に解釈し、マシンがすぐ実行できる機械語を生成します。インタプリタは、プログラマが書いたプログラムを解釈しながら実行します。従って実行速度はコンパイラ言語で作成したプログラムは速く、インタプリタは遅い、ということになります。なんとなく、の説明です。
 さて、こうしたコンピュータ言語ですが、「コンピュータ言語でプログラムを作る」、という本はたくさんありますが、「コンピュータ言語を作る」という本はあまりありません。コンピュータ言語の設計者はいったいどうやって言語を作ったのでしょうか。さっき書いたプログラムをコンピュータに読ませ、sの値を求めさせなければならないのです。ぼくはずっと疑問に思っていました。プログラミング情報誌などの記事も見かけましたが、『明快入門 インタプリタ開発 基本技術から処理系の実装まで』(林晴比古2012ソフトバンククリエイティブ)に答えがありました。内容は衝撃的。この本を読めば自分で新しいコンピュータ言語(インタプリタ)を開発できるようになります。ぼくは1回目はC++で、2回目はC#で自分のインタプリタを開発しました。C、C++は好きなので、それっぽい言語にし、組み込み関数もファイルのオープンや書き込みなどを簡単にできるものを作ったり、しばらく楽しめました。この本は他のライブラリなどには一切頼りません(フルスクラッチ!)。つまり丁寧に読めばインタプリタ作成に関してはしっかりした技術が手に入ります。

明快入門 インタプリタ開発 (林晴比古実用マスターシリーズ)

明快入門 インタプリタ開発 (林晴比古実用マスターシリーズ)

 

『明快入門 コンパイラインタプリタ開発』(林晴比古2010ソフトバンククリエイティブ)というのもありますが、こちらはほぼコンパイラ開発の本です。面白かったですが、インタプリタの方がハードルが低いと思いました。

明快入門 コンパイラ・インタプリタ開発 (林晴比古実用マスターシリーズ)

明快入門 コンパイラ・インタプリタ開発 (林晴比古実用マスターシリーズ)

 

  『明快入門 インタプリタ開発』は今まで読んだ本の中で最も影響を受けた10冊の中に入ります。インタプリタ作成に無限の可能性を感じました。林先生の著書は他にもいくつか持っていますが、どれも主張ははっきりわかりやすく、実力になる、という印象です。