首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

BF 科普 & BF 解释器的 JS 实现

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) {
]     }
返回列表