Browse Source

strting parsing the argument.

Wilfried Klaas 6 years ago
parent
commit
82d4f2c27e
68 changed files with 250 additions and 68 deletions
  1. 2 1
      SimpleServo.tps
  2. 18 4
      src/main/java/de/mcs/tools/sps/SPSAssembler.java
  3. 4 0
      src/main/java/de/mcs/tools/sps/exceptions/SyntaxError.java
  4. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/ADC.java
  5. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/ADD.java
  6. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/AEQB.java
  7. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/AGTB.java
  8. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/ALTB.java
  9. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/AND.java
  10. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/ARC.java
  11. 16 1
      src/main/java/de/mcs/tools/sps/mnemonic/AbstractMnemonic.java
  12. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/BAAD.java
  13. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/BARC.java
  14. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/BPWM.java
  15. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/BSET.java
  16. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/BSRV.java
  17. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/BSUBA.java
  18. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/BYTE.java
  19. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/CALL.java
  20. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/CASB.java
  21. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/CSET.java
  22. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/DEC.java
  23. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/DEQ0.java
  24. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/DEQ1.java
  25. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/DFSB.java
  26. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/DIN.java
  27. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/DIV.java
  28. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/DOUT.java
  29. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/DSET.java
  30. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/ESET.java
  31. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/FSET.java
  32. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/INC.java
  33. 18 1
      src/main/java/de/mcs/tools/sps/mnemonic/JMP.java
  34. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/LOOPC.java
  35. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/LOOPD.java
  36. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/MOD.java
  37. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/MUL.java
  38. 6 0
      src/main/java/de/mcs/tools/sps/mnemonic/Mnemonic.java
  39. 3 0
      src/main/java/de/mcs/tools/sps/mnemonic/MnemonicFactory.java
  40. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/NOP.java
  41. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/NOT.java
  42. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/OR.java
  43. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/PAGE.java
  44. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/PEND.java
  45. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/POP.java
  46. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/PORT.java
  47. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/PRG0.java
  48. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/PRG1.java
  49. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/PUSH.java
  50. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/PWM.java
  51. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/REST.java
  52. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/RET.java
  53. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/RJMP.java
  54. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/SEL0.java
  55. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/SEL1.java
  56. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/SET.java
  57. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/SETB.java
  58. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/SETC.java
  59. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/SETD.java
  60. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/SETE.java
  61. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/SETF.java
  62. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/SKIP0.java
  63. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/SRV.java
  64. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/SUB.java
  65. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/SWAP.java
  66. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/TONE.java
  67. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/WAIT.java
  68. 3 1
      src/main/java/de/mcs/tools/sps/mnemonic/XOR.java

+ 2 - 1
SimpleServo.tps

@@ -8,4 +8,5 @@ block Kommentar
 PORT 0x0F
 WAIT 200  ; inline Kommentar
 NOP
-RJMP :loop
+RJMP :loop
+JMP 0x08 ;this will cause an syntax error

+ 18 - 4
src/main/java/de/mcs/tools/sps/SPSAssembler.java

@@ -36,6 +36,7 @@ import java.util.Map.Entry;
 import org.apache.commons.lang3.StringUtils;
 
 import de.mcs.tools.sps.exceptions.SyntaxError;
+import de.mcs.tools.sps.mnemonic.JMP;
 import de.mcs.tools.sps.mnemonic.Mnemonic;
 import de.mcs.tools.sps.mnemonic.MnemonicFactory;
 
