ITKeyword,专注技术干货聚合推荐

注册 | 登录

C指针原理(78)-递归(2)

u010255642 分享于

2020腾讯云10周年活动,优惠非常大!(领取2860元代金券),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1040

2020阿里云最低价产品入口,含代金券(新老用户有优惠),
地址https://www.aliyun.com/minisite/goods

推荐:C指针原理(80)-递归(4)

BF解释器分析: 1、main函数以只读方式打开BF语言的源代码文件,然后,将BF源文件按字节逐个拷入数组f中,并在最后加上字符串的结束标志0,最后,以数组f为参数,

、rainfuck解释器C语言实现

Brainfuck,是一种极小化的计算机语言,它是由Urban Müller在1993年创建的。一种简单的、可以用最小的编译器来实现的、符合图灵完全思想的编程语言。这种语言由八种运算符构成,brainfuck的计算方式如此与众不同,基于一个简单的机器模型,除了指令,这个机器还包括:一个以字节为单位、被初始化为零的数组、一个指向该数组的指针(初始时指向数组的第一个字节)、以及用于输入输出的两个字节流。

麦好的AI乐园博客所有内容是原创,如果转载请注明来源

http://blog.csdn.net/myhaspl/


下面是这八种状态的描述,其中每个状态由一个字符标识:

字符

含义

>

指针加一

<

指针减一

+

指针指向的字节的值加一

-

指针指向的字节的值减一

.

输出指针指向的单元内容(ASCII码)

,

输入内容到指针指向的单元(ASCII码)

[

如果指针指向的单元值为零,向后跳转到对应的]指令的次一指令处

]

如果指针指向的单元值不为零,向前跳转到对应的[指令的次一指令处

可在这个页面找到这个语言的相关内容:http://www.muppetlabs.com/~breadbox/bf/,该网址提供了一个不错的简单高效的brainfuck解释器源代码,代码中涉及数组、指针等C指针的应用。

首先,完成这个解释器,该程序对所需要用到的变量作了如下声明:

1、数组变量

char a[5000], f[5000]

其中a

 

#include <stdio.h>

 

int  p, r, q;

char a[5000], f[5000], b, o, *s=f;

 

void interpret(char *c)

{

char *d; int tmp;

 

r++;

while( *c ) {

      //if(strchr("<>+-,.[]\n",*c))printf("%c",*c);

      switch(o=1,*c++) {

      case '<': p--;        break;

推荐:关于递归和尾递归的原理

基础很重要,这是永远不变的真理。 package sunfa;public class DiGui { public static void main(String[] args) { Stack<Integer> stack = new Sta

      case '>': p++;        break;

      case '+': a[p]++;     break;

      case '-': a[p]--;     break;

      case '.': putchar(a[p]); fflush(stdout); break;

      case ',': 

    tmp=getchar();

    if (tmp == EOF) a[p]=0; 

    else a[p]=tmp;

    break;

      case '[':

for( b=1,d=c; b && *c; c++ )

b+=*c=='[', b-=*c==']';

if(!b) {

c[-1]=0;

while( a[p] )

interpret(d);

c[-1]=']';

break;

}

case ']':

puts("UNBALANCED BRACKETS"), exit(0);

 

default: o=0;

}

if( p<0 || p>100)

puts("RANGE ERROR"), exit(0);

}

r--;

}

 

int main(int argc,char *argv[])

{

FILE *z;

 

q=argc;

 

if((z=fopen(argv[1],"r"))) {

while( (b=getc(z))>0 )

*s++=b;

*s=0;

interpret(f);

}

return 0;

}

推荐:C指针原理(77)-递归(1)

一、递归 递归在计算机科学中,是指在函数的定义中使用函数自身的方法,递归是进行循环的一种技巧(在类lisp等函数语言中它也是实现循环的主要甚至唯一途径,比

、rainfuck解释器C语言实现 Brainfuck,是一种极小化的计算机语言,它是由Urban Müller在1993年创建的。一种简单的、可以用最小的编译器来实现的、符合图灵完全思想的编程语言。这种语言由八种

相关阅读排行


相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。