Initial commit
This commit is contained in:
commit
7ed58a61b2
6
Makefile
Normal file
6
Makefile
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
SRC_Files=$(wildcard src/*.c)
|
||||||
|
CC=clang
|
||||||
|
CF=-Wall -g
|
||||||
|
|
||||||
|
install:
|
||||||
|
$(CC) $(CF) $(SRC_Files) -o brainfuck
|
1
examples/helloworld.bf
Normal file
1
examples/helloworld.bf
Normal file
@ -0,0 +1 @@
|
|||||||
|
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
|
57
src/main.c
Normal file
57
src/main.c
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
#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;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user