brainfuck/src/main.c
2024-12-01 15:54:04 -08:00

58 lines
1.1 KiB
C

#include <stdio.h>
#include <stdlib.h>
unsigned char cells[1024];
unsigned char *ptr = cells;
void error(char c) {
fprintf(stderr, "ERROR: Unexpected token, %c\n", c);
exit(1);
}
char *parse(char *src) {
char *start = src;
while (*src != '\0') {
switch (*src) {
case 0: return NULL;
case '.': printf("%c", (*ptr)); break;
case ',': *ptr = getc(stdin); break;
case '+': (*ptr)++; break;
case '-': (*ptr)--; break;
case '>': ptr++; break;
case '<': ptr--; break;
case '[': src = parse(++src); break;
case ']':
if (*ptr == 0) return src;
src = start;
continue;
}
src++;
}
return NULL;
}
int main(int argc, char *argv[]) {
if (argc != 2) return 1;
FILE *file = fopen(argv[1], "r");
if (!file) return 1;
fseek(file, 0, SEEK_END);
size_t size = ftell(file);
rewind(file);
char *src = malloc(size);
fread(src, 1, size, file);
if (parse(src) != NULL) {
error('[');
}
return 0;
}