JoyToy を Ruby で書き直す (1)

1年程前に「いまどきのプログラム言語の作り方」という本を読みました。JoyToy というシンプルなインタプリタ言語の処理系を Java で作りながら、言語作りの基本を学ぶ、という内容の本でしたが、一昨日ぐらいからまた手にとって読み直してます。

前々からプログラミング言語作りに興味があって、「プログラミング言語処理系」や「記号処理プログラミング」といった本を読んできたのですが、自分の場合理屈先行で実践がついてこない傾向が強く、未だに自分の言語を作れるには至っていません。(一応、構想はあるのですが……)

本で読んだだけだとどうしても「わかった気になってるだけ」感が拭い切れず、頭の中のもやもやも一向に晴れないので、今後は実践に重きをおき、「読んだら作る」というスタンスで臨むことにしました。インプットとアウトプット、バランスよく、ということですね。この場合アウトプットは、インプットしたものが正しく消化されたかの確認作業でもあります。

で、まず手始めに、上で挙げた「いまどきの〜」のサンプル言語 JoyToy を Ruby で書き直してみることにしました。

自分で言語を作ろう、という場合、構文解析器(パーサ)は

  1. 再帰降下な構文解析器を自分で書く
  2. yacc などの生成系の力を借りる

のどちらかになると思いますが、JoyToy は前者で、文法を修正 → 字句解析器と構文解析器を修正 → 文法を修正 → 字句解析器と構文解析器を修正 → …… というサイクルを繰り返して、言語を発展させていきます。

昨日までの作業で、第4章まで Ruby での書き換えができました。まだ変数などは扱えませんが、( ) で入れ子になった四則演算まではできるようになってます↓

こんな感じで、ぼちぼちやっていこうと思います。

次回