Bueno, en un largo rato de aburrimiento he creado un interprete de Brainfuck. No se porque, pero me esta gustando este "lenguaje".
#include <stdio.h>
#define MAX 100
int array[MAX]={0}, i=0;
FILE *archivo;
void interprete(int instruccion);
int main(int argc, char *argv[])
{
int instruccion;
if(argc < 1)
{
return 1;
}
archivo=fopen(argv[1], "r");
while((instruccion=getc(archivo))!=EOF)
{
interprete(instruccion);
}
fclose(archivo);
putchar('\n');
return 0;
}
void interprete(int instruccion)
{
int pos, inst_bucle;
switch(instruccion)
{
case '.':
putchar(array[i]);
break;
case ',':
array[i]=getchar();
break;
case '>':
i++;
break;
case '<':
i--;
break;
case '+':
array[i]++;
break;
case '-':
array[i]--;
break;
case '[':
pos=ftell(archivo);
while(array[i]!=0)
{
fseek(archivo, pos, SEEK_SET);
inst_bucle=getc(archivo);
while(inst_bucle !=']' && inst_bucle != EOF)
{
interprete(inst_bucle);
inst_bucle=getc(archivo);
}
}
}
}
Sa1uDoS
Buen aporte lince, that works!
Agrega compatibilidad con más de un archivo y queda perfecto. 8)