From 7ed58a61b24f3977eec97217f2539081f6e06fd8 Mon Sep 17 00:00:00 2001 From: Random936 Date: Sun, 1 Dec 2024 15:54:04 -0800 Subject: [PATCH] Initial commit --- Makefile | 6 +++++ brainfuck | Bin 0 -> 13096 bytes examples/helloworld.bf | 1 + rules.txt | 3 +++ src/main.c | 57 +++++++++++++++++++++++++++++++++++++++++ test.bf | 1 + 6 files changed, 68 insertions(+) create mode 100644 Makefile create mode 100644 brainfuck create mode 100644 examples/helloworld.bf create mode 100644 rules.txt create mode 100644 src/main.c create mode 100644 test.bf diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..0542048 --- /dev/null +++ b/Makefile @@ -0,0 +1,6 @@ +SRC_Files=$(wildcard src/*.c) +CC=clang +CF=-Wall -g + +install: + $(CC) $(CF) $(SRC_Files) -o brainfuck diff --git a/brainfuck b/brainfuck new file mode 100644 index 0000000000000000000000000000000000000000..30e98d0b0c29e0e336e4bb10e7772469d52ab893 GIT binary patch literal 13096 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 Y#Rz{v9QqSAAsQS(4umklBpR0i030Z8ng9R* literal 0 HcmV?d00001 diff --git a/examples/helloworld.bf b/examples/helloworld.bf new file mode 100644 index 0000000..265e751 --- /dev/null +++ b/examples/helloworld.bf @@ -0,0 +1 @@ +++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>. diff --git a/rules.txt b/rules.txt new file mode 100644 index 0000000..34a6af6 --- /dev/null +++ b/rules.txt @@ -0,0 +1,3 @@ +INST = + | - | < | > | . | , | LOOP +LOOP = [INST] + diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..43aa256 --- /dev/null +++ b/src/main.c @@ -0,0 +1,57 @@ +#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; +} diff --git a/test.bf b/test.bf new file mode 100644 index 0000000..f36f02a --- /dev/null +++ b/test.bf @@ -0,0 +1 @@ +,.