X-Git-Url: http://svarog.pmf.uns.ac.rs/gitweb/?p=mjc2wsl.git;a=blobdiff_plain;f=src%2Fmjc2wsl.java;h=574adcc523ccf7177ffba95f4aa17f48b29e64f0;hp=521be052fffd8f23a56a4537793fc4a85227245d;hb=6501c29ac1dc5bee4958b26f347f579b8a22809e;hpb=dd4a6268bba13afdda7ccd40d82a5955ef56eb7d diff --git a/src/mjc2wsl.java b/src/mjc2wsl.java index 521be05..574adcc 100644 --- a/src/mjc2wsl.java +++ b/src/mjc2wsl.java @@ -12,6 +12,26 @@ import java.util.*; public class mjc2wsl{ public static String versionN = "0.1.2"; + public static final int M_ERR = 2, M_WAR = 1, M_DEB = 0; + + private int printLevel = M_ERR; + + private int[] messageCounters = new int[M_ERR+1]; + + private void message(String mes, int level){ + if (level>=printLevel) + System.out.println(mes); + messageCounters[level]++; + } + + private void printMessageCounters(){ + printMessageCounters(System.out); + } + + private void printMessageCounters(PrintStream out){ + out.println("total errors:"+messageCounters[M_ERR]+" warnings:"+messageCounters[M_WAR]); + } + /** Constant used for marking a regular comment from the original file */ public static final char C_REG = ' '; /** @@ -189,7 +209,7 @@ public class mjc2wsl{ private String getRelationFor(int opcode) throws Exception { switch (opcode) { case jeq: return "="; - case jne: return "#"; + case jne: return "<>"; case jlt: return "<"; case jle: return "<="; case jgt: return ">"; @@ -273,25 +293,48 @@ public class mjc2wsl{ prl(cmdToEStack("tempres")); break; } + case sub: { + prl(getTopTwo()); + prl("tempres := tempb - tempa;"); + prl(cmdToEStack("tempres")); + break; + } + case mul: { + prl(getTopTwo()); + prl("tempres := tempb * tempa;"); + prl(cmdToEStack("tempres")); + break; + } case div: { prl(getTopTwo()); - prl("tempres := tempb / tempa;"); + prl("IF tempa = 0 THEN ERROR(\"division by zero\") FI;"); + prl("tempres := tempb DIV tempa;"); + prl(cmdToEStack("tempres")); + break; + } + case rem: { + prl(getTopTwo()); + prl("IF tempa = 0 THEN ERROR(\"division by zero\") FI;"); + prl("tempres := tempb MOD tempa;"); prl(cmdToEStack("tempres")); break; } case enter: { prl(createComment("enter not fully procesed yet")); + message("enter not fully procesed yet", M_WAR); get(); get(); break; } case return_: { prl(createComment("return not fully procesed yet")); + message("return not fully procesed yet", M_WAR); break; } case exit: { prl(createComment("exit not fully procesed yet")); + message("exit not fully procesed yet", M_WAR); break; } @@ -309,6 +352,7 @@ public class mjc2wsl{ } default: prl(createComment("unknown op error: " + op, C_ERR)); + message("unknown op error: "+ op, M_ERR); break; } @@ -334,7 +378,10 @@ public class mjc2wsl{ + ", by Doni Pracner"); System.out.println("usage:\n\t {options} mjc2wsl filename [outfile]"); System.out.println("options:\n\t--screen print output to screen"); - System.out.println("\t-o --oc include original code in comments"); + System.out.println("\t-o --oc[+-] include original code in comments"); + System.out.println("\t-v verbose, print warning messages"); + System.out.println("\t-q don't print even the error messages"); + System.out.println("\t-d print detailed debug messages"); } public String makeDefaultOutName(String inname){ @@ -363,6 +410,12 @@ public class mjc2wsl{ originalInComments = true; } else if (args[i].startsWith("--screen")) { out = new PrintWriter(System.out); + } else if (args[i].compareTo("-d") == 0) { + printLevel = M_DEB;//print debug info + } else if (args[i].compareTo("-v") == 0) { + printLevel = M_WAR;//print warnings + } else if (args[i].compareTo("-q") == 0) { + printLevel = M_ERR+1;//no printing } i++; } @@ -396,6 +449,7 @@ public class mjc2wsl{ long mili = Calendar.getInstance().getTimeInMillis() - now.getTimeInMillis(); System.out.println("conversion time:" + mili + " ms"); + printMessageCounters(); out.close(); } else System.out.println("file does not exist");