From a23380d515a60a57d91c0719f27702325ba84f98 Mon Sep 17 00:00:00 2001 From: Ludovic Apvrille <ludovic.apvrille@telecom-paristech.fr> Date: Mon, 21 Jan 2019 17:18:45 +0100 Subject: [PATCH] Update on bool verification in AVATAR. --- .../avatartranslator/AvatarStateMachine.java | 10 ++++---- .../avatartranslator/AvatarSyntaxChecker.java | 6 ++--- .../java/myutil/BoolExpressionEvaluator.java | 23 +++++++++++-------- .../java/ui/AvatarDesignPanelTranslator.java | 4 ++-- src/main/java/ui/avatarbd/AvatarBDPanel.java | 4 ++-- .../myutil/BoolExpressionEvaluatorTest.java | 8 +++++++ 6 files changed, 34 insertions(+), 21 deletions(-) diff --git a/src/main/java/avatartranslator/AvatarStateMachine.java b/src/main/java/avatartranslator/AvatarStateMachine.java index 856cd4bcff..cafd1aa4f8 100644 --- a/src/main/java/avatartranslator/AvatarStateMachine.java +++ b/src/main/java/avatartranslator/AvatarStateMachine.java @@ -623,7 +623,7 @@ public class AvatarStateMachine extends AvatarElement { } for (AvatarStateMachineElement element : v) { - TraceManager.addDev(">" + element + "<"); + //TraceManager.addDev(">" + element + "<"); splitAvatarTransition((AvatarTransition) element, _state); } @@ -653,7 +653,7 @@ public class AvatarStateMachine extends AvatarElement { } else { if (_at.getNbOfAction() > 1) { - TraceManager.addDev("New split state"); + //TraceManager.addDev("New split state"); String tmp = findUniqueStateName("splitstate_action__"); AvatarState as = new AvatarState(tmp, null); as.setHidden(true); @@ -712,7 +712,7 @@ public class AvatarStateMachine extends AvatarElement { //TraceManager.addDev("*** Analyzing components in state " + state); // Split avatar transitions for (AvatarStateMachineElement element : v) { - TraceManager.addDev(">" + element + "<"); + //TraceManager.addDev(">" + element + "<"); if (element instanceof AvatarTransition) { splitAvatarTransition((AvatarTransition) element, state); } @@ -1379,7 +1379,7 @@ public class AvatarStateMachine extends AvatarElement { } public AvatarTransition cloneCompositeTransition(AvatarTransition _at) { - TraceManager.addDev("Must clone: " + _at); + //TraceManager.addDev("Must clone: " + _at); // We clone elements until we find a state! AvatarStateMachineElement tomake, current; AvatarStateMachineElement tmp; @@ -1390,7 +1390,7 @@ public class AvatarStateMachine extends AvatarElement { tomake = at; while ((current != null) && !(current instanceof AvatarState)) { - TraceManager.addDev("Cloning: " + current); + //TraceManager.addDev("Cloning: " + current); tmp = current.basicCloneMe(block); addElement(tmp); tomake.addNext(tmp); diff --git a/src/main/java/avatartranslator/AvatarSyntaxChecker.java b/src/main/java/avatartranslator/AvatarSyntaxChecker.java index a1eed679c8..a0b88ce198 100644 --- a/src/main/java/avatartranslator/AvatarSyntaxChecker.java +++ b/src/main/java/avatartranslator/AvatarSyntaxChecker.java @@ -158,13 +158,13 @@ public class AvatarSyntaxChecker { BoolExpressionEvaluator bee = new BoolExpressionEvaluator(); - TraceManager.addDev("IsValidBoolExpr Evaluating bool:" + act); - boolean result = bee.getResultOf(act); + //TraceManager.addDev("IsValidBoolExpr Evaluating bool:" + act); + boolean result = bee.getResultOfWithIntExpr(act); if (bee.getError() != null) { TraceManager.addDev("Error in bool expr: " + bee.getError()); return -1; } else { - TraceManager.addDev("IsValidBoolExpr: YES (" + act + ")"); + //TraceManager.addDev("IsValidBoolExpr: YES (" + act + ")"); } return 0; diff --git a/src/main/java/myutil/BoolExpressionEvaluator.java b/src/main/java/myutil/BoolExpressionEvaluator.java index 2d9e94e80f..ff6557e73e 100644 --- a/src/main/java/myutil/BoolExpressionEvaluator.java +++ b/src/main/java/myutil/BoolExpressionEvaluator.java @@ -497,7 +497,9 @@ public class BoolExpressionEvaluator { return null; } Object ob1 = left.computeValue(); + //TraceManager.addDev("ob1=" + ob1); if (!(ob1 instanceof Boolean)) { + TraceManager.addDev("ob1=" + ob1); errorMessage = "Bad operand for unary boolean operator"; return null; } @@ -594,7 +596,7 @@ public class BoolExpressionEvaluator { if (father == null) { s += " father= no"; } else { - s += " father=" + id; + s += " father=" + father.id; } s += " type:" + res + " op:" + toStringAction(op) + " int:" + i + " bool:" + b; @@ -1646,11 +1648,13 @@ public class BoolExpressionEvaluator { //TraceManager.addDev("Tree of " + _expr + ": " + resIBR.toString() + "\nEnd of tree"); + //TraceManager.addDev("Computing value of " + _expr); Object res = resIBR.computeValue(); if (res == null) { + TraceManager.addDev("Error in tree of " + _expr + ": " + resIBR.toString() + "\nEnd of tree"); return false; } @@ -1803,14 +1807,6 @@ public class BoolExpressionEvaluator { return newElt; } - if (c1 == '>') { - newElt = current.addIntOperator(GT_TOKEN); - if (newElt == null) { - errorMessage = "Badly placed int operator:" + token; - return null; - } - return newElt; - } if (c1 == ';') { newElt = current.addIntOperator(LTEQ_TOKEN); @@ -1841,6 +1837,15 @@ public class BoolExpressionEvaluator { return newElt; } + if (c1 == '$') { + newElt = current.addBinaryOperator(NOT_EQUAL_TOKEN); + if (newElt == null) { + errorMessage = "Badly placed bool operator:" + token; + return null; + } + return newElt; + } + if (c1 == '&') { newElt = current.addBinaryOperator(AND_TOKEN); if (newElt == null) { diff --git a/src/main/java/ui/AvatarDesignPanelTranslator.java b/src/main/java/ui/AvatarDesignPanelTranslator.java index ed37a70f04..b67b04277a 100644 --- a/src/main/java/ui/AvatarDesignPanelTranslator.java +++ b/src/main/java/ui/AvatarDesignPanelTranslator.java @@ -1969,7 +1969,7 @@ public class AvatarDesignPanelTranslator { else { // Variable assignment - TraceManager.addDev("Action:" + actionText); + //TraceManager.addDev("Action:" + actionText); error = AvatarSyntaxChecker.isAValidVariableExpr( block.getAvatarSpecification(), block, actionText); if ( error < 0 ) { @@ -2531,7 +2531,7 @@ public class AvatarDesignPanelTranslator { int length = tmp.length(); tmp = tmp.trim(); if (tmp.length() != length) { - TraceManager.addDev("pb of length"); + //TraceManager.addDev("pb of length"); return true; } diff --git a/src/main/java/ui/avatarbd/AvatarBDPanel.java b/src/main/java/ui/avatarbd/AvatarBDPanel.java index 70c04c5758..b9a2bca3db 100644 --- a/src/main/java/ui/avatarbd/AvatarBDPanel.java +++ b/src/main/java/ui/avatarbd/AvatarBDPanel.java @@ -661,7 +661,7 @@ public class AvatarBDPanel extends TDiagramPanel { } public void makeValidated() { - TraceManager.addDev("Making validated with val=" + val); + //TraceManager.addDev("Making validated with val=" + val); validated = new LinkedList<AvatarBDStateMachineOwner> (); List<AvatarBDStateMachineOwner> list = getFullStateMachineOwnerList(); String tmp; @@ -682,7 +682,7 @@ public class AvatarBDPanel extends TDiagramPanel { } public void makeIgnored() { - TraceManager.addDev("Making ignored with ign=" + val); + //TraceManager.addDev("Making ignored with ign=" + val); ignored = new LinkedList<AvatarBDStateMachineOwner> (); List<AvatarBDStateMachineOwner> list = getFullStateMachineOwnerList(); String tmp; diff --git a/ttool/src/test/java/myutil/BoolExpressionEvaluatorTest.java b/ttool/src/test/java/myutil/BoolExpressionEvaluatorTest.java index 5396786ce8..fe8fb6dce9 100755 --- a/ttool/src/test/java/myutil/BoolExpressionEvaluatorTest.java +++ b/ttool/src/test/java/myutil/BoolExpressionEvaluatorTest.java @@ -93,6 +93,14 @@ public class BoolExpressionEvaluatorTest { assertFalse(bee.hasError()); } + @Test + public void testTrueDoubleIntegerNullEqualityExpr() { + BoolExpressionEvaluator bee = new BoolExpressionEvaluator(); + System.out.println("Hello"); + assertTrue(bee.getResultOfWithIntExpr("((0)==(0)) || (0==0)")); + assertFalse(bee.hasError()); + } + @Test public void testFalseLeftAddition() { BoolExpressionEvaluator bee = new BoolExpressionEvaluator(); -- GitLab