65 lines
1.6 KiB
Java
65 lines
1.6 KiB
Java
package brainfuck.interpreter;
|
|
|
|
import java.io.UnsupportedEncodingException;
|
|
import java.util.Scanner;
|
|
|
|
/**
|
|
* Brainfuck interpreter.
|
|
*
|
|
* @author Sem van der Hoeven
|
|
*/
|
|
public class BfInterpreter {
|
|
|
|
private char[] code;
|
|
private byte[] memory;
|
|
private Scanner sc;
|
|
|
|
public final int MAX_SIZE = 65535;
|
|
|
|
public BfInterpreter(String code) throws Exception {
|
|
if (code == null) {
|
|
throw new Exception("The code cannot be null!");
|
|
}
|
|
|
|
this.sc = new Scanner(System.in);
|
|
this.code = code.toCharArray();
|
|
this.memory = new byte[MAX_SIZE];
|
|
}
|
|
|
|
public void interpret() {
|
|
int pointer = 0;
|
|
for (int i = 0; i < this.code.length; i++) {
|
|
switch (this.code[i]) {
|
|
case '+':
|
|
memory[pointer]++;
|
|
break;
|
|
case '-':
|
|
memory[pointer]--;
|
|
break;
|
|
case '>':
|
|
pointer++;
|
|
break;
|
|
case '<':
|
|
pointer--;
|
|
break;
|
|
case '.':
|
|
System.out.print(String.valueOf((char) memory[pointer]));
|
|
break;
|
|
case ',':
|
|
memory[pointer] = sc.next().trim().getBytes()[0];
|
|
break;
|
|
case '[': // als de memory[pointer] 0 is, spring naar de plek na de volgende ] ipv een vooruit
|
|
|
|
break;
|
|
case ']': // als de memory[pointer] niet 0 is, spring terug naar de plek voor de vorige [ ipv een vooruit
|
|
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
} |