ネタ元はこちら→ http://blogs.wankuma.com/melt/archive/2007/04/07/70525.aspx
一年前に書いてました。 C++による Brainf*ck→C トランスレータすね。
標準入力にBrainf*ckコードを食わすとCソースが標準出力に出てきます。
// bfc.cpp
#include <iostream>
#include <map>
#include <string>
#include <iterator>
int main() {
typedef std::map<char,std::string> op_type;
op_type op;
op['>'] = "++p; ";
op['<'] = "--p; ";
op['+'] = "++(*p); ";
op['-'] = "--(*p); ";
op['.'] = "putchar(*p); ";
op[','] = "*p = getchar(); ";
op['['] = "\nwhile(*p) { ";
op[']'] = "}\n";
std::cout <<
"#include <stdio.h>\n"
"#include <stdlib.h>\n"
"int main() {\n"
" static char data[10000];\n"
" char* p = data;\n"
" memset(data,10000,0);\n";
std::istreambuf_iterator<char> first(std::cin);
std::istreambuf_iterator<char> last;
while ( first != last ) {
op_type::iterator it = op.find(*first);
if ( it != op.end() ) std::cout << it->second;
++first;
}
std::cout << "\n}\n";
}