言語実装パターン レビュー
   2 min read

(レビュー、という大層な物言いはあまりしたくないのですが、自分が書籍の感想を検索するときには "<書籍名> レビュー" で検索することが多いので…​)

タイトルにある書籍、 言語実装パターン(Amazon) を読み始めたので、ファースト・インプレッションを記録しておきます。

この書籍のゴールを、誤解を恐れずワンフレーズで表現すると、 "ANTLR3 の気持ちを理解する" です。 最終的に読者は ANTLR3 を利用することを前提として説明が進んでいきます。 コードサンプルも、 ANTLR が自動生成するコードに倣ったもので、可読性は低いです。 本書の前半は ANTLR を利用しない lexer や parser が提示されますが、エッジケースには対応していなかったりします [1]。 この辺りについては、「最終的には ANTLR に任せれば良いわけで、ニュアンスが掴めれば良い」というスタンスなんだと思います。

写経に向いた書籍ではありません。 前述の通り、最終的には ANTLR に任せるので、人間が書くことを前提にしていません。 書籍内に登場するコード片だけを見ても理解が進まないと思います。 オライリーのサイトからコード全文をダウンロードできます。デバッガでステップ実行しながら本文の内容を理解していく、という利用方法が良いと考えます。 あまり細かい実装の意図を理解しようとするのは無駄です。

ソースコードについて。 オリジナルのソースコードは、 Ant プロジェクトで Java1.5 を前提としているような前時代的なものです。そこで、 Maven, Java17 で利用できるようにするスクリプトを書きました。利用方法は README を参照してください。

どんな人に向いた書籍か。 まず、 ANTLR3 をこれから使おうとしている人には向いているかと思います (ただし、現在の最新バージョンは ANTLR4 なので、そのような人は少ないと思います)。 あとは、 ANTLR4 を使おうとしているけれど、英語に苦手意識があって公式ドキュメントの前に何か日本語の参考資料を探しているような人でしょうか。 上記のような人以外にとっては、今や他に効率的な学習方法があるような気がしています…​ 例えば ANTLR について学びたいのであれば The Definitive ANTLR 4 Reference が良さそうですし、インタプリタを写経しながら実装してみたい、というのであればググった感じ Go言語でつくるインタプリタ が向いていそうです。


1. p.40 で説明されている実行で、入力に '[a,b c,[d,e]]' を与えても通ってしまいました(bc というtokenが生成されてしまいました)。