中間コードはどれがいい?

岩波講座 ソフトウェア科学〈〔環境〕5〉プログラミング言語処理系」、第7章「中間コード生成」へ進む。

属性変換文法とか翻訳スキームについて、ちょっとずつわかってきたものの、これらはいずれも形式化された記述法なので、これだけではやはり話が抽象的になり過ぎる。実際の処理系のソースを見せて、「つまりこういうことです」とでも言ってくれた方が(自分にとっては)わかりやすいように思う。*1

中間コードにも色々な形態があると思うが、主だったものはこの二つ。

  用途
後置コード コンパイラインタプリタ
3番地コード 最適化コンパイラ

スクリプト言語を作りたいとか考えているので、個人的に興味があるのは「コンパイラインタプリタ方式に適した中間コードの形態とはどのようなものか」という点。

  • 中間コードの設計が楽そう
  • インタプリタが簡単に書けそう
  • 高度な最適化は不要*2

などの点から、「後置コード+仮想スタックマシン」というのが妥当な線なのかなと思ったり。

自分が知っている言語の中間コードとインタプリタがどうなっているか、処理系のソースを見るとかして勉強した方がよさそうだ。

*1:見せてもらうまでもなく、自分で勝手に読めって話だよな。

*2:コンパイル時間の増大コストを実行時間の短縮で回収できない場合。