diff --git a/Server/src/main/java/net/simon987/server/assembly/Assembler.java b/Server/src/main/java/net/simon987/server/assembly/Assembler.java index 5b151b3..071804e 100755 --- a/Server/src/main/java/net/simon987/server/assembly/Assembler.java +++ b/Server/src/main/java/net/simon987/server/assembly/Assembler.java @@ -9,6 +9,8 @@ import java.io.DataOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.HashMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * Top-level class for assembly operations. @@ -48,11 +50,9 @@ public class Assembler { * @return The line without its label part */ private static String removeLabel(String line) { - if (line.indexOf(':') != -1) { - return line.substring(line.indexOf(':') + 1); - } else { - return line; - } + + return line.replaceAll("\\b\\w*\\b:", ""); + } /** @@ -94,10 +94,11 @@ public class Assembler { line = removeComment(line); //Check for labels - if (line.indexOf(':') != -1) { + Pattern pattern = Pattern.compile("\\b\\w*\\b:"); + Matcher matcher = pattern.matcher(line); - line = line.substring(0, line.indexOf(':')); - String label = line.trim(); + if (matcher.find()) { + String label = matcher.group(0).substring(0, matcher.group(0).length() - 1); LogManager.LOGGER.fine("DEBUG: Label " + label + " @ " + (result.origin + currentOffset)); result.labels.put(label, (char) (result.origin + currentOffset)); @@ -134,7 +135,9 @@ public class Assembler { try { - String[] values = line.substring(2, line.length()).split(","); + + //Special thanks to https://stackoverflow.com/questions/1757065/ + String[] values = line.substring(2, line.length()).split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)", -1); for (String value : values) { diff --git a/Server/src/main/java/net/simon987/server/assembly/Instruction.java b/Server/src/main/java/net/simon987/server/assembly/Instruction.java index e791987..65f78e1 100755 --- a/Server/src/main/java/net/simon987/server/assembly/Instruction.java +++ b/Server/src/main/java/net/simon987/server/assembly/Instruction.java @@ -120,8 +120,8 @@ public abstract class Instruction { * Whether or not the instruction is valid without any * operands */ - private static boolean noOperandsValid() { - return true; + public boolean noOperandsValid() { + return false; } String getMnemonic() { diff --git a/Server/src/main/java/net/simon987/server/assembly/instruction/BrkInstruction.java b/Server/src/main/java/net/simon987/server/assembly/instruction/BrkInstruction.java index ba713c5..cf2e92f 100755 --- a/Server/src/main/java/net/simon987/server/assembly/instruction/BrkInstruction.java +++ b/Server/src/main/java/net/simon987/server/assembly/instruction/BrkInstruction.java @@ -20,4 +20,8 @@ public class BrkInstruction extends Instruction { return status; } + + public boolean noOperandsValid() { + return true; + } }