BrainFuckソース生成プログラム
http://members.jcom.home.ne.jp/j-klein/src-box/2brainfuck.c
標準入力から文字列を読み込んでBrainFuckのソースコードに変換します。当然、馬鹿みたいに++++++...とASCIIコードの数だけ繰り返すのではなく、出来る限り短くなるように最適化します(しようとします)。
例えば次のCによるHello, WorldをBrainFuckに変換してみます。
int main(int argc, char *argv[]) { printf("Hello, World\n"); return 1; }
BrainFuckにすると……
>>+++[<+++++[<+++++++>-]>-]<<.+++++.++++++.-------.>++++[<--->-]<.>++++[<++>-] <.+++++.>>++[<+++++[<------->-]>-]<<.>>++++[<++++[<++++>-]>-]<<+.+++++.++++++. >>++++[<+++[<------->-]>-]<<.>>++++[<++++[<++++>-]>-]<<+.>++++[<++++>-]<+.---- -------.----.>+++++[<----------->-]<.>++++[<--->-]<.>++++++[<+++++++++++>-]<+. +++++.-------.>++++[<++++>-]<+.>>>+++[<+++[<+++[<--->-]>-]>-]<<<-.>++[<+++++>- ]<.>+++++[<+++++++++++>-]<.>++++[<++++>-]<+.-----------.>+++[<+++++>-]<.>>+++[ <+++[<--->-]>-]<<.++.>>++[<+++++[<----->-]>-]<<--.>>>+++[<+++[<+++[<+++>-]>-]> -]<<<+.-----------.++.>+++[<--->-]<.+++++.++++++.>++[<------->-]<.>>++++[<+++[ <----->-]>-]<<--.------.>>++++[<+++[<+++>-]>-]<<++.>++++[<+++++++>-]<+.+++++++ ..+++.>++++++[<----------->-]<-.>++++[<--->-]<.>+++++[<+++++++++++>-]<.>++++[< ++++++>-]<.+++.------.>++++[<-->-]<.>++++[<-->-]<.>++++++[<+++>-]<.>>+++[<++++ +[<----->-]>-]<<-.+++++++.>++++++[<+++>-]<.>+++++[<+++++++++++>-]<.>++++[<---> -]<-.>+++[<+++++>-]<.+.---.----.>+++++++[<----------->-]<-.>++++[<++++>-]<+.>+ +[<+++++>-]<.>++++++[<+++++++++++>-]<.
となるわけです。これで、CとBrainFuckで同時にHelloWorldを実現できました(笑)。もちろん、これを実行して、コンパイルできます。
適当に作ったので、ソース汚いのは勘弁してくださいな。
【追記】
関連してhttp://members.jcom.home.ne.jp/j-klein/software/bfm/もアップデートしました。これを利用すると上記のBrainFuckのソースを実行して、CのHello, Worldにもどすことが出来ます。
# 古いバージョンのBFMは改行処理がダメだったので、うまくCのソースに戻りません。現在のバージョン(version 1.0.0)ならばバッチリ戻ります。