summaryrefslogtreecommitdiff
path: root/plugins/brainfuck.c
diff options
context:
space:
mode:
authorZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-11 15:51:21 +0000
committerZuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian>2026-01-11 15:51:21 +0000
commit348c64f97b133a7f346d242bb4658df3b5a99719 (patch)
treeba6a3fe8c8c4973e035d253b8fb50619286a47fc /plugins/brainfuck.c
parenta524ba47371503e0a42d395d015dcd83c15c0199 (diff)
Plugins time.
Diffstat (limited to 'plugins/brainfuck.c')
-rw-r--r--plugins/brainfuck.c44
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};