标题:
BF 科普 & BF 解释器的 JS 实现
[打印本页]
作者:
look_w
时间:
2019-3-11 20:09
标题:
BF 科普 & BF 解释器的 JS 实现
BF 在当下有什么应用场景呢?
我想,对一个吃瓜群众来说,了解了它,对写作 逼格 和 脑力 的提升是很有用的。BF 具有极简主义(搞设计的童鞋的不妨了解下下)和功能齐全(图灵完全)的特点,旨在为用户带来困惑和挑战,丰富劳动人民的业余生活。
8 种运算符及其操作
BF 作为一种极简的计算机语言,仅有8种运算符,分别为: < > + - , . [ ],其功能对照如下表所示:
指令 含义
< 指针减一(指针左移)
> 指针加一(指针右移)
+ 指针指向的字节的值加一(当前单元的数值+1)
- 指针指向的字节的值减一(当前单元的数值-1)
, 输入内容到指针指向的单元(输入一个字符,将其ASCII码保存到当前指针所指单元)
. 将指针指向的存储单元的内容作为字符输出(将ASCII码输出为字符)
[ 如果指针指向的存储单元为零,向后跳转到对应的 ] 指令处
] 如果指针指向的存储单元不为零,向前跳转到对应的 [ 指令处
BF基于一个简单的机器模型,除了八个指令,这个机器还包括:一个以字节为单位、被初始化为零的数组、一个指向该数组的指针(初始时指向数组的第一个字节)、以及用于输入输出的两个字节流。
对 BF 比较有意思的比拟可以是这样的:
如果把机器内存看成是一个无限长的“小火车”(类似于Array或List的数据结构),每个车厢(存储单元)里面的货物默认都是数字 0,列车上仅有一个列车员(数据指针);
<> 相当于列车员在车厢间进行移动,只有当列车员在某节车厢时,才能对车厢的货物进行操作;
+- 相当于列车员对当前所在车厢的货物进行增减;
, 相当于列车在装货,列车员将当前所在车厢的货物替换为货运站输入的单批次货物(一个字符的ASCII码);
. 会将当前车厢里的货物名称(单个字符)输出来;
[] 相当于列车员在满足条件的两节车厢间来回移动;
这里要注意的是,数组的每个单元都是一个字节大小;- 命令允许溢出,它可以用 255 个 + 命令来代替。例如,当某个存储单元的值为 255 时,其执行指令 + 的结果为 0。类似的, 0 执行指令 - 的结果为 255.
与通用语言的类比
据此,BF的运算符与通用语言的类比如下(以C语言为例):
BrainFuck C
< --ptr;
> ++ptr;
+ ++*ptr;
- --*ptr;
, *ptr = getchar();
. putchar(*ptr);
[ while (*ptr) {
] }
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0