diff --git a/AssertStatement.class b/AssertStatement.class index c71c4861..35b6a6c5 100644 Binary files a/AssertStatement.class and b/AssertStatement.class differ diff --git a/AssignStatement.class b/AssignStatement.class index 22ea08d2..3de1ad8b 100644 Binary files a/AssignStatement.class and b/AssignStatement.class differ diff --git a/BreakStatement.class b/BreakStatement.class index 3bd7e071..d9b9ea44 100644 Binary files a/BreakStatement.class and b/BreakStatement.class differ diff --git a/CaseStatement.class b/CaseStatement.class index ff6f0f5e..9b35de43 100644 Binary files a/CaseStatement.class and b/CaseStatement.class differ diff --git a/CatchStatement.class b/CatchStatement.class index e8205301..af74bb11 100644 Binary files a/CatchStatement.class and b/CatchStatement.class differ diff --git a/ConditionalStatement.class b/ConditionalStatement.class index c6c2a0cd..ea9c2166 100644 Binary files a/ConditionalStatement.class and b/ConditionalStatement.class differ diff --git a/ContinueStatement.class b/ContinueStatement.class index f8965bbe..7b771c3b 100644 Binary files a/ContinueStatement.class and b/ContinueStatement.class differ diff --git a/CreationStatement.class b/CreationStatement.class index e0d3cbb4..cb90c6ae 100644 Binary files a/CreationStatement.class and b/CreationStatement.class differ diff --git a/ErrorStatement.class b/ErrorStatement.class index 9eabf1c8..1aedf2d7 100644 Binary files a/ErrorStatement.class and b/ErrorStatement.class differ diff --git a/FinalStatement.class b/FinalStatement.class index 95e98154..97250e54 100644 Binary files a/FinalStatement.class and b/FinalStatement.class differ diff --git a/IfCase.class b/IfCase.class index 2113dbf0..eadda5ff 100644 Binary files a/IfCase.class and b/IfCase.class differ diff --git a/IfStatement.class b/IfStatement.class index d26a8d48..9f4e1aa4 100644 Binary files a/IfStatement.class and b/IfStatement.class differ diff --git a/ImplicitInvocationStatement.class b/ImplicitInvocationStatement.class index cb3d154d..e86c0c07 100644 Binary files a/ImplicitInvocationStatement.class and b/ImplicitInvocationStatement.class differ diff --git a/InvocationStatement.class b/InvocationStatement.class index 2a72c5c9..9a3238ef 100644 Binary files a/InvocationStatement.class and b/InvocationStatement.class differ diff --git a/ReturnStatement.class b/ReturnStatement.class index 6f86248b..3be1dd16 100644 Binary files a/ReturnStatement.class and b/ReturnStatement.class differ diff --git a/SequenceStatement.class b/SequenceStatement.class index 28931229..b3d6e020 100644 Binary files a/SequenceStatement.class and b/SequenceStatement.class differ diff --git a/Statement.class b/Statement.class index 932512f4..851103d8 100644 Binary files a/Statement.class and b/Statement.class differ diff --git a/Statement.java b/Statement.java index a8fff6ba..a5497dfc 100644 --- a/Statement.java +++ b/Statement.java @@ -227,7 +227,71 @@ else if (rhs instanceof BinaryExpression && new BinaryExpression("->pow", expr, sze)); return new AssignStatement(lhs, newrhs); } + else if ((lhs + " & " + var).equals("" + rhs)) + { // lhs := lhs & loopRange->forAll(self) + + Type elemt = rng.getElementType(); + BasicExpression selfvar = + BasicExpression.newVariableBasicExpression( + "self",elemt); + Expression prd = + new BinaryExpression("->forAll", rng, selfvar); + Expression newrhs = + new BinaryExpression("&", lhs, prd); + return new AssignStatement(lhs, newrhs); + } + else if (rhs instanceof BinaryExpression && + ((BinaryExpression) rhs).getOperator().equals("&") && + (((BinaryExpression) rhs).getLeft() + "").equals(lhs + "")) + { // lhs := lhs & expr + Expression expr = ((BinaryExpression) rhs).getRight(); + Vector vuses = expr.getVariableUses(); + + if (VectorUtil.containsEqualString(lhs+"", vuses)) + { return null; } + + // lhs := lhs & rng->forAll(var|expr) + + Expression coll = + new BinaryExpression("!", + new BinaryExpression(":", var, rng), expr); + Expression newrhs = + new BinaryExpression("&", lhs, coll); + return new AssignStatement(lhs, newrhs); + } + else if ((lhs + " or " + var).equals("" + rhs)) + { // lhs := lhs or loopRange->exists(self) + + Type elemt = rng.getElementType(); + BasicExpression selfvar = + BasicExpression.newVariableBasicExpression( + "self",elemt); + Expression prd = + new BinaryExpression("->exists", rng, selfvar); + Expression newrhs = + new BinaryExpression("or", lhs, prd); + return new AssignStatement(lhs, newrhs); + } else if (rhs instanceof BinaryExpression && + ((BinaryExpression) rhs).getOperator().equals("or") && + (((BinaryExpression) rhs).getLeft() + "").equals(lhs + "")) + { // lhs := lhs or expr + Expression expr = ((BinaryExpression) rhs).getRight(); + Vector vuses = expr.getVariableUses(); + + if (VectorUtil.containsEqualString(lhs+"", vuses)) + { return null; } + + // lhs := lhs or rng->exists(var|expr) + + Expression coll = + new BinaryExpression("#", + new BinaryExpression(":", var, rng), expr); + Expression newrhs = + new BinaryExpression("or", lhs, coll); + return new AssignStatement(lhs, newrhs); + } + /* else if (rhs instanceof BinaryExpression && (((BinaryExpression) rhs).getLeft() + "").equals( lhs + "")) { BinaryExpression brhs = (BinaryExpression) rhs; @@ -284,7 +348,7 @@ else if ("/".equals(oper)) new BinaryExpression("->pow", expr, smm)); return new AssignStatement(lhs, newrhs); } - } + } */ } else if (st instanceof SequenceStatement) { SequenceStatement sq = (SequenceStatement) st; @@ -530,6 +594,14 @@ else if ((lhs + " / " + var).equals("" + rhs)) { // lhs := lhs / loopRange->prd() return true; } + else if ((lhs + " & " + var).equals("" + rhs)) + { // lhs := lhs & loopRange->forAll(self) + return true; + } + else if ((lhs + " or " + var).equals("" + rhs)) + { // lhs := lhs or loopRange->exists(self) + return true; + } else if (rhs instanceof BinaryExpression && (((BinaryExpression) rhs).getLeft() + "").equals( lhs + "")) @@ -544,8 +616,10 @@ else if (rhs instanceof BinaryExpression && { return false; } if ("+".equals(oper) || "-".equals(oper) || - "*".equals(oper) || "/".equals(oper)) - { return true; } + "*".equals(oper) || "/".equals(oper) || + "&".equals(oper) || "or".equals(oper)) + { return true; } + return false; } } diff --git a/TryStatement.class b/TryStatement.class index 594546cc..9cb0b044 100644 Binary files a/TryStatement.class and b/TryStatement.class differ diff --git a/WhileStatement.class b/WhileStatement.class index a1733ec5..13a7223f 100644 Binary files a/WhileStatement.class and b/WhileStatement.class differ diff --git a/js2py3.bat b/js2py3.bat index f5c47c3c..6a30cd0c 100644 --- a/js2py3.bat +++ b/js2py3.bat @@ -1,8 +1,9 @@ -@ECHO OFF -SET TEST_CURRENT_DIR=%CLASSPATH:.;=% -if "%TEST_CURRENT_DIR%" == "%CLASSPATH%" ( SET CLASSPATH=.;%CLASSPATH% ) -@ECHO ON +SET oldclasspath=%CLASSPATH% +SET CLASSPATH=.;.\antlr-4.8-complete.jar;%CLASSPATH% + + type %1 | java org.antlr.v4.gui.TestRig JavaScript program -tree >output/ast.txt java -jar umlrsds.jar -js2python +SET CLASSPATH=%oldclasspath%