人間夜行

一切の有為の法 夢幻泡影の如し

神奇的Brainf*ck

| 评论

Brainf*ck语言(简称BF)是一种超级神奇的语言。当然与我上一篇文章(Prolog语言一瞥)所介绍的不同,这个语言并不具有很多的实际应用价值,它只是一个图灵机的实现。

八个图灵机状态:

字符 含义
> 指针加一
< 指针减一
+ 指针指向的字节的值加一
- 指针指向的字节的值减一
. 输出指针指向的单元内容(ASCII码)
, 输入内容到指针指向的单元(ASCII码)
[ 如果指针指向的单元值为零,向后跳转到对应的]指令的次一指令处
] 如果指针指向的单元值不为零,向前跳转到对应的[指令的次一指令处
于是简简单单的Hello World变成:
>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.>>>++++++++[<++++>-]<.>>>++++++++++[<+++++++++>-]<---.<<<<.+++.------.--------.>>+.
很不可思议吧?这个语言果然名实如一。

为了自己验证一下,这个语言的编译器,我也去找了。

[koc@koc-desktop ~]$ yaourt brainfuck

1 aur/awib 0.3-2 (22)

A brainfuck compiler written in brainfuck, able to generate x86 linux

binaries, C code, Ruby code, Go code and Tcl code.

2 aur/bfc 1-3 [installed] (37)

A minimalistic brainfuck compiler.

3 aur/brainfuck-git 9999-1 (6)

A simple brainfuck interpreter

4 aur/brainfuck-parser 20110601-1 (3)

Brainfuck interpretor in C

5 aur/brainspell-git 20101215-2 (1)

logical game for programmers: write on Brainfuck for speed!

6 aur/cpbrainfuck 1.1-3 (7)

A simple Brainfuck interpretter.

==> Enter n° of packages to be installed (ex: 1 2 3 or 1-3)

==> -------------------------------------------------------

==> 2 应该选第二个(我已经装了:-))。在安装过程中发现它依赖于nasm——一个为可移植性与模块化而设计的一个80x86的汇编器。关于nasm就不多提了,有兴趣的自己去搜吧。值得一提的是,这个编译器源代码只有两百多行,更加显出其神奇之处,以至于我觉得用C编一个简单的小程序就可以模拟这个图灵机了。

评论