#include #include #include class BrainfuckCompiler { public: BrainfuckCompiler(const std::string& bfCode) : brainfuckCode(bfCode) {} void compile() { std::cout << "#include \nint main() {\n"; std::cout << "char tape[30000] = {0};\nchar* data = tape;\n"; translateBrainfuck(); std::cout << "}\n"; } private: void translateBrainfuck() { int dataPointer = 0; std::stack loopStack; for (char instruction : brainfuckCode) { switch (instruction) { case '>': std::cout << "++data;\n"; break; case '<': std::cout << "--data;\n"; break; case '+': std::cout << "++(*data);\n"; break; case '-': std::cout << "--(*data);\n"; break; case '.': std::cout << "putchar(*data);\n"; break; case ',': std::cout << "*data = getchar();\n"; break; case '[': loopStack.push(loopCounter); std::cout << "while (*data) {\n"; loopCounter++; break; case ']': if (loopStack.empty()) { // Error: unmatched ']' handleCompilationError("Unmatched ']'"); return; } std::cout << "}\n"; loopStack.pop(); break; default: // Ignore characters other than Brainfuck instructions break; } } if (!loopStack.empty()) { // Error: unmatched '[' handleCompilationError("Unmatched '['"); } } void handleCompilationError(const std::string& errorMessage) { std::cerr << "Compilation Error: " << errorMessage << "\n"; } std::string brainfuckCode; int loopCounter = 0; };