X-Git-Url: http://svarog.pmf.uns.ac.rs/gitweb/?p=mjc2wsl.git;a=blobdiff_plain;f=src%2Fmjc2wsl.java;h=388f1ad39b965402297e05535b2a157482c3cd27;hp=bc6f4656427485f057a9bfe8e4b4676113b3d616;hb=efe68ac5eb23f8a7711a44c4a7d4e830b64cd068;hpb=37bd7e6ee3efaa3a310c4cd6ead85cbeda90ca94 diff --git a/src/mjc2wsl.java b/src/mjc2wsl.java index bc6f465..388f1ad 100644 --- a/src/mjc2wsl.java +++ b/src/mjc2wsl.java @@ -28,7 +28,7 @@ import java.util.*; * @author Doni Pracner, http://perun.dmi.rs/pracner http://quemaster.com */ public class mjc2wsl{ - public static String versionN = "0.1.5"; + public static String versionN = "0.1.6"; private TransMessages messages = new TransMessages(); @@ -193,7 +193,7 @@ public class mjc2wsl{ +"C:\" with mjc2wsl v "+versionN+"\";\n"); ret.append("BEGIN "); - ret.append("VAR < tempa := 0, tempb := 0, tempres :=0,\n\t"); + ret.append("VAR < \n\t"); ret.append("mjvm_locals := ARRAY(1,0), "); ret.append("\n\tmjvm_statics := ARRAY("+numWords+",0), "); ret.append("\n\tmjvm_arrays := < >, "); @@ -429,21 +429,27 @@ public class mjc2wsl{ } case add: { + prl(createStartVar("tempa", "tempb", "tempres")); prl(createTopTwoEStack()); prl("tempres := tempb + tempa;"); prl(createToEStack("tempres")); + prl(createEndVar()); break; } case sub: { + prl(createStartVar("tempa", "tempb", "tempres")); prl(createTopTwoEStack()); prl("tempres := tempb - tempa;"); prl(createToEStack("tempres")); + prl(createEndVar()); break; } case mul: { + prl(createStartVar("tempa", "tempb", "tempres")); prl(createTopTwoEStack()); prl("tempres := tempb * tempa;"); prl(createToEStack("tempres")); + prl(createEndVar()); break; } case div: { @@ -466,8 +472,10 @@ public class mjc2wsl{ } case neg: { + prl(createStartVar("tempa")); prl(createTopEStack()); prl(createToEStack("-tempa")); + prl(createEndVar()); break; } @@ -565,10 +573,13 @@ public class mjc2wsl{ case jle: case jgt: case jge: { + prl(createStartVar("tempa", "tempb")); prl(createTopTwoEStack()); prl("IF tempb " + getRelationFor(op) + " tempa THEN CALL a" + (counter + get2()) + " ELSE CALL a" + (counter + 1) + " FI;"); + prl(createEndVar()); + break; } @@ -605,8 +616,10 @@ public class mjc2wsl{ prl(createComment("char is read like a number", C_SPEC)); } case read: { + prl(createStartVar("tempa")); prl("tempa := @String_To_Num(@Read_Line(Standard_Input_Port));"); prl(createToEStack("tempa")); + prl(createEndVar()); break; } @@ -619,8 +632,11 @@ public class mjc2wsl{ } case print: { // TODO printing numbers needs different lengths of spacing + prl(createStartVar("tempa", "tempb")); + prl(createTopTwoEStack()); prl("Print_MJ(tempb,tempa);"); + prl(createEndVar()); break; }