下面是自己C++实现的BrainFuck编译器:
#include <iostream>
#include <cstring> #include <fstream> #include <stack> using namespace std; const int MAXN = 10000000; char command[MAXN]; int jump[MAXN]; char mem[MAXN]; int p = MAXN / 2; inline bool isvalid(char c) { if(c == '>' || c == '<' || c == '+' || c == '-' || c == '.' || c == ',' || c == '[' || c == ']') return true; return false; } void init() { int len = strlen(command); stack<int> stk; for(int i = 0; i < len; i++) { if('[' == command[i]) stk.push(i); else if(']' == command[i]) { jump[i] = stk.top(); jump[stk.top()] = i; stk.pop(); } } } int main() { ifstream is("input.txt"); int len = 0; char c; while(is >> c) { if(isvalid(c)) command[len++] = c; } is.close(); init(); int idx = 0; while(idx < len) { switch(command[idx]) { case '>': { p++; break; } case '<' : { p--; break; } case '+': { mem[p]++; break; } case '-': { mem[p]--; break; } case '.': { putchar(mem[p]); break; } case ',': { mem[p] = getchar(); break; } case '[': { if(0 == mem[p]) idx = jump[idx]; break; } case ']': { if(0 != mem[p]) idx = jump[idx]; } } idx++; } return 0; } |
* This source code was highlighted by YcdoiT. ( style: Navajo )
这是打印"Hello World!"的BF代码:
>+++++++++[
<++++++++>-]<.>+++++++
[<++++>-
]<+.+++++++..+++.>>>++++++++[
<++++>-]
<.>>>
++++++++++[<+++++
+++
+>-]<---.<<<<.+++.
------.--------.>>+.