Skip to content

Instantly share code, notes, and snippets.

@chris-olszewski
Created March 11, 2014 03:32
Show Gist options
  • Save chris-olszewski/9479001 to your computer and use it in GitHub Desktop.
Save chris-olszewski/9479001 to your computer and use it in GitHub Desktop.
Brainfuck interpreter
/*
* This is a small Brainfuck interpreter written in Java by Chris Olszewski
*/
import java.util.Scanner;
public class Brainfuck {
private short[] data;
private char[] code;
private int pointer, codeReader;
private String dirtyCode;
public Brainfuck(String code) {
dirtyCode = code;
}
public void run () {
init();
code = dirtyCode.replaceAll("[^\\[\\]+\\-.,<>]", "").toCharArray();
while (codeReader < code.length) {
switchBoard(code[codeReader]);
}
}
private void init () {
data = new short[300];
for (int i = 0; i < data.length; i++) {
data[i] = 0;
}
pointer = 0;
codeReader = 0;
}
private void switchBoard(char command) {
switch (command) {
case '+':
data[pointer]++;
break;
case '-':
data[pointer]--;
break;
case '>':
pointer++;
break;
case '<':
pointer--;
break;
case '.':
System.out.print((char)data[pointer]);
break;
case ',':
// Takes a char
Scanner input = new Scanner(System.console().readLine());
data[pointer] = input.nextShort();
input.close();
break;
case '[':
// continues on
break;
case ']':
if (data[pointer] != 0) {
// goes back to corresponding [
int required = 1;
while (required > 0) {
codeReader--;
if (code[codeReader] == ']') {
required++;
} else if (code[codeReader] == '[') {
required--;
}
}
}
break;
}
codeReader++;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment