Brainfuck编程语言¶
Brainfuck是由8个符号组成的图灵完备语言。
注
这种语言有时被称为 brainf*ck 或 brainf**k ,甚至被简称为 BF 。
编程模型¶
如下图,有一条纸带和一个指针。纸带由格子组成,每个格子内包含一个整数,初始时,所有整数均为0。指针指向某个格子,表示对该格子进行操作。

对格子的操作包括:+,-,.,,。其中 + 表示将该格子内的整数加1;- 表示将该格子内的整数减1;. 表示输出该格子内的内容,将格子内的整数作为ASCII码,输出对应的字符;, 表示输入内容到该格子,用户输入一个字符,则该格子的整数置为字符的ASCII码。
故输出字母 A的程序为
+++++ +++++ +++++ +++++ +++++ +++++ +++++ +++++ +++++ +++++ +++++ +++++ +++++ .
A 的ASCII码为65,故将格子内整数加65次,然后用 . 输出,即可得到字符 A 。
对指针的操作包括:>,<。其中 > 表示将指针向右移动一个格子; < 表示将指针向左移动一个格子。
另外还有两个跳转指令,[ 和 ] 。其中 [ 检查当前格子是否为0,若不是0,继续执行下一条指令;若是0,则向后寻找对应的 ] ,然后执行 ] 之后的指令。 ] 检查当前格子是否为0,若是0,继续执行下一条指令;若不是0,则向前寻找对应的 [ ,然后执行 [ 之后的指令。
例如
[ +++++ ] +
由于格子初始化为0,故程序遇到 [,格子为0,则跳过 ],执行 +,程序结束。
再例如
+ [ - ] ++
程序遇到 [,格子为1,继续执行下一条指令。- 将格子变为0。遇到 ],当前格子为0,继续执行下一条。最后执行两个 +,程序结束。
综上,BF的语法汇总如下
语法¶
| 符号 | 语义 |
|---|---|
> |
指针加一 |
< |
指针减一 |
+ |
指针指向的字节的值加一 |
– |
指针指向的字节的值减一 |
. |
输出指针指向的单元内容(ASCII码) |
, |
输入内容到指针指向的单元(ASCII码) |
[ |
如果指针指向的单元值为零,向后跳转到对应的 ] 指令的下一指令处 |
] |
如果指针指向的单元值不为零,向回跳转到对应的 [ 指令的下一指令处 |
相关软件¶
brainfuck-visualizer是一个可视化BF运行过程的网页软件。允许用户输入BF的程序,并逐步运行程序,观察每一步操作后纸带的状态。
这里记录了Urban Müller发布BF语言的原始编译器代码、编译器及相关例子。原始编译器代码包括汇编语言和C语言。
彩蛋¶
+++++ +++++
[->+++++++>+++>++++++++++<<<]
>+++.>++.>++++++++.+++.++
+++++.---------------
--.<.>+++++++++++
+++++++++.---
-------.+
+++++
.