言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

cola/flash PEG とコンパイラの実装

つまらない話が続きますが後で必要なので進捗を書く。Tamarin 向け lisp コンパイラを作るための作業は次の通り。

  • ライブラリを作る。リスト、ストリーム等
  • パーサを作る。パーサ用関数。パーサ用パーサ。S 式パーサ。
  • アセンブラを作る。
  • コンパイラを作る。<- いまここ

いよいよ本格的な PEG パーサの移植が完了。まだ PEG パーサ自体は自己記述出来ないが、ややこしいので後回しにする。出来たパーサで早速構文木を辿る部品が読み込めるかテスト。関数が足りないのでコンパイラとしては動かないがパーサ自体はちゃんと動いている。このあたりになるとブート用の環境と実行環境で似たような言語が二組あるので相当ややこしい。つまり、イアンさん作のブート用の cola と自作の実行環境用コンパイラで微妙に似て異なる関数が沢山出来てしまった。特にややこしいのがマクロを使うときで、マクロで使える関数はブート用の言語で、出来る式は実行環境用なのでどうしても頭の中で混ざってしまう。しかしブート環境と実行環境は全く違う環境で、ブート環境から見た実行環境はバイト列でしか無いのに、あたかも協調して動いているような気分になるのが不思議だ。

コンパイラが完成してもプログラムを動的に実行するにはもう一手間いる。tamarin だけで動かす分には簡単だけど、flash にはバイトコードを直接読む手段が無く、swf 経由でしか読めないので swf を書き込む部品を作らないといけない。