brainfuck のコードはちょっと読みにくいので、brainfuck のソースコードを C に翻訳するプログラムを作った。
http://dame.dyndns.org/misc/bf2c/
簡単な例を挙げると、
>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++++>-]< .#>+++++++++++[<+++++>-]<.>++++++++[<+++>-]<.+++.------.--------.[-]>++++++++[<+ +++>-]<+.[-]++++++++++.
を、
#include <stdio.h> int main(void) { puts("Hello World!"); return 0; }
にしてくれる。
使い方は、textarea に brainfuck のソースコードを書いて、translate to C! を押すだけ。
作ったのは去年の 10 月ごろ。使用言語は Haskell 。CGI は Ruby 。既存研究があることは知っていたけれど、当時はわりと愚直な翻訳しかしてくれなかったので、自分でも作ったんだったと思う。詳しいことはあまり覚えてないけど、適当な抽象構文木を定義して、その上でデッドコード除去、コピー伝播、部分評価、ループ展開を何回かやってるはず。逆コンパイラとかも同じようなことやってるのかなーとか考えながら書いた。
意図的にオーバーフローしてるコードは扱えなかった気がする。他にも制限とかあったかも。思い出したら適宜追記する。