Brainf*ck语言(简称BF)是一种超级神奇的语言。当然与我上一篇文章(Prolog语言一瞥)所介绍的不同,这个语言并不具有很多的实际应用价值,它只是一个图灵机的实现。
八个图灵机状态:
于是简简单单的Hello World变成:
字符 含义 > 指针加一 < 指针减一 + 指针指向的字节的值加一 - 指针指向的字节的值减一 . 输出指针指向的单元内容(ASCII码) , 输入内容到指针指向的单元(ASCII码) [ 如果指针指向的单元值为零,向后跳转到对应的]指令的次一指令处 ] 如果指针指向的单元值不为零,向前跳转到对应的[指令的次一指令处
>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.>>>++++++++[<++++>-]<.>>>++++++++++[<+++++++++>-]<---.<<<<.+++.------.--------.>>+.很不可思议吧?这个语言果然名实如一。
为了自己验证一下,这个语言的编译器,我也去找了。
[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编一个简单的小程序就可以模拟这个图灵机了。