当Python大刀砍向Brainfuck

以前学编译的都喜欢用Lisp练手,现在貌似改Brainfuck(参见:维基Wiki)了。

Brainfuck更简单(就八个命令),而且还是Turing完备的。Brainfuck简直就是对Turing机的直接模拟:一条初始为零的带子、一个指针。不过,Turing机的纸带似乎具有代码和数据双重功能,而Brainfuck更像是把纸带当容器)。

Brainfuck的语法如下:

指令动作
>右移一格
<左移一格
+指针指向的字节的值加一
-指针指向的字节的值减一
.输出指针指向的单元内容(ASCII码)
,输入内容到指针指向的单元(ASCII码)
[向後跳转到对应的]
]向前跳转到对应的[指令的次一指令处,如果指针指向的字节非零

前六条都还好理解,最后两条就不那么直观了(Turing机里是没有直接对应的)。

 

pc就是指针(program counter)。

纸带:

 

这就体现出高阶语言的好处了:不用考虑分配内存,近乎无限的纸带。

 

test.bf 的内容:

 

Wiki 上有解释:

 

P.S. 本文代码源自一篇介绍如何用PyPy写解释器(已被墙)的文章,不过前半部分与PyPy没什么关系。

P.P.S 还好一般不译语言的名字,不然Brainfuck是该译成“脑残”好呢,还是“脑袋被驴踢了”

P.P.P.S 本着“Python能干的事情Ruby也能做”的理念,我用Ruby改写了一遍:

 

P.P.P.P.S 有人写过一个很丑但很短的Ruby版Brainfuck解释器。真的很丑-_-!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值