From ff43a38c579871e2f313bf71f6115b21597d72b9 Mon Sep 17 00:00:00 2001 From: Sem van der Hoeven Date: Tue, 3 Dec 2019 09:01:18 +0100 Subject: [PATCH] added loops --- .../brainfuck/interpreter/BfInterpreter.java | 35 ++++++++++++++++--- src/main/java/brainfuck/interpreter/Main.java | 2 +- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/main/java/brainfuck/interpreter/BfInterpreter.java b/src/main/java/brainfuck/interpreter/BfInterpreter.java index c4e8112..5ddc875 100644 --- a/src/main/java/brainfuck/interpreter/BfInterpreter.java +++ b/src/main/java/brainfuck/interpreter/BfInterpreter.java @@ -14,7 +14,7 @@ public class BfInterpreter { private byte[] memory; private Scanner sc; - public final int MAX_SIZE = 65535; + public final int MAX_SIZE = 65535; // predefined max size for the array public BfInterpreter(String code) throws Exception { if (code == null) { @@ -29,6 +29,7 @@ public class BfInterpreter { public void interpret() { int pointer = 0; for (int i = 0; i < this.code.length; i++) { + // System.out.println("char is now " + this.code[i]); switch (this.code[i]) { case '+': memory[pointer]++; @@ -48,12 +49,36 @@ public class BfInterpreter { 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 + case '[': // als de memory[pointer] 0 is, spring naar de plek na de volgende ] ipv een + // vooruit + int endLoopPos = i; + // search for next ']' + while (code[endLoopPos] != ']') { + // keep incrementing until end of loop is found + endLoopPos++; + } + if (memory[pointer] == 0) { + i = endLoopPos + 1; + } else { + pointer++; + } break; + case ']': // als de memory[pointer] niet 0 is, spring terug naar de plek voor de vorige [ + // ipv een vooruit + int beginLoopPos = i; + // search for previous '[' + while (code[beginLoopPos] != '[') { + // keep decrementing until begin of loop is found + beginLoopPos--; + } + + if (memory[pointer] != 0) { + i = beginLoopPos + 1; + } else { + pointer++; + } + break; default: break; diff --git a/src/main/java/brainfuck/interpreter/Main.java b/src/main/java/brainfuck/interpreter/Main.java index ce00abd..88f9f35 100644 --- a/src/main/java/brainfuck/interpreter/Main.java +++ b/src/main/java/brainfuck/interpreter/Main.java @@ -8,7 +8,7 @@ import java.io.UnsupportedEncodingException; public class Main { public static void main(String[] args) { - String excl = "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>++++++++++++++++++++++++++++++++++++++++++++++++++++."; + String excl = "----[-->+++<]>-.--[->+++<]>..[--->+<]>---."; try { BfInterpreter interpreter = new BfInterpreter(excl);