From 2bff6b7a3261d663a22a949e7b7fc0020425564c Mon Sep 17 00:00:00 2001 From: Ludovic Apvrille <ludovic.apvrille@telecom-paris.fr> Date: Fri, 16 Apr 2021 10:13:02 +0200 Subject: [PATCH] Update on parsing in simulator --- .../avatartranslator/AvatarSyntaxChecker.java | 12 +-- .../AvatarSimulationBlock.java | 14 ++- .../AvatarSimulationTransaction.java | 40 ++++++++ .../java/ui/AvatarDesignPanelTranslator.java | 99 +------------------ 4 files changed, 62 insertions(+), 103 deletions(-) diff --git a/src/main/java/avatartranslator/AvatarSyntaxChecker.java b/src/main/java/avatartranslator/AvatarSyntaxChecker.java index 2ac599b6ea..00b8d61dbf 100644 --- a/src/main/java/avatartranslator/AvatarSyntaxChecker.java +++ b/src/main/java/avatartranslator/AvatarSyntaxChecker.java @@ -225,16 +225,16 @@ public class AvatarSyntaxChecker { act = Conversion.putVariableValueInString(AvatarSpecification.ops, act, aa.getName(), aa.getDefaultInitialValue()); } - /*AvatarExpressionSolver e1 = new AvatarExpressionSolver(act); + AvatarExpressionSolver e1 = new AvatarExpressionSolver(act); if (e1.buildExpression()) { return 1; } - return 0;*/ + return 0; - BoolExpressionEvaluator bee = new BoolExpressionEvaluator(); + /*BoolExpressionEvaluator bee = new BoolExpressionEvaluator(); //TraceManager.addDev("Evaluating (modified) guard:" + act); boolean result = bee.getResultOfWithIntExpr(act); @@ -244,7 +244,7 @@ public class AvatarSyntaxChecker { } - return 0; + return 0;*/ // END of NEW //return parse(_as, _ab, "guard", act); @@ -344,7 +344,7 @@ public class AvatarSyntaxChecker { //TraceManager.addDev("2. IsValidBoolExpr Evaluating bool:" + act); - BoolExpressionEvaluator bee = new BoolExpressionEvaluator(); + /*BoolExpressionEvaluator bee = new BoolExpressionEvaluator(); boolean result = bee.getResultOfWithIntExpr(act); @@ -353,7 +353,7 @@ public class AvatarSyntaxChecker { return -1; } else { //TraceManager.addDev("IsValidBoolExpr: YES (" + act + ")"); - } + }*/ // Testing with parsing AvatarExpressionSolver diff --git a/src/main/java/avatartranslator/directsimulation/AvatarSimulationBlock.java b/src/main/java/avatartranslator/directsimulation/AvatarSimulationBlock.java index e506775523..4b4d11c243 100644 --- a/src/main/java/avatartranslator/directsimulation/AvatarSimulationBlock.java +++ b/src/main/java/avatartranslator/directsimulation/AvatarSimulationBlock.java @@ -771,7 +771,17 @@ public class AvatarSimulationBlock { cpt++; } - BoolExpressionEvaluator bee = new BoolExpressionEvaluator(); + AvatarExpressionSolver aee = new AvatarExpressionSolver(act); + if ( !(aee.buildExpression())) { + TraceManager.addDev("4. Error with avatar expression solver:" + act); + return false; + } + + int[] attributes = AvatarSimulationTransaction.getAttributeValues(_attributeValues); + + return aee.getResult(attributes) != 0; + + /*BoolExpressionEvaluator bee = new BoolExpressionEvaluator(); if (act.trim().startsWith("100")) { TraceManager.addDev("Current block " + this.getBlock().getName() + " lastTransaction=" + lastTransaction); @@ -784,7 +794,7 @@ public class AvatarSimulationBlock { } //TraceManager.addDev("Result of " + _expr + " = " + result); - return result; + return result;*/ } public int makeRandom(int minV, int maxV, int functionID, double extra1, double extra2) { diff --git a/src/main/java/avatartranslator/directsimulation/AvatarSimulationTransaction.java b/src/main/java/avatartranslator/directsimulation/AvatarSimulationTransaction.java index ecb9712e0a..e6dec22f75 100644 --- a/src/main/java/avatartranslator/directsimulation/AvatarSimulationTransaction.java +++ b/src/main/java/avatartranslator/directsimulation/AvatarSimulationTransaction.java @@ -96,6 +96,46 @@ public class AvatarSimulationTransaction { duration = 0; } + public int[] getAttributeValues() { + if (attributeValues == null) { + return new int[0]; + } + + int[] vals = new int[attributeValues.size()]; + for(int i=0; i<vals.length; i++) { + String v = attributeValues.get(i); + if (v.equals("true")) { + vals[i] = 1; + } else if (v.equals("false")) { + vals[i] = 0; + } else { + vals[i] = Integer.decode(v); + } + } + + return vals; + } + + public static int[] getAttributeValues(Vector<String> attributeValues) { + if (attributeValues == null) { + return new int[0]; + } + + int[] vals = new int[attributeValues.size()]; + for(int i=0; i<vals.length; i++) { + String v = attributeValues.get(i); + if (v.equals("true")) { + vals[i] = 1; + } else if (v.equals("false")) { + vals[i] = 0; + } else { + vals[i] = Integer.decode(v); + } + } + + return vals; + } + public static void reinit() { ID = 0; allExecutedElements = new LinkedList<AvatarStateMachineElement>(); diff --git a/src/main/java/ui/AvatarDesignPanelTranslator.java b/src/main/java/ui/AvatarDesignPanelTranslator.java index eb99e3df94..9d643c0480 100644 --- a/src/main/java/ui/AvatarDesignPanelTranslator.java +++ b/src/main/java/ui/AvatarDesignPanelTranslator.java @@ -1732,7 +1732,8 @@ public class AvatarDesignPanelTranslator { if (aaos.getNbOfValues() != atas.getListOfAttributes().size()) { TraceManager.addDev("nb of values: " + aaos.getNbOfValues() + " size of list: " + atas.getListOfAttributes().size()); - throw new CheckingError(CheckingError.BEHAVIOR_ERROR, "Badly formed signal sending: " + asmdss.getValue() + " -> nb of parameters does not match definition"); + throw new CheckingError(CheckingError.BEHAVIOR_ERROR, "Badly formed signal sending: " + asmdss.getValue() + + " -> nb of parameters does not match definition"); } // Checking expressions passed as parameter for (int i = 0; i < aaos.getNbOfValues(); i++) { @@ -1766,7 +1767,8 @@ public class AvatarDesignPanelTranslator { asm.addElement(element); } - private void translateAvatarSMDLibraryFunctionCall(TDiagramPanel tdp, AvatarSpecification _as, AvatarStateMachineOwner _ab, AvatarSMDLibraryFunctionCall asmdlfc) throws CheckingError { + private void translateAvatarSMDLibraryFunctionCall(TDiagramPanel tdp, AvatarSpecification _as, AvatarStateMachineOwner _ab, + AvatarSMDLibraryFunctionCall asmdlfc) throws CheckingError { AvatarStateMachine asm = _ab.getStateMachine(); /* Get Function corresponding to this call */ @@ -2722,99 +2724,6 @@ public class AvatarDesignPanelTranslator { //TraceManager.addDev("-- Empty transition"); final AvatarTransition at = new AvatarTransition(_ab, "avatar transition", connector); createTransitionInfo(at, avatarSmdConnector); - // AvatarTransition at = new AvatarTransition (_ab, "avatar transition", tgc); - // - // // Guard - // String tmp = modifyString (asmdco.getGuard()); - // AvatarGuard guard = AvatarGuard.createFromString (_ab, tmp); - // if (guard.isElseGuard()) - // at.setGuard(guard); - // else { - // int error = AvatarSyntaxChecker.isAValidGuard (_as, _ab, tmp); - // if (error < 0) - // this.makeError (error, tdp, _ab, tgc, "transition guard", tmp); - // else - // at.setGuard (guard); - // } - // - // // Delays - // String tmp1 = modifyString (asmdco.getAfterMinDelay ()); - // int error = AvatarSyntaxChecker.isAValidIntExpr (_as, _ab, tmp1); - // if (error < 0) { - // this.makeError (error, tdp, _ab, tgc, "after min delay", tmp1); - // tmp1 = null; - // } - // String tmp2 = modifyString (asmdco.getAfterMaxDelay ()); - // error = AvatarSyntaxChecker.isAValidIntExpr (_as, _ab, tmp2); - // if (error < 0) { - // this.makeError(error, tdp, _ab, tgc, "after max delay", tmp2); - // tmp2 = null; - // } - // - // if (tmp1 != null && tmp2 != null) - // at.setDelays(tmp1, tmp2); - - // Compute min and max - // tmp1 = modifyString (asmdco.getComputeMinDelay ()); - // error = AvatarSyntaxChecker.isAValidIntExpr (_as, _ab, tmp1); - // if (error < 0) { - // this.makeError (error, tdp, _ab, tgc, "compute min ", tmp1); - // tmp1 = null; - // } - // tmp2 = modifyString(asmdco.getComputeMaxDelay()); - // error = AvatarSyntaxChecker.isAValidIntExpr(_as, _ab, tmp2); - // if (error < 0) { - // this.makeError (error, tdp, _ab, tgc, "compute max ", tmp2); - // tmp2 = null; - // } - // - // if (tmp1 != null && tmp2 != null) - // at.setComputes(tmp1, tmp2); - - // Probability - // tmp1 = asmdco.getProbability (); - // if ((tmp1 != null) && (tmp1.length()>0)) { - // error = AvatarSyntaxChecker.isAValidProbabilityExpr(_as, _ab, tmp1); - // if (error < 0) { - // this.makeError(error, tdp, _ab, tgc, "probability ", tmp1); - // tmp1 = null; - // } - // if (tmp1 != null) { - // at.setProbability(new Double(tmp1).doubleValue()); - // } - // } - // - // // Actions - // for(String s: asmdco.getActions()) - // if (s.trim().length() > 0) { - // s = modifyString(s.trim()); - // - // // Variable assignation or method call? - // if (!isAVariableAssignation(s)) { - // // Method call - // int index2 = s.indexOf(";"); - // if (index2 != -1) - // this.makeError(error, tdp, _ab, tgc, "transition action", s); - // - // s = modifyStringMethodCall(s, _ab.getName()); - // if (!AvatarBlock.isAValidMethodCall (_ab, s)) { - // UICheckingError ce = new UICheckingError(CheckingError.BEHAVIOR_ERROR, "Badly formed transition method call: " + s); - // // TODO: adapt - // // ce.setAvatarBlock(_ab); - // ce.setTDiagramPanel(tdp); - // ce.setTGComponent(tgc); - // addCheckingError(ce); - // } else - // at.addAction(s); - // } else { - // // Variable assignation - // error = AvatarSyntaxChecker.isAValidVariableExpr (_as, _ab, s); - // if (error < 0) - // this.makeError (error, tdp, _ab, tgc, "transition action", s); - // else - // at.addAction (s); - // } - // } element1.addNext(at); at.addNext(element2); -- GitLab