Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* brainfuck compiler */
- /* By: Mostafa Abdelaziz */
- /* This software is FREE as in HELL */
- #include <stdio.h>
- #include <unistd.h>
- int main(int argc, char *argv[]) {
- FILE *src, *cfile;
- char c;
- char *gccvp[4];
- if (argc != 3)
- return 0;
- if (!(src = fopen(argv[1], "r")))
- return 0;
- if (!(cfile = fopen("/tmp/bftmp.c", "w"))) {
- fclose(src);
- return 0;
- }
- fputs("#include <stdio.h>\n", cfile);
- fputs("int main () {\n", cfile);
- fputs("char array[4096] = {0};\n", cfile);
- fputs("char *ptr = &array[2048];\n", cfile);
- while (fscanf(src, "%c", &c) != EOF) {
- switch (c) {
- case '>':
- fputs("++ptr;\n", cfile);
- break;
- case '<':
- fputs("--ptr;\n", cfile);
- break;
- case '+':
- fputs("++*ptr;\n", cfile);
- break;
- case '-':
- fputs("--*ptr;\n", cfile);
- break;
- case '.':
- fputs("putchar(*ptr);\n", cfile);
- break;
- case ',':
- fputs("*ptr=getchar();\n", cfile);
- break;
- case '[':
- fputs("while (*ptr) {\n", cfile);
- break;
- case ']':
- fputs("}\n", cfile);
- break;
- default:
- break;
- }
- }
- fputs("return 0;\n", cfile);
- fputs("}\n", cfile);
- fclose(src);
- fclose(cfile);
- execlp("gcc", "gcc", "-o", argv[2], "/tmp/bftmp.c", NULL);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement