Brain F**k
by Alex,所谓的Brain F**k, a.k.a BF 语言, 是一种极小化语言. 其实细细想来, 是一种挺不错的暗语.
BF 很简单, 只有8个关键字 lol
| 字符 | 含义 |
|---|---|
> |
指针加一 |
< |
指针减一 |
+ |
指针指向的字节的值加一 |
- |
指针指向的字节的值减一 |
. |
输出指针指向的单元内容(ASCII码) |
, |
输入内容到指针指向的单元(ASCII码) |
[ |
如果指针指向的单元值为零,向后跳转到对应的]指令的次一指令处 |
] |
如果指针指向的单元值不为零,向前跳转到对应的[指令的次一指令处 |
对应的指令代码如下:
| Brainf**k | C |
|---|---|
> |
++ptr; |
< |
--ptr; |
+ |
++*ptr; |
- |
--*ptr; |
. |
putchar(*ptr); |
, |
*ptr =getchar(); |
[ |
while (*ptr) { |
] |
} |
这样一来, 要写一个BF 的解释器其实是很容易的事情 lol 但是, 要写一个BF 程序, 却是比较耗体力的活.
所以, 要用BF 来表达某个含义的话, 可以深刻领会到”众生不易” 的辛苦, 以及坚持不懈的力量 lol.
————————- Hello World 分割线 ————————–
我们来简单地分析一下 HelloWorld 程序. 一下代码经解释会在窗口打出”Hello World!” lol
++++++++++[>+++++++>++++++++++>+++>+<<<<-]
>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.——.——–.>+.>.
程序可以分成两个部分, 前面部分是第一行. 这是一个循环:
++++++++++ 初始化了一个变量, 假设变量堆是A. 那么此时A[0] = 10;
然后[>+++++++>++++++++++>+++>+<<<<-] 执行循环直到A[0] = 0;
可以看到, 这是一个纯粹的加法, >+++++++ 指明A[1] = 7; >++++++++++ 指明A[2]= 10; …
最后<<<<- 回到 [ 处, 执行A[0] – -, 然后继续A[1]+=7, A[2]+=10…
所以, 最后A[1] = 70, A[2] = 100…
这一步其实是为了后面的打印做准备, 因为如果纯粹用+ – 来控制ASCII 输出, 你会需要几十上百个+-. 因为ASCII 是从0-255… 因此, 这里选取了英文字母和标点的常用区间, 去了一个折中数字做起点…
后面第二部分就没什么悬念了. >++. 是让A[1] = 72, 并且打印到Console. 也就是H 啦… 后面继续, 直到 Hello World! 全部打印完全.
试想, 如果没有反解释器, 这会是一项多么消耗战斗力的工作 lol 但是! 意义就在于此, 哈哈!
So, good luck lol 解释器/懒人反解释器改天放出 lol
——————————- 下载分割线 ———————————-
下载后请杀毒 =.= 以防万一…
BF 解释器语法: BrainF__k.exe SourceFileName.bf
最简单之BF 解释器: [Windows]
测试用之BF文件: [HelloWorld]
September 24th, 2009 at 10:55 am
爱好如此广泛?
September 24th, 2009 at 2:09 pm
我觉得brain fuck就好比grass-mud-horse(http://code.google.com/p/grass-mud-horse/)
是一类比较玩笑的语言,相对来说像APL/J(http://en.wikipedia.org/wiki/APL_(programming_language))这样的,虽然也很晦涩,却学术、严谨的多lol
September 24th, 2009 at 9:27 pm
To miznick, 偶然看到, 觉得比较有意思:D
TO syhan, 从名字就看出来了, BF 就是用来F**k Brain 的, 哈哈哈~ 就是好玩, 理论上可以把那8个符号用任意N个代替, 做密文… 就是写起来会及其痛苦lol
December 16th, 2009 at 9:54 pm
哈哈, 原来是这个意思lol