1. 程式人生 > >計算機語言BrainFuck的編譯器,官方釋出的版本(刪減版)

計算機語言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"的程式碼:

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