brainfuck语言

一,指令
BF只有8种有效字符,其实就是8种指令:
字符 含义

  指针加一

< 指针减一

  •   指针指向的字节的值加一
    
  •   指针指向的字节的值减一
    

. 输出指针指向的单元内容(ASCⅡ码)

, 输入内容到指针指向的单元(ASCⅡ码)

[ 如果指针指向的单元值为零,向后跳转到对应的]指令的次一指令处

] 如果指针指向的单元值不为零,向前跳转到对应的[指令的次一指令处
这里的指针都是指向一个8位的整数,即char,加减法的溢出规则也是和char型整数的溢出规则一致。
纸带是双向的,和图灵机保持一致。
二,翻译成C/C++
BF可以简单的翻译成C/C++语言:
把BF转换成C++代码的C++代码:

string translate(char c)
{
    switch (c)
    {
    case '>':
        return "p++";
    case '<':
        return "p--";
    case '+':
        return "*p = *p + 1";
    case '-':
        return "*p = *p - 1";
    case '.':
        return "cout<<char(*p)";
    case ',':
        return "*p=getchar()";
    case '[':
        return "while(*p){";
    case ']':
        return "}";
    default:
        return "";
    }
}
int main()
{
    char c;
    while (cin >> c) {
        cout << translate(c);
        if (c != '[')cout << ";\n";
    }
    return 0;
}

然后,我们只需要加几行代码,就可以直接执行上述C++代码

void run()
{
    char arr[1000] = { 0 };
    char* p = arr+500;
    //input code
}
 
int main()
{
    run();
    freopen("D:/out.txt", "w", stdout);
    char c;
    while (cin >> c) {
        cout << translate(c);
        if (c != '[')cout << ";\n";
    }
    return 0;
}