@@ -83,10 +84,23 @@ public class SPSAssembler {
     System.out.printf("destination file: %s \r\n", destination.getName());
     System.out.println();
 
-    List<String> sourceFile = Files.readAllLines(source.toPath(), Charset.forName("UTF-8"));
-    for (String line : sourceFile) {
-      srcLineNumber++;
-      parseLine(line);
+    try {
+      List<String> sourceFile = Files.readAllLines(source.toPath(), Charset.forName("UTF-8"));
+      for (String line : sourceFile) {
+        srcLineNumber++;
+        parseLine(line);
+      }
+
+    } catch (SyntaxError e) {
+      System.err.println(e.getMessage());
+      System.exit(-1);
+    }
+    System.out.println("parsing line numbers");
+    for (Iterator<Mnemonic> iterator = mnemonics.iterator(); iterator.hasNext();) {
+      Mnemonic mnemonic = iterator.next();
+      if (mnemonic instanceof JMP) {
+
+      }
     }
 
     System.out.println("Mnemonics");

+ 4 - 0
src/main/java/de/mcs/tools/sps/exceptions/SyntaxError.java

@@ -31,4 +31,8 @@ public class SyntaxError extends Exception {
     super(message);
   }
 
+  public SyntaxError(int lineNumber, String message) {
+    super(String.format("Syntax error in line %d. %s", lineNumber, message));
+  }
+
 }

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/ADC.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class ADC extends AbstractMnemonic implements Mnemonic {
 
-  public ADC(String line) {
+  public ADC(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/ADD.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class ADD extends AbstractMnemonic implements Mnemonic {
 
-  public ADD(String line) {
+  public ADD(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/AEQB.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class AEQB extends AbstractMnemonic implements Mnemonic {
 
-  public AEQB(String line) {
+  public AEQB(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/AGTB.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class AGTB extends AbstractMnemonic implements Mnemonic {
 
-  public AGTB(String line) {
+  public AGTB(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/ALTB.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class ALTB extends AbstractMnemonic implements Mnemonic {
 
-  public ALTB(String line) {
+  public ALTB(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/AND.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class AND extends AbstractMnemonic implements Mnemonic {
 
-  public AND(String line) {
+  public AND(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/ARC.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class ARC extends AbstractMnemonic implements Mnemonic {
 
-  public ARC(String line) {
+  public ARC(String line) throws SyntaxError {
     super(line);
   }
 

+ 16 - 1
src/main/java/de/mcs/tools/sps/mnemonic/AbstractMnemonic.java

@@ -23,6 +23,8 @@ package de.mcs.tools.sps.mnemonic;
 
 import org.apache.commons.lang3.StringUtils;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
@@ -43,7 +45,7 @@ public abstract class AbstractMnemonic implements Mnemonic {
     return srcLine.toUpperCase();
   }
 
-  AbstractMnemonic(String line) {
+  AbstractMnemonic(String line) throws SyntaxError {
     this.srcLine = line.trim();
     this.name = srcLine;
     if (srcLine.indexOf(" ") >= 0) {
@@ -55,6 +57,10 @@ public abstract class AbstractMnemonic implements Mnemonic {
     }
   }
 
+  @Override
+  public void checkArgument() throws SyntaxError {
+  };
+
   @Override
   public String toString() {
     return String.format("%s %s", name, StringUtils.isEmpty(argument) ? "" : argument);
@@ -83,8 +89,17 @@ public abstract class AbstractMnemonic implements Mnemonic {
     return false;
   }
 
+  public int getLineNumber() {
+    return lineNumber;
+  }
+
   @Override
   public void setLineNumber(int lineNumber) {
     this.lineNumber = lineNumber;
   }
+
+  @Override
+  public boolean hasArgument() {
+    return false;
+  }
 }

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/BAAD.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class BAAD extends AbstractMnemonic implements Mnemonic {
 
-  public BAAD(String line) {
+  public BAAD(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/BARC.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class BARC extends AbstractMnemonic implements Mnemonic {
 
-  public BARC(String line) {
+  public BARC(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/BPWM.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class BPWM extends AbstractMnemonic implements Mnemonic {
 
-  public BPWM(String line) {
+  public BPWM(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/BSET.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class BSET extends AbstractMnemonic implements Mnemonic {
 
-  public BSET(String line) {
+  public BSET(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/BSRV.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class BSRV extends AbstractMnemonic implements Mnemonic {
 
-  public BSRV(String line) {
+  public BSRV(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/BSUBA.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class BSUBA extends AbstractMnemonic implements Mnemonic {
 
-  public BSUBA(String line) {
+  public BSUBA(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/BYTE.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class BYTE extends AbstractMnemonic implements Mnemonic {
 
-  public BYTE(String line) {
+  public BYTE(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/CALL.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class CALL extends AbstractMnemonic implements Mnemonic {
 
-  public CALL(String line) {
+  public CALL(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/CASB.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class CASB extends AbstractMnemonic implements Mnemonic {
 
-  public CASB(String line) {
+  public CASB(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/CSET.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class CSET extends AbstractMnemonic implements Mnemonic {
 
-  public CSET(String line) {
+  public CSET(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/DEC.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class DEC extends AbstractMnemonic implements Mnemonic {
 
-  public DEC(String line) {
+  public DEC(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/DEQ0.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class DEQ0 extends AbstractMnemonic implements Mnemonic {
 
-  public DEQ0(String line) {
+  public DEQ0(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/DEQ1.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class DEQ1 extends AbstractMnemonic implements Mnemonic {
 
-  public DEQ1(String line) {
+  public DEQ1(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/DFSB.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class DFSB extends AbstractMnemonic implements Mnemonic {
 
-  public DFSB(String line) {
+  public DFSB(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/DIN.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class DIN extends AbstractMnemonic implements Mnemonic {
 
-  public DIN(String line) {
+  public DIN(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/DIV.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class DIV extends AbstractMnemonic implements Mnemonic {
 
-  public DIV(String line) {
+  public DIV(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/DOUT.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class DOUT extends AbstractMnemonic implements Mnemonic {
 
-  public DOUT(String line) {
+  public DOUT(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/DSET.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class DSET extends AbstractMnemonic implements Mnemonic {
 
-  public DSET(String line) {
+  public DSET(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/ESET.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class ESET extends AbstractMnemonic implements Mnemonic {
 
-  public ESET(String line) {
+  public ESET(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/FSET.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class FSET extends AbstractMnemonic implements Mnemonic {
 
-  public FSET(String line) {
+  public FSET(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/INC.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class INC extends AbstractMnemonic implements Mnemonic {
 
-  public INC(String line) {
+  public INC(String line) throws SyntaxError {
     super(line);
   }
 

+ 18 - 1
src/main/java/de/mcs/tools/sps/mnemonic/JMP.java

@@ -21,16 +21,28 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import org.apache.commons.lang3.StringUtils;
+
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class JMP extends AbstractMnemonic implements Mnemonic {
 
-  public JMP(String line) {
+  public JMP(String line) throws SyntaxError {
     super(line);
   }
 
+  @Override
+  public void checkArgument() throws SyntaxError {
+    String arg = getArgument();
+    if (StringUtils.isEmpty(arg)) {
+      throw new SyntaxError(getLineNumber(), "Missing argument. JMP should have an argument.");
+    }
+  }
+
   @Override
   public int getByte() {
     // TODO modifier x (0..15)
@@ -41,4 +53,9 @@ public class JMP extends AbstractMnemonic implements Mnemonic {
   public boolean isUsingPage() {
     return true;
   }
+
+  @Override
+  public boolean hasArgument() {
+    return true;
+  }
 }

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/LOOPC.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class LOOPC extends AbstractMnemonic implements Mnemonic {
 
-  public LOOPC(String line) {
+  public LOOPC(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/LOOPD.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class LOOPD extends AbstractMnemonic implements Mnemonic {
 
-  public LOOPD(String line) {
+  public LOOPD(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/MOD.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class MOD extends AbstractMnemonic implements Mnemonic {
 
-  public MOD(String line) {
+  public MOD(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/MUL.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class MUL extends AbstractMnemonic implements Mnemonic {
 
-  public MUL(String line) {
+  public MUL(String line) throws SyntaxError {
     super(line);
   }
 

+ 6 - 0
src/main/java/de/mcs/tools/sps/mnemonic/Mnemonic.java

@@ -1,5 +1,7 @@
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 public interface Mnemonic {
 
   String getArgument();
@@ -12,4 +14,8 @@ public interface Mnemonic {
 
   void setLineNumber(int lineNumber);
 
+  boolean hasArgument();
+
+  void checkArgument() throws SyntaxError;
+
 }

+ 3 - 0
src/main/java/de/mcs/tools/sps/mnemonic/MnemonicFactory.java

@@ -42,7 +42,10 @@ public class MnemonicFactory {
       Constructor<Mnemonic> constructor = mnemonicClass.getConstructor(String.class);
       Mnemonic newInstance = constructor.newInstance(line);
       newInstance.setLineNumber(lineNumber);
+      newInstance.checkArgument();
       return newInstance;
+    } catch (SyntaxError e) {
+      throw e;
     } catch (ClassNotFoundException e) {
       throw new SyntaxError(String.format("syntax error in line %d. Illegal Mnemonic %s", lineNumber, name));
     } catch (SecurityException e) {

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/NOP.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class NOP extends AbstractMnemonic implements Mnemonic {
 
-  public NOP(String line) {
+  public NOP(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/NOT.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class NOT extends AbstractMnemonic implements Mnemonic {
 
-  public NOT(String line) {
+  public NOT(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/OR.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class OR extends AbstractMnemonic implements Mnemonic {
 
-  public OR(String line) {
+  public OR(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/PAGE.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class PAGE extends AbstractMnemonic implements Mnemonic {
 
-  public PAGE(String line) {
+  public PAGE(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/PEND.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class PEND extends AbstractMnemonic implements Mnemonic {
 
-  public PEND(String line) {
+  public PEND(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/POP.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class POP extends AbstractMnemonic implements Mnemonic {
 
-  public POP(String line) {
+  public POP(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/PORT.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class PORT extends AbstractMnemonic implements Mnemonic {
 
-  public PORT(String line) {
+  public PORT(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/PRG0.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class PRG0 extends AbstractMnemonic implements Mnemonic {
 
-  public PRG0(String line) {
+  public PRG0(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/PRG1.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class PRG1 extends AbstractMnemonic implements Mnemonic {
 
-  public PRG1(String line) {
+  public PRG1(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/PUSH.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class PUSH extends AbstractMnemonic implements Mnemonic {
 
-  public PUSH(String line) {
+  public PUSH(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/PWM.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class PWM extends AbstractMnemonic implements Mnemonic {
 
-  public PWM(String line) {
+  public PWM(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/REST.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class REST extends AbstractMnemonic implements Mnemonic {
 
-  public REST(String line) {
+  public REST(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/RET.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class RET extends AbstractMnemonic implements Mnemonic {
 
-  public RET(String line) {
+  public RET(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/RJMP.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class RJMP extends AbstractMnemonic implements Mnemonic {
 
-  public RJMP(String line) {
+  public RJMP(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/SEL0.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class SEL0 extends AbstractMnemonic implements Mnemonic {
 
-  public SEL0(String line) {
+  public SEL0(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/SEL1.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class SEL1 extends AbstractMnemonic implements Mnemonic {
 
-  public SEL1(String line) {
+  public SEL1(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/SET.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class SET extends AbstractMnemonic implements Mnemonic {
 
-  public SET(String line) {
+  public SET(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/SETB.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class SETB extends AbstractMnemonic implements Mnemonic {
 
-  public SETB(String line) {
+  public SETB(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/SETC.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class SETC extends AbstractMnemonic implements Mnemonic {
 
-  public SETC(String line) {
+  public SETC(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/SETD.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class SETD extends AbstractMnemonic implements Mnemonic {
 
-  public SETD(String line) {
+  public SETD(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/SETE.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class SETE extends AbstractMnemonic implements Mnemonic {
 
-  public SETE(String line) {
+  public SETE(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/SETF.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class SETF extends AbstractMnemonic implements Mnemonic {
 
-  public SETF(String line) {
+  public SETF(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/SKIP0.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class SKIP0 extends AbstractMnemonic implements Mnemonic {
 
-  public SKIP0(String line) {
+  public SKIP0(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/SRV.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class SRV extends AbstractMnemonic implements Mnemonic {
 
-  public SRV(String line) {
+  public SRV(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/SUB.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class SUB extends AbstractMnemonic implements Mnemonic {
 
-  public SUB(String line) {
+  public SUB(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/SWAP.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class SWAP extends AbstractMnemonic implements Mnemonic {
 
-  public SWAP(String line) {
+  public SWAP(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/TONE.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class TONE extends AbstractMnemonic implements Mnemonic {
 
-  public TONE(String line) {
+  public TONE(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/WAIT.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class WAIT extends AbstractMnemonic implements Mnemonic {
 
-  public WAIT(String line) {
+  public WAIT(String line) throws SyntaxError {
     super(line);
   }
 

+ 3 - 1
src/main/java/de/mcs/tools/sps/mnemonic/XOR.java

@@ -21,13 +21,15 @@
  */
 package de.mcs.tools.sps.mnemonic;
 
+import de.mcs.tools.sps.exceptions.SyntaxError;
+
 /**
  * @author wklaa_000
  *
  */
 public class XOR extends AbstractMnemonic implements Mnemonic {
 
-  public XOR(String line) {
+  public XOR(String line) throws SyntaxError {
     super(line);
   }