いまどきのプログラミング言語作り

教科書(「岩波講座 ソフトウェア科学〈〔環境〕5〉プログラミング言語処理系」)で字句解析と構文解析をやって、ある程度学習も進んできたので、そろそろ実践の段階だと思い、去年の夏に買ってからずっと積ん読になっていた「いまどきのプログラム言語の作り方」を読み始めた。

いまどきのプログラム言語の作り方

いまどきのプログラム言語の作り方

字句解析、構文解析についてはもはや既習事項なので、ぐいぐい読める。教科書に書いてあったことがほぼそのまま Java のソースに落とし込まれているので、「ああ、これが例のアレか」「これを Java で書くとこうなりますか」などと色々発見があり面白い。

この手の「作りながら学ぶ」系の本は、理論中心の教科書との併読で一番力を発揮するように思う。それも、先に教科書である程度理論を押さえてから、副読本として実践本を読むのがいい。教科書である程度高みに上って視野を確保してから、少し下目使いな感じで実践本を読めるようにしておくのがベストだ。理論の部分がわからないまま、得体の知れないものを見上げるようにこの手の実践本を読んでも得るものは少ない。

この本を読むと、再帰降下構文解析はやっぱり面白いなあと思う。少しずつ言語を拡張していくという作り方に向いているし、何よりプログラムが理解しやすく、自分で書けるというのがいい。シフト還元構文解析法の方が理論としては高尚っぽく、エラそうで、カッコよさげな気もするが、この場合 yacc や Bison のような生成系の力を借りないわけにはいかないので、構文解析の部分が完全にブラックボックスになってしまいそうな気がする。(生成系そのものから作るという人は別だけど……)

生成系のお世話になろうかと思ってたけど、再帰降下な構文解析器を自分で一から手書きするのも面白いかなと思った。

解析器の性能的にはどうなんだろう?
インタプリタ言語の場合、構文解析に必要な時間もプログラムの実行時間に含まれるわけだから、解析器の時間性能もかなり重要な要素のはず。

ちょっと調べてみよう。