84 lines
1.9 KiB
C
84 lines
1.9 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#define SIZE 3000000
|
|
|
|
void run(char *input);
|
|
void printList();
|
|
|
|
char *cinta;
|
|
int main(){
|
|
cinta = (char*)malloc(SIZE);
|
|
char fileName[50];
|
|
printf("Introduce el nombre del archivo: ");
|
|
scanf("%s", fileName);
|
|
char *input = (char*)malloc(sizeof(char));
|
|
FILE *file;
|
|
file = fopen(fileName, "r");
|
|
int i=0;
|
|
while(!feof(file)){
|
|
input[i++] = fgetc(file);
|
|
input = realloc(input, strlen(input) + 1);
|
|
}
|
|
fclose(file);
|
|
run(input);
|
|
printf("\n");
|
|
return 0;
|
|
}
|
|
|
|
void run(char *input){
|
|
int loopDepth = 0;
|
|
for (int i=0; i<strlen(input)-1; i++){
|
|
char c = input[i];
|
|
switch(c){
|
|
case '>':
|
|
cinta++;
|
|
break;
|
|
case '<':
|
|
cinta--;
|
|
break;
|
|
case '+':
|
|
++*cinta;
|
|
break;
|
|
case '-':
|
|
--*cinta;
|
|
break;
|
|
case '.':
|
|
putchar(*cinta);
|
|
break;
|
|
case ',':
|
|
getchar();
|
|
*cinta = getchar();
|
|
case '[':
|
|
if (*cinta == 0){
|
|
int depth = loopDepth;
|
|
depth++;
|
|
while(depth > loopDepth){
|
|
i++;
|
|
c = input[i];
|
|
if (c == '[')
|
|
depth++;
|
|
else if(c == ']')
|
|
depth--;
|
|
}
|
|
}
|
|
break;
|
|
case ']':
|
|
if (*cinta){
|
|
int depth = loopDepth;
|
|
depth++;
|
|
while(depth > loopDepth){
|
|
i--;
|
|
c = input[i];
|
|
if (c == ']')
|
|
depth++;
|
|
else if(c == '[')
|
|
depth--;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|