『Writing An Interpreter In Go / Go言語でつくるインタプリタ』 #golang

Writing An Interpreter In Goという本を読んだ。

この本はMonkeyという言語のインタプリタをGo言語で実装するという内容。

全編英語だが、200ページほどだし語り口も面白くてわかりやすいので読みやすい。

流れとしては大きくLexer・Parser・Evaluaterの章に分かれていて、それぞれ字句解析〜抽象構文木〜評価器をGoの標準機能だけで実装していく感じ。

Parserの部分ではyaccなどの既存ツールを使わずにPratt ParserというJS Lintでも使われている手法を用いて実装していくところが特に面白かった。

Pratt Parserについてはググってもあんまり情報が出てこなかったけど、いくつか英語のエントリがあって特に下記のPythonで解説してくれてるやつがわかりやすかった。



ドラゴンブックを読んでコンパイラを自作するみたいな骨太な経験はその道の人なら必須だと思うけどなにぶん内容が重厚すぎて気軽に手を出すにはやや躊躇してしまう。

その点この本は冒頭でも書いている通りとにかく「学習目的」で「シンプル」に作るという点を重視しているためわかりやすい。

小さなテストを書いて、それを満たすための最小の実装を書いていく、この構成がとても良くて心が折れずに進むことができる。

英語で読めるか不安な人はちょうど数日前の6/16、オライリーから日本語版の「Go言語でつくるインタプリタ」として発売されているので手に取って見ると良いかと思います。