Brainfuck语言入门
·
Brainfuck语言(简称BF)是一种非常接近图灵机的编程语言。
本文既是BF的详细介绍和工具,也是我学习BF的全过程记录。
目录
一,指令
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;
string s;
while (cin >> c) {
s+= translate(c);
if (c != '[')s+= ";\n";
}
cout << s;
return 0;
}
然后,我们只需要加几行代码,就可以直接执行上述C++代码
void run()
{
char arr[1000] = { 0 };
char* p = arr+500;
//input code
}
int main()
{
run();
return 0;
}
三,打印A
先看看怎么打印A,即char(65)
+++++++++++++
[->+++++<]
>.
运行第一次(翻译):
运行第2次(执行):
四,BF的归0操作
要把一个位置上的数变成0,BF代码也很简单:
[-]
把当前位置和前面相邻的非0值全部变成0:
[[-]<]
五,打印Hello World!
有了打印一个字符的经验和归0操作,接下来就可以输出任意字符了:
Ascii码分别是72,101,108,108,111,32,87,111,114,108,100,33
+++++++++
[->++++++++<]
>.[[-]<]
++++++++++
[->++++++++++<]
>+.[[-]<]
+++++++++
[->++++++++++++<]
>.[[-]<]
+++++++++
[->++++++++++++<]
>.[[-]<]
+++++++++
[->++++++++++++<]
>+++.[[-]<]
++++++++
[->++++<]
>.[[-]<]
++++++++
[->+++++++++++<]
>-.[[-]<]
+++++++++
[->++++++++++++<]
>+++.[[-]<]
+++++++++
[->++++++++++++<]
>++++++.[[-]<]
+++++++++
[->++++++++++++<]
>.[[-]<]
++++++++++
[->++++++++++<]
>.[[-]<]
++++++++
[->++++<]
>+.[[-]<]
六,编程实战
七,Brainfuck语言 解释器
Brainfuck语言 解释器_csuzhucong的博客-CSDN博客
八,Brainfuck语言 未定义行为
Brainfuck语言 未定义行为_csuzhucong的博客-CSDN博客
九,好用的工具
https://fatiherikli.github.io/brainfuck-visualizer/
这个网页可以贴自己的BF代码执行,可以输入输出,还可以看到可视化的运行过程,挺好用的。
十,BF系列语言
更多推荐
已为社区贡献3条内容
所有评论(0)