Meta II

小さなシステムの話として、我らがインターンAlexは"Meta II A Syntax-Oriented Compiler Writing Language"という1960年代初頭の論文を読んでいる。BNF指定された構文中に.OUTとかいうコード出力命令を挟んで書き、それによってパーズするとコードが出てきてそれを実行できる、というものなのだが、そのBNFを読む構文を同様に書くと、それでコード生成までするコンパイラが書けてしまう、というものである。

Alexは論文を読むだけではなくて、実際にその出てきたコードを解釈実行するインタープリタを書いて、実際にそのコードが動くかどうか確かめていた。100行くらいのインタープリタと、総計200行くらいのマシンコードで書かれたブートストラップ用のコンパイラに、BNFで書かれたコンパイラ記述を食わせてコンパイラを生成し、そのコンパイラで自分自身をコンパイルして見たりしている。偉い。