计算机语言BrainFuck的编译器,官方发布的版本(删减版)

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

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

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

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

#include <stdio.h>
int p,r;
char a[5000],f[5000],b,o,*s=f;
void itp(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]);break;
  case ',':a[p]=getchar();break;
  case '[':
   for(b=1,d=c;b&&*c;c++)b+=*c=='[',b-=*c==']';
   if(!b){
    c[-1]=0;
    while(a[p])itp(d);
    c[-1]=']';
    break;
   }
  }
 }
 r--;
}
main(int rc,char *rv[]){
 FILE *z=fopen(rv[1],"r");
 while((b=getc(z))>0)*s++=b;
 *s=0;
 itp(f);
}

这个是打印"Hello world"的代码:

+[-->-[>>+>-----<<]<--<---]>-.>>>+.>>..+++[.>]<<<<.+++.------.<<-.>>>>+.

猜你喜欢

转载自blog.csdn.net/yoga1976/article/details/82924466