设为首页 加入收藏

TOP

BrainFuck的编译器官方版发布
2014-04-06 17:40:36 来源: 作者: 【 】 浏览:129
Tags:BrainFuck 编译器 官方 发布

  Müller的目标是建立一种简单的、可以用最小的编译器来实现的、符合图灵完全思想的编程语言。这种语言由八种状态构成,为Amiga机器编写的编译器(第二版)只有240个字节大小。

  就象它的名字所暗示的,brainfuck程序很难读懂。尽管如此,brainfuck图灵机一样可以完成任何计算任务。虽然brainfuck的计算方式如此与众不同,但它确实能够正确运行。

  这种语言基于一个简单的机器模型,除了指令,这个机器还包括:一个以字节为单位、被初始化为零的数组、一个指向该数组的指针(初始时指向数组的第一个字节)、以及用于输入输出的两个字节流。

  这种 语言,是一种按照“Turing complete(完整图灵机)”思想设计的语言,它的主要设计思路是:用最小的概念实现一种“简单”的语言,BrainF**k 语言只有八种符号,所有的操作都由这八种符号的组合来完成。

  #include

  int p, r, q;

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

  void interpret(char *c)

  {

  char *d;

  r++;

  while( *c ) {

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

  case '<': p--; break;

  case '>': p++; break;

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

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

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

  case ',': a[p]=getchar();fflush(stdout); 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);

  case '#':

  if(q>2)

  printf("- - - - - - - - - -/n%*s/n",*a,a ,a ,a ,a ,a ,a ,a ,a ,a ,3*p+2,"^");

  break;

  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 ,"r")) {

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

  *s++=b;

  *s=0;

  interpret(f);

  }

  return 0;

  }

  解释器比较好理解,就是通过移动指针和对值的+-操作,但它的helloworld程序很不好懂。经过一个下午的时间,还是可以慢慢搞定的,之后的加减乘除也都不是问题了,大家都可以尝试一下这个语言。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇用dup2和dup产生一份拷贝 下一篇Fwrite和fprintf之间的区别

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: