stuff
This commit is contained in:
65
src/main/java/brainfuck/interpreter/BfInterpreter.java
Normal file
65
src/main/java/brainfuck/interpreter/BfInterpreter.java
Normal file
@@ -0,0 +1,65 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user