Brainfuck,是一种极小化的计算机语言,它是由Urban Müller在1993年创建的。由於fuck在英語中是髒話,这种语言有时被称为brainf*ck或brainf***,甚至被简称为BF。
Müller的目标是建立一种简单的、可以用最小的编译器来实现的、符合图灵完全思想的编程语言。这种语言由八种状态构成,为Amiga机器编写的编译器(第二版)只有240个字节大小。
就象它的名字所暗示的,brainfuck程序很难读懂。尽管如此,brainfuck图灵机一样可以完成任何计算任务。虽然brainfuck的计算方式如此与众不同,但它确实能够正确运行。
这种语言基于一个简单的机器模型,除了指令,这个机器还包括:一个以字节为单位、被初始化为零的数组、一个指向该数组的指针(初始时指向数组的第一个字节)、以及用于输入输出的两个字节流。
下面是这八种状态的描述,其中每个状态由一个字符标识:
| 字符 | 含义 |
|---|---|
> | 指针加一 |
< | 指针减一 |
+ | 指针指向的字节的值加一 |
- | 指针指向的字节的值减一 |
. | 输出指针指向的单元内容(ASCII码) |
, | 输入内容到指针指向的单元(ASCII码) |
[ | 如果指针指向的单元值为零,向后跳转到对应的]指令的次一指令处 |
] | 如果指针指向的单元值不为零,向前跳转到对应的[指令的次一指令处 |
(按照更节省时间的简单说法,]也可以说成“向前跳转到对应的[状态”。这两解释是一样的。)
(第三种同价的说法,[意思是"向後跳转到对应的]",]意思是"向前跳转到对应的[指令的次一指令处,如果指针指向的字节非零。")
Brainfuck程序可以用下面的替换方法翻译成C语言(假设ptr是char*类型):
| Brainfuck | C |
|---|---|
> | ++ptr; |
< | --ptr; |
+ | ++*ptr; |
- | --*ptr; |
. | putchar(*ptr); |
, | *ptr =getchar(); |
[ | while (*ptr) { |
] | } |
Brainfuck是一种由Urban Müller在1993年设计的极简编程语言,旨在实现最小的编译器,并且具备图灵完全性。通过其独特的指令集和操作方式,Brainfuck提供了对底层计算资源的直接控制,虽然程序难以阅读,但其能力却足以完成任何计算任务。
462

被折叠的 条评论
为什么被折叠?



