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

[Brain F**k 参考]

——————————- 下载分割线 ———————————-

下载后请杀毒 =.= 以防万一…

BF 解释器语法: BrainF__k.exe  SourceFileName.bf

最简单之BF 解释器:  [Windows]

测试用之BF文件: [HelloWorld]

Tags: ,

4 Responses to “Brain F**k”

  1. miznick Says:

    爱好如此广泛?

  2. syhan Says:

    我觉得brain fuck就好比grass-mud-horse(http://code.google.com/p/grass-mud-horse/)
    是一类比较玩笑的语言,相对来说像APL/J(http://en.wikipedia.org/wiki/APL_(programming_language))这样的,虽然也很晦涩,却学术、严谨的多lol

  3. Alex Says:

    To miznick, 偶然看到, 觉得比较有意思:D
    TO syhan, 从名字就看出来了, BF 就是用来F**k Brain 的, 哈哈哈~ 就是好玩, 理论上可以把那8个符号用任意N个代替, 做密文… 就是写起来会及其痛苦lol

  4. Kitten Says:

    哈哈, 原来是这个意思lol

Leave a Reply