計算機語言BrainFuck的編譯器,官方釋出的版本(刪減版)
阿新 • • 發佈:2018-12-13
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"的程式碼:
+[-->-[>>+>-----<<]<--<---]>-.>>>+.>>..+++[.>]<<<<.+++.------.<<-.>>>>+.