Skip to content

Instantly share code, notes, and snippets.

@maxcountryman
Created January 29, 2012 17:20
Show Gist options
  • Save maxcountryman/1699708 to your computer and use it in GitHub Desktop.
Save maxcountryman/1699708 to your computer and use it in GitHub Desktop.
A simple brainfuck interpreter in C
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// initialize the tape with 30,000 zeroes
unsigned char tape[30000] = {0};
// set the pointer to point at the left-most cell of the tape
unsigned char* ptr = tape;
void interpret(char* input) {
char current_char;
size_t i;
size_t loop;
for (i = 0; input[i] != 0; i++) {
current_char = input[i];
if (current_char == '>') {
++ptr;
} else if (current_char == '<') {
--ptr;
} else if (current_char == '+') {
++*ptr;
} else if (current_char == '-') {
--*ptr;
} else if (current_char == '.' ) {
putchar(*ptr);
} else if (current_char == ',') {
*ptr = getchar();
} else if (current_char == '[') {
continue;
} else if (current_char == ']' && *ptr) {
loop = 1;
while (loop > 0) {
current_char = input[--i];
if (current_char == '[') {
loop--;
} else if (current_char == ']') {
loop++;
}
}
}
}
}
int main() {
interpret(",[.[-],]"); // outputs input
return 0;
}
@D0tty
Copy link

D0tty commented Feb 14, 2019

Hi @maxcountryman, just letting you know I used your code for personal work and did a little update of it, here is my gist.
Thanks for this :)

@agoldstein03
Copy link

agoldstein03 commented Apr 15, 2020

@elPytel
Copy link

elPytel commented Mar 18, 2021

Nice!

I'll borrow your code to create my own repository (I didn't figure out how to convert the gist => github repository, I'm still new here). Here is the link.

@VilgotanL
Copy link

[ should branch http://www.muppetlabs.com/~breadbox/bf/

Indeed.

@Ramanuj-Sarkar
Copy link

Did you use the tests on http://www.brainfuck.org/tests.b ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment