bf2c : brainfuck to c

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 月ごろ。使用言語は HaskellCGIRuby既存研究があることは知っていたけれど、当時はわりと愚直な翻訳しかしてくれなかったので、自分でも作ったんだったと思う。詳しいことはあまり覚えてないけど、適当な抽象構文木を定義して、その上でデッドコード除去、コピー伝播、部分評価、ループ展開を何回かやってるはず。逆コンパイラとかも同じようなことやってるのかなーとか考えながら書いた。

意図的にオーバーフローしてるコードは扱えなかった気がする。他にも制限とかあったかも。思い出したら適宜追記する。