#include #include 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; }