From e80e26966cd3ce57386cafff2b7475d73fdeac82 Mon Sep 17 00:00:00 2001 From: Sophie Coudert <sophie.coudert@telecom-paris.fr> Date: Fri, 31 Mar 2023 13:02:10 +0200 Subject: [PATCH] IBSolver integrated. Old parser yet only used in AvatarActionAssignment (Florian's Code) --- .../AvatarActionOnSignal.java | 31 +++++++++---------- .../AvatarSimulationBlock.java | 20 ++++++------ .../AvatarIBSAttributeClass.java | 3 +- .../java/ui/AvatarDesignPanelTranslator.java | 3 +- .../java/cli/CLIAvatarModelCheckerTest.java | 3 +- 5 files changed, 29 insertions(+), 31 deletions(-) diff --git a/src/main/java/avatartranslator/AvatarActionOnSignal.java b/src/main/java/avatartranslator/AvatarActionOnSignal.java index 6c0ff88743..898798dff6 100644 --- a/src/main/java/avatartranslator/AvatarActionOnSignal.java +++ b/src/main/java/avatartranslator/AvatarActionOnSignal.java @@ -39,7 +39,10 @@ package avatartranslator; +import avatartranslator.intboolsolver.AvatarIBSAttributeClass; +import avatartranslator.intboolsolver.AvatarIBSolver; import myutil.TraceManager; +import myutil.intboolsolver.IBSAttributeClass; import java.util.ArrayList; import java.util.LinkedList; @@ -111,27 +114,23 @@ public class AvatarActionOnSignal extends AvatarStateMachineElement { } public boolean buildActionSolver(AvatarBlock block) { - AvatarExpressionAttribute aea; + AvatarIBSAttributeClass.TypedAttribute ta; AvatarExpressionConstant cnst; - AvatarElement attr; boolean res = true; - actionAttr = new ArrayList<AvatarExpressionAttributeInterface>(); for (String val : values) { - attr = AvatarExpressionAttribute.getElement(val, block); - if (attr != null && AvatarExpressionSolver.containsElementAttribute(attr)) { - actionAttr.add(AvatarExpressionSolver.getElementAttribute(attr)); - } else { - aea = new AvatarExpressionAttribute(block, val); - res &= !aea.hasError(); - if (aea.isConstant()) { - AvatarAttribute attribute = aea.getConstAttribute(); - cnst = new AvatarExpressionConstant(attribute.getInitialValueInInt()); + ta= AvatarIBSolver.attrC.getTypedAttribute(block,val); + switch(ta.getType()){ + case AvatarIBSAttributeClass.NullAttr: res = false; break; //could directly return false ? + case AvatarIBSAttributeClass.BoolConst: + case AvatarIBSAttributeClass.IntConst: + cnst = new AvatarExpressionConstant(ta.getConstant()); actionAttr.add(cnst); - } else if (res) { - AvatarExpressionSolver.addElementAttribute(attr, aea); - actionAttr.add(aea); - } + break; + case AvatarIBSAttributeClass.BoolAttr: + case AvatarIBSAttributeClass.IntAttr: + // original: if(res)... but strange + actionAttr.add((AvatarIBSAttributeClass.Attribute)ta.getAttribute()); } } return res; diff --git a/src/main/java/avatartranslator/directsimulation/AvatarSimulationBlock.java b/src/main/java/avatartranslator/directsimulation/AvatarSimulationBlock.java index 5752e23e44..8d36fc9a0c 100644 --- a/src/main/java/avatartranslator/directsimulation/AvatarSimulationBlock.java +++ b/src/main/java/avatartranslator/directsimulation/AvatarSimulationBlock.java @@ -40,8 +40,11 @@ package avatartranslator.directsimulation; import avatartranslator.*; +import avatartranslator.intboolsolver.AvatarIBSExpressionClass; +import avatartranslator.intboolsolver.AvatarIBSolver; import avatartranslator.modelchecker.SpecificationBlock; import myutil.*; +import myutil.intboolsolver.IBSExpressionClass; import java.util.Vector; @@ -748,11 +751,9 @@ public class AvatarSimulationBlock { } public int newEvaluateIntExpression(String _expr, Vector<String> _attributeValues) { - AvatarExpressionSolver e1 = new AvatarExpressionSolver(_expr); + AvatarIBSExpressionClass.IExpr e1 = (AvatarIBSExpressionClass.IExpr) AvatarIBSolver.parser.parseInt(block,_expr); SpecificationBlock sb = new SpecificationBlock(_attributeValues); - e1.buildExpression(block); - return e1.getResult(sb); - + return e1.eval(sb); } /*public int evaluateIntExpression(String _expr, Vector<String> _attributeValues) { @@ -781,16 +782,13 @@ public class AvatarSimulationBlock { act = Conversion.putVariableValueInString(AvatarSpecification.ops, act, getAttributeName(cpt), attrValue); cpt++; } - - AvatarExpressionSolver aee = new AvatarExpressionSolver(act); - if ( !(aee.buildExpression())) { + AvatarIBSExpressionClass.BExpr aee = (AvatarIBSExpressionClass.BExpr) AvatarIBSolver.parser.parseBool(act); + if ( aee==null) { TraceManager.addDev("4. Error with avatar expression solver:" + act); return false; } - - int[] attributes = AvatarSimulationTransaction.getAttributeValues(_attributeValues); - - return aee.getResult(attributes) != 0; + //int[] attributes = AvatarSimulationTransaction.getAttributeValues(_attributeValues); + return aee.eval(); /*BoolExpressionEvaluator bee = new BoolExpressionEvaluator(); diff --git a/src/main/java/avatartranslator/intboolsolver/AvatarIBSAttributeClass.java b/src/main/java/avatartranslator/intboolsolver/AvatarIBSAttributeClass.java index a58bf3ae32..d935fca632 100644 --- a/src/main/java/avatartranslator/intboolsolver/AvatarIBSAttributeClass.java +++ b/src/main/java/avatartranslator/intboolsolver/AvatarIBSAttributeClass.java @@ -178,7 +178,7 @@ public class AvatarIBSAttributeClass extends IBSStdAttributeClass< AvatarStateMachineElement, SpecificationState, SpecificationBlock - >.Attribute { + >.Attribute implements AvatarExpressionAttributeInterface { // attribute access information private AvatarBlock block; @@ -404,6 +404,7 @@ public class AvatarIBSAttributeClass extends IBSStdAttributeClass< return value; } + public int getValue(int[] _quickstate) { return getValue((Object) _quickstate);} public int getValue(SpecificationState _ss, AvatarStateMachineElement _asme) { int value; diff --git a/src/main/java/ui/AvatarDesignPanelTranslator.java b/src/main/java/ui/AvatarDesignPanelTranslator.java index 09e9522632..752cbc31cb 100644 --- a/src/main/java/ui/AvatarDesignPanelTranslator.java +++ b/src/main/java/ui/AvatarDesignPanelTranslator.java @@ -39,6 +39,7 @@ package ui; import avatartranslator.*; +import avatartranslator.intboolsolver.AvatarIBSolver; import myutil.Conversion; import myutil.TraceManager; import translator.CheckingError; @@ -471,7 +472,7 @@ public class AvatarDesignPanelTranslator { // Replace in pragmas loc by its value init // We must be sure to correctly identify loc - _pragma = AvatarExpressionSolver.replaceVariable(_pragma, loc, init); + _pragma = AvatarIBSolver.parser.replaceVariable(_pragma, loc, init); //TraceManager.addDev("PRAGMA: new pragma=" + _pragma); diff --git a/ttool/src/test/java/cli/CLIAvatarModelCheckerTest.java b/ttool/src/test/java/cli/CLIAvatarModelCheckerTest.java index a228c365f5..a1822cdfdb 100644 --- a/ttool/src/test/java/cli/CLIAvatarModelCheckerTest.java +++ b/ttool/src/test/java/cli/CLIAvatarModelCheckerTest.java @@ -241,7 +241,6 @@ public class CLIAvatarModelCheckerTest extends AbstractTest implements Interpret String expectedOutput = myutil.FileUtils.loadFileData(f); System.out.println("states=" + graph.getNbOfStates() + " transitions=" + graph.getNbOfTransitions()); - System.out.println("TEST " + graph.getNbOfStates()); assertTrue(graph.getNbOfStates() == 251); assertTrue(graph.getNbOfTransitions() > 700); assertTrue(graph.getNbOfTransitions() < 770); @@ -260,7 +259,7 @@ public class CLIAvatarModelCheckerTest extends AbstractTest implements Interpret /*for(int i=0; i<s1.length(); i++) { System.out.println(i + "\t" + s1.substring(i, i+1) + " " + s2.substring(i, i+1)); }*/ - System.out.println("S1: " + s1 + "\nS2: " + s2); + assertTrue(s1.equals(s2)); } -- GitLab