小さなプログラミング処理系を作る 言語処理系と周辺ツールへ
まず、
すべて具体的に考えよ。できるだけ抽象的に考えよ。抽象的なことも具体的に考えよ。
日本語が変なのは承知だが、そうとしか言えない。
「具体的」とは、なんとなく想像しているのではなくて、事例を探す、経験をする、ってこと。没入した体験が必要。知性よりは、肉体とか感性のレベルの体験。「バカみたい」「子供っぽい」「そんなこと…」なんて考えはやめよう。
今回のミニ言語、高級言語処理系とツールを作る前に、“機械語プログラム”をする。仮想機械が出来てないなら、机上でもよい。なにが大変かが身を持って(=肉体的に)分かるだろう。
例題は:
- y = x*x + 2; z = (y - 3)*(y + 3); w = x + y + z; のような制御なしの算術計算
- 与えられた正の整数nに対して、0から(1からでも同じだが)nまでの和を求める
- 似てるが、nの階乗を求める。
- 与えられた2つの正の整数n, mに対して、その最大公約数を求める。アルゴリズムはユークリッド互除法を用いる。
VM(のインストラクションセット)には、最低限の制御構造は必要。手続き呼び出しはなくてもよい。機械語しか使えない大変さと不便さを体験して、どうしたら楽で便利になるかを考えて、欲しいものを列挙する。