日誌2019-11-16 23:04
Brainfuck interpreter in C 用C寫BF直譯器作者:evanlin96069
int i,loop;
for (i=0;input[i]!=0;i++){
switch(input[i]){
case '>':
++ptr;
break;
case '<':
--ptr;
break;
case '+':
++*ptr;
break;
case '-':
--*ptr;
break;
case '.':
putchar(*ptr);
break;
case ',':
*ptr=getchar();
break;
case '[':
if(*ptr==0){
loop=1;
while(loop>0){
i++;
if(input[i]=='['){
loop++;
}else if(input[i]==']'){
loop--;
}
}
}
break;
case ']':
if(*ptr!=0){
loop=1;
while(loop>0){
i--;
if(input[i]=='['){
loop--;
}else if(input[i]==']'){
loop++;
}
}
}
break;
default:
break;
}
}
if(argc!=2){
printf("Usage: %s file.bf\n",argv[0]);
system("pause");
exit(2);
}
FILE *file=fopen(argv[1],"r");
if(file==NULL){
printf("Error: fopen failed\n");
system("pause");
exit(1);
}
fseek(file,0L,SEEK_END);
long file_len=ftell(file);
rewind(file);
char *file_buf=malloc(file_len*sizeof(char)+1);
file_buf[file_len]='\0';
fread(file_buf,file_len,sizeof(char),file);
fclose(file);
interpret(file_buf);
free(file_buf);
system("pause");
return 0;