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