[C] Interprete de Brainfuck

Iniciado por mr.blood, Mayo 15, 2013, 04:00:05 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Mayo 15, 2013, 04:00:05 PM Ultima modificación: Febrero 08, 2014, 05:39:11 PM por Expermicid
Bueno, en un largo rato de aburrimiento he creado un interprete de Brainfuck. No se porque, pero me esta gustando este "lenguaje".

Código: c
#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)