2007-06-15 アセンブラコンパイラ 大学 ハードウェアの課題で簡単な仕様のアセンブラを、機械語に翻訳する課題が出た。みんなそれっぽい言語で、caseで激しく条件分岐、みたいなことをやっていたので、「case使ったら負けかなと思っている」と吐き捨てて自分はSchemeで書いた。caseを使わないでどうやったかというと 命令列をPEGを使って解析。1命令はオペコード、オペランド、ラベルを要素にもつリストに変換されて、命令列は命令のリストになる 命令のタイプごとに、それぞれの命令を処理する関数を生成して、オペコードをキーにしたハッシュテーブルに関数を登録していく。 mapを使って、命令のリストにハッシュテーブルに登録した関数を適用していく