http://www.cnblogs.com/icejoywoo/archive/2011/11/27/2265340.html#2314921
官方网站: http://www.muppetlabs.com/~breadbox/bf/
BrainFuck, (An Eight-Instruction Turing-Complete Programming Language), 这个语言本身的语言模型很简单, 有一个byte指针, 有一个初始化为0长度为30000 bytes的数组, byte指针可以在数组内任意移动, 支持下面的八种操作, 指针初始化指向数组的开始. 这个语言只是作者为了写一个很简单的编译器, 才设计的一门语言, 语言和名字一样, 很难读懂, 简单的一些操作用BrainFuck来写都很复杂难读.
八种操作符定义如下(来自百度百科):
字符 含义
> 指针加一
< 指针减一
+ 指针指向的字节的值加一
- 指针指向的字节的值减一
. 输出指针指向的单元内容(ASCII码)
, 输入内容到指针指向的单元(ASCII码)
[ 如果指针指向的单元值为零,向后跳转到对应的]指令的次一指令处
] 如果指针指向的单元值不为零,向前跳转到对应的[指令的次一指令处
Brainfuck程序可以用下面的替换方法翻译成C语言(假设ptr是char*类型):
Brainfuck C
> ++ptr;
< --ptr;
+ ++*ptr;
- --*ptr;
. putchar(*ptr);
, *ptr =getchar();
[ while (*ptr) {
] }
下面看一下BrainFuck的Hello World!程序代码
++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>++.>+.+++++++..+++.<<++.>+++++++++++++++.>.+++.------.--------.<<+.<.
这段代码看似很诡异, 但是在BrainFuck编译器中输出的确实是Hello World!
字符输出是根据ASCII表.
百度百科上有一些基本操作的介绍, 我这里主要就解释一下这个Hello World!程序的结构.
一个简单的循环结构
++[>++<-]>.
上面使用了两个byte, 第一个byte用来存储循环的次数, []表示一个循环, >移到了第二个比娅特上, 操作第二个byte, 连加两次,<回到第一个byte上减1, 保证可以退出循环. 这就是2X2次循环, 就是第二个byte变成4, 第一个byte变成0. >移到第二个byte上, .是输出这个byte.
byte输出字符是依照了ASSIC表的, H是72, 所以输出H就可以这样写
++++++++[>+++++++++<-]>.
把第一个byte和第二个byte调换一下位置, 第二个byte作为循环条件判断, 操作第一个byte并输出.
>++++++++[<+++++++++>-]<.
输出H也可以使用蛮力的方式, 72个+, 然后输出就是H, 不过这种东西更难读懂了.
上面的Hello World!就是循环操作, 还有几种其他Hello World!的写法.
1.
>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++++>-]
<.>+++++++++++[<++++++++>-]<-.--------.+++.------.--------.[-]>++++++++[<++++>-
]<+.[-]++++++++++.
2.
>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++++>-]<.>+++++++++++[<+++++>-]<.>++++++++[<+++>-]<.+++.------.--------.[-]>++++++++[<++++>-]<+.[-]++++++++++.
都是大同小异的, 上面两个用到了一个这样的操作[-], 这个操作是清零当前byte, []退出的条件是当前byte为0, 减到0才会退出循环.
可以尝试着看看, 这个语言还是挺有意思的, 和名字一样, 真的是很难看懂.
下载:
BrainFuck解析器(带有一些例子): DBFI.zip
http://files.cnblogs.com/icejoywoo/DBFI.zip
里面的例子有加法等, 也有HelloWorld的例子, 而且有多种版本, 有兴趣的可以研究下.
分享到:
相关推荐
Brainfuck是一种极简的、 Turing-complete(图灵完备)的编程语言,由Urban Müller于1993年创建。它只有8个基本操作符,看似简单的语法却能实现复杂的计算。源码中的“Tape”是Brainfuck的核心概念之一,它是模拟...
Brainfuck,是一种极小化的计算机语言,它是由Urban Müller在1993年创建的。由于fuck在英语中是脏话,这种语言有时被称为brainf*ck或brainf***,甚至被简称为BF。 【内含:BF解释器,BF解释器源码,BF写的几个小...
1. **Brainfuck语言**:这是一种极简主义的图灵完全编程语言,只有8个简单的指令,包括移动数据指针、增加/减少当前单元格的值、读写标准输入/输出,以及循环控制。理解其工作原理是使用此解释器的前提。 2. **Go...
brainfuck是一种极小化的编程语言,只有8种指令。brainfuck是图灵完全的,也就是说,你用C写的所有程序、算法都可以用brainfuck实现。
Brainfuck 是一种极小化的、非图灵完备的编程语言,由 Urban Müller 在1993年创建。它的设计初衷是为了挑战程序员的创造力和理解力,而不是为了实际应用。Brainfuck 的源代码由八个基本命令组成,用符号`, `>`, `+`...
Brainfuck是一种非常简单的编程语言,只有8个命令字符: - `>` 移动数据指针到下一个单元。 - `移动数据指针到前一个单元。 - `+` 将当前单元的值加1。 - `-` 将当前单元的值减1。 - `[` 如果当前单元的值为0,则...
它以其简洁的八个基本命令和极端的低级特性而闻名,通常用于教学和实验目的,以展示图灵完全语言的最小必要元素。这个项目是用C++编写的一个Brainfuck编译器,可以将Brainfuck源代码转换为可执行的机器码,从而在...
这个项目可能代表了一种创新的编程思想,将抽象的计算机指令与更直接的人脑理解相结合。” 【知识点详解】: 1. **脑干编程(Brainfuck)**: 脑干编程是一种极简的、甚至可以说是极端的编程语言,由Urban Mü...
Brainfuck是一种极简主义的编程语言,设计用于教育和实验目的,它的语法非常简单,只有八个命令字符。而“基于HTTPS”的部分则暗示了这个解释器可能通过Web服务的方式提供在线编译和执行Brainfuck代码的功能,使得...
Brainfuck是由Urban Müller在1993年创造的一种最小化的、 Turing-complete(图灵完备)的编程语言。它的设计目标并非实用性,而是挑战程序员的创造力和对计算机底层工作原理的理解。它只有8个命令,每个都由一个...
“Brainfuck 是一种以极简主义着称的深奥编程语言。该语言仅由八个简单的命令和一个指令指针组成。然而,它被证明是图灵完备的。它旨在挑战和娱乐程序员,而不是被制造出来适合实际使用。它由 Urban Müller 于 ...
1. **Brainfuck简介**:Brainfuck是一种低级的、非图灵完备的编程语言,由Urban Müller于1993年创建。它只有八个字符的操作指令,分别是`+`、`-`、`>`、`、`.`、`,`、`[`和`]`,每个都有特定的含义,用于控制数据...
作者的计划包括完成`BF Studio`,BF(Brainfuck)是一种极简的编程语言,其工作室可能是一个用于编写、运行和调试Brainfuck代码的平台。这有助于理解计算机科学的基础概念,如指令集和内存管理。 启动Turing机器和...