C语言实现的轻量级brainfuck语言解释器
2013-01-20 23:47
936 查看
知道brainfuck的时候是在大一下学期的时候了,一直觉得这语言好神奇,但是觉得实现的功能应该有限。直到最近想要做一个小的解释器才开始深入了解和研究。
Brainfuck语言,因为其中带有脏话,所以一般写作brainf*ck或者brainf***。【不过话说whitespace语言的本土化“草泥马”语言写出来的代码才是满屏幕的哔——】好吧继续来说brainfuck。Brainfuck语言是一个完全图灵机,它的所有操作都是基于一个足够大的被初始化为0的字符数组和一个初始化为指向第一个数组首地址的指针,具象化起来就是一个可以计算的纸带。操作符一共有八种符号:
< 指针左移一位
> 指针右移一位
+ 指针指向位置值加一
- 指针指向位置值减一
, 从标准输入(即键盘)读入一个字符
. 向标准输出(即屏幕)输出一个字符
[ 循环段代码开始标识(循环条件是指针当前指向位置的值不为0)
] 循环段代码结束标识
因此brainfuck语言可以完成任何程序员希望它完成的任务。
因为语法比较简单,所以解释器写起来也比较轻松,代码数量不是太多。其中处理了三种错误,分别是:
指针越界
指针值超出字符范围[0, 255)
循环不闭合
具体工程已托管于GitHub(点击链接直接访问)。
由于GitHub近期被XX,需梯子访问,故代码亦可见于oschina代码分享部分http://www.oschina.net/code/snippet_812451_17541
Brainfuck语言,因为其中带有脏话,所以一般写作brainf*ck或者brainf***。【不过话说whitespace语言的本土化“草泥马”语言写出来的代码才是满屏幕的哔——】好吧继续来说brainfuck。Brainfuck语言是一个完全图灵机,它的所有操作都是基于一个足够大的被初始化为0的字符数组和一个初始化为指向第一个数组首地址的指针,具象化起来就是一个可以计算的纸带。操作符一共有八种符号:
< 指针左移一位
> 指针右移一位
+ 指针指向位置值加一
- 指针指向位置值减一
, 从标准输入(即键盘)读入一个字符
. 向标准输出(即屏幕)输出一个字符
[ 循环段代码开始标识(循环条件是指针当前指向位置的值不为0)
] 循环段代码结束标识
因此brainfuck语言可以完成任何程序员希望它完成的任务。
因为语法比较简单,所以解释器写起来也比较轻松,代码数量不是太多。其中处理了三种错误,分别是:
指针越界
指针值超出字符范围[0, 255)
循环不闭合
具体工程已托管于GitHub(点击链接直接访问)。
由于GitHub近期被XX,需梯子访问,故代码亦可见于oschina代码分享部分http://www.oschina.net/code/snippet_812451_17541
相关文章推荐
- [置顶] BrainFuck 解释器(java语言实现)
- BrainFuck 解释器(C语言实现)
- BrainFuck语言一个58行的解释器
- C语言解释器的实现--序(零)
- 自定义语言的实现——解释器模式(四)
- 自定义语言的实现——解释器模式(四)
- PAT Basic 1059. C语言竞赛(20)(C语言实现)
- BrainFuck语言的解释器以及中文录入
- 写一个brainfuck语言的解释器
- 自定义语言的实现——解释器模式
- 自定义语言的实现——解释器模式(二)
- 自定义语言的实现——解释器模式(五)
- 实现一个SLR(1)的动态语言解释器
- 快速排序的Java语言与C语言实现
- 自定义语言的实现——解释器模式
- 语言中文[置顶] BrainFuck语言的解释器以及中文录入
- tbox的项目:vm86(汇编语言虚拟机),tbox(类似dlib),gbox(c语言实现的多平台图形库)
- 自定义语言的实现——解释器模式(五)
- Sublime Text+MinGW实现轻量级C语言开发环境
- java语言,c语言,五子棋的实现(键盘输入坐标)。