含糖型 Brainfuck 解释器
断句有问题
其实标题应该是 《含糖型 Brainfuck | 的解释器》
不过因为不单单是个解释器还是个可视化和单步执行工具以及一个语法糖的实现
所以,嗯……标题就这样吧
相比原版 Brainfuck 添加了一个语法糖,用于输出字符串时的偷懒
(想想为了输出个 Hello World
需要重复 +
几百次吧)
格式:
[次数][操作符]
次数就是要重复后面操作的次数,正整数
操作符是 Brainfuck 的操作符,不过不包含 ,
.
[
]
因为这几个重复也没什么意思
其中 次数
后一个字符如果不是操作符就会被视为注释
不然注释里没法加数字挺别扭的
例子:
5+
等于 +++++
3-
等于 ---
2>
等于 >>
1<
等于 <
Github: https://github.com/iovxw/sweeter-brainfuck
在线演示: https://iovxw.net/sweeter-brainfuck/target/public/
界面还是一如既往的省流量,不过反正是玩具嘛,好歹还弄了个响应式呢
为了方便直接扔了个 iframe 在下面,拖动滑条可以调整单步执行延迟
这个解释器还有点不完善的地方,比如用户输入要提前输入好,解释的时候如果读不到输入不会阻塞等待输入而会直接读到 NaN
虽然解决起来不麻烦加个 chan
就行了,但是因为 ClojureScript 的 core.async
的 go
代码块的问题
东西会全被塞到一个函数里,实在难看,等我找到更优雅的写法再说吧
啊对了,因为 cells 是直接用 sorted-map
实现的,所以没有长度限制(无限长的纸带)
然后单个 cell 为 Number
,而不是 byte
,所以支持负数和 unicode 字符,以及不支持用 -
进行的溢出操作(毕竟都有糖了)