04-22-2013, 02:22 PM
(This post was last modified: 04-22-2013, 03:10 PM by mad1231999.)
This is just a Brainfuck interpreter that I made in the programming language C. It's only 36 lines, and still very readable!
Source code:
or on Github.
How to compile:
On windows, install Mingw, and run this command:
and run the executabe from the commandline.
On Mac or Linux, run this:
and run the executable from the commandline.
Alternatively, you can just install Code::Blocks and compile with that too(should work on all platforms).
Source code:
Code:
#include <stdio.h>
const int MAX_DEPTH = 100, MEM_SIZE = 30000;
int main(int argc, char **argv)
{
if(argc <= 1) { printf("You have to specify a filename. Usage:\n<executable> <BF filename>\n"); return 0; }
char mem[MEM_SIZE]; // 30,000 is default with Brainfuck
int lindex[MAX_DEPTH];
int depth = 0, len = 0, ptr = 0;
FILE *f = fopen(argv[1], "r");
if(f == 0) { printf("Invalid filename: %s\n", argv[1]); return 0; }
int curr; while((curr = fgetc(f)) != EOF)
{
switch((char) curr)
{
case '+': ++(mem[ptr]); break;
case '-': --(mem[ptr]); break;
case '<': if(ptr > 0) --ptr; break;
case '>': if(ptr < MEM_SIZE) ++ptr; break;
case '.': putchar(mem[ptr]); break;
case ',': mem[ptr] = getchar();getchar(); break;
case '[': if(mem[ptr] == 0) {
int d = 0, i = ftell(f); char c = '\0';
while(!feof(f)) { ++i; c = fgetc(f); if(c == '[') { ++d; } else if(c == ']') { if(d == 0) { fseek(f, i, SEEK_SET); break; } else { --d; } } }
} else
lindex[depth++] = ftell(f);
break;
case ']': if(depth > 0 && mem[ptr] == 0) {} else { fseek(f, lindex[depth - 1], SEEK_SET); } break;
default: break;
} if(feof(f)) break;
}
fclose(f);
printf("\n");
}
How to compile:
On windows, install Mingw, and run this command:
Code:
mingw32-gcc Brainfuck.c -o BF.exe
On Mac or Linux, run this:
Code:
gcc Brainfuck.c -o BF
Alternatively, you can just install Code::Blocks and compile with that too(should work on all platforms).