diff options
| author | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-11 15:51:21 +0000 |
|---|---|---|
| committer | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-11 15:51:21 +0000 |
| commit | 348c64f97b133a7f346d242bb4658df3b5a99719 (patch) | |
| tree | ba6a3fe8c8c4973e035d253b8fb50619286a47fc /plugins/brainfuck.c | |
| parent | a524ba47371503e0a42d395d015dcd83c15c0199 (diff) | |
Plugins time.
Diffstat (limited to 'plugins/brainfuck.c')
| -rw-r--r-- | plugins/brainfuck.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/plugins/brainfuck.c b/plugins/brainfuck.c new file mode 100644 index 0000000..e800da7 --- /dev/null +++ b/plugins/brainfuck.c @@ -0,0 +1,44 @@ + +#include "zprep_plugin.h" + +void bf_transpile(const char *input_body, const ZApi *api) +{ + FILE *out = api->out; + fprintf(out, + "{\n static unsigned char tape[30000] = {0};\n unsigned char *ptr = tape;\n"); + const char *c = input_body; + while (*c) + { + switch (*c) + { + case '>': + fprintf(out, " ++ptr;\n"); + break; + case '<': + fprintf(out, " --ptr;\n"); + break; + case '+': + fprintf(out, " ++*ptr;\n"); + break; + case '-': + fprintf(out, " --*ptr;\n"); + break; + case '.': + fprintf(out, " putchar(*ptr);\n"); + break; + case ',': + fprintf(out, " *ptr = getchar();\n"); + break; + case '[': + fprintf(out, " while (*ptr) {\n"); + break; + case ']': + fprintf(out, " }\n"); + break; + } + c++; + } + fprintf(out, "}\n"); +} + +ZPlugin brainfuck_plugin = {.name = "brainfuck", .fn = bf_transpile}; |
