brainfuck语言
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;
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 simple blog!