rowl1言語コンパイラをコンパイルするコンパイラ作成中
ようやくブートストラッピングの次のステップであるrowl1言語開発に着手しました。rowl1言語コンパイラはrowlVM上で動作するプログラムとして作成します。
rowl1コンパイラ記述言語のアセンブリ言語のアセンブラ
http://github.com/nineties
中のrowl-assemble.rlcがそれ。
S式で書かれたアセンブリ言語のプログラムをバイトコードに翻訳します。下はfibのアセンブリコードのサンプル。
( (fun main ( (imm_int 36) (call fib 4) exit )) (fun fib ( arg0 imm_i3 (if_ge ifelse) arg0 imm_i1 isub (call fib 4) arg0 imm_i2 isub (call fib 4) iadd ireturn (label ifelse) imm_i1 ireturn )) )
最初に命令列をスキャンして各関数・ラベルのアドレスを計算した後、各インストラクションの定義に従ってバイトコードに翻訳します。ここは2回スキャンする代わりにバックパッチという手法もあります。
また実行可能ファイルのヘッダも生成します。