今天偶然看到一种编程语言竟然叫BrainFuck,大概查找了一下它的资料:
Brainf*ck,是一种极小化的计算机语言,它是由Urban Müller在1993年创建的。由于fuck在英语中是脏话,这种语言有时被称为brainf*ck或brainf***,甚至被简称为BF。Müller的目标是建立一种简单的、可以用最小的编译器来实现的、符合Turing complete思想的编程语言。这种语言由八种状态构成,为Amiga机器编写的编译器(第二版) (http://wuarchive.wustl.edu/pub/aminet/dev/lang/brainfuck-2.lha)只有240个字节大小!
就象它的名字所暗示的,brainfuck程序很难读懂。尽管如此,brainfuck图灵机一样可以完成任何计算任务。虽然brainfuck的计算方式如此与众不同,但它确实能够正确运行。
这种语言基于一个简单的机器模型,除了指令,这个机器还包括:一个以字节为单位、被初始化为零的数组、一个指向该数组的指针(初始时指向数组的第一个字节)、以及用于输入输出的两个字节流。
目前的我的理解就是一个线性的表,有一个位置指针,然后对当前当前指向的位置进行加或减来得到需要的结果然后再用相应的方法进行输入输出。它总共有8个指令:
>指针加一;
<指针减一;
+当前位置的值加一;
-当前位置的值减一;
.将当前位置的内容作为ASCII码输出;
,输入一个ASCII码到当前位置;
[当指向单元为零时,向前跳转到对应的];
]当指向单元不为零时,向后跳转到对应的[;
这个语言还是刚接触,看懂了hello world,但是写不了复杂的程序。
hello wolrd:
++++++++++[>+++++++>++++++++++>+++>+<<<<-] >++.>+.+++++++..+++.>++.<<+++++++++++++++. >.+++.------.--------.>+.>.
这程序意思就是使用++++++++++[]构造了一个循环,类似for(int i = 0; i <10; i++)的,然后把这几个单元里加啊减啊,得到相应的ASCII码值,然后输出,这个示例程序为什么用了四个单元来回加,是否会最简单,我还不清楚。
这个东西真的很BrainF**K~不过挺有意思的~
land google home boy site boat deliver right speed water
汗~~代码有被转的不像样了,
正确代码见:http://www.kongove.cn/blog/?p=148
我用你的解析器是过了,代码没问题。
我已经试过了,是这个留言窗口把我程序里的’-‘转换成全角‘-’了
我用你的解析器试过了,可以正常输出。
++++++++++[>+++++++>+++>+++++++++++++.>++.>++++++++.+++.+++++++.—————–.++++++++++++++++++++.———-.++++++.
to wangcong:
嗯,查资料的时候那些千奇百怪的包括你说的几种都看到了,不过感觉BF还算比较合理的~
to kongove:
我可以负责任的告诉你,你的程序是错的!因为[]都不配对,你的循环,循环到什么地方去了呢?
你贴的程序输出的是 Hello World 而不是 hello world
看看我的程序(声明:输出内容不针对你!!)
++++++++++[>+++++++>+++>+++++++++++++.>++.>++++++++.+++.+++++++.
—————–.++++++++++++++++++++.
———-.++++++.
以前看到过,跳过去,一样SKIP……
还有更猛的呢!!
Malbolge是以丑陋为目标而设计的编程语言!
Whitespace是*只*用n,’ ‘, t三种空白符号作为符号的编程语言!!
BTW,再次感叹一下:中国人的想象力都tmd哪里去了???