35行实现brainfuck解释器

这次用数组来模拟栈,实时进行跳转,还挺方便的,也不用检测匹配,如果匹配不恰当sp必然会检测到问题然后终止执行,比以前写的短了一大截。

brainfuck语法
纸带是用数组模拟的,指针从中间开始。

程序也是数组存储,没有开特别大的空间,可以适当更改。
hello.bf

#include <stdio.h>
char program[1024],paper[1024];
int  ptr=512,stack[1024],sp=0;
void run()
{
	int size=0,pc=0;
	for(;program[size]!='\0';++size);
	for(;pc<size;++pc)
	{
		if(!sp && program[pc]==']'){printf("sp is zero.\n");break;}
		switch(program[pc])
		{
			case '+':++paper[ptr];break;
			case '-':--paper[ptr];break;
			case '[':stack[sp]=pc;++sp;break;
			case ']':pc=paper[ptr]?stack[sp-1]:pc;sp-=(!paper[ptr]);break;
			case '>':++ptr;break;
			case '<':--ptr;break;
			case ',':scanf("%c",&paper[ptr]);break;
			case '.':printf("%c",paper[ptr]);break;
		}
		if(ptr>=1024 || ptr<0){printf("paper out of range.\n");break;}
		if(sp>=1024){printf("sp out of range.\n");break;}
	}
	printf("\n");
	return;
}
int main()
{
	scanf("%s",program);
	int i=0;
	for(;i<1024;++i)paper[i]='\0';
	run();
	return 0;
}

代码存在https://github.com/ValKmjolnir/Brainfuck-interpreter中,里面有好几个我以前摸鱼时写的bf解释器,各种屎。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值