From c65ef4577ff0a1b86805cd10b959fc79070ab450 Mon Sep 17 00:00:00 2001 From: Sophie Coudert <sophie.coudert@telecom-paris.fr> Date: Wed, 5 Apr 2023 16:13:31 +0200 Subject: [PATCH] Avatar integration --- graphminimize/build.gradle | 1 + graphshow/build.gradle | 1 + launcher/build.gradle | 1 + rundse/build.gradle | 1 + simulationcontrol/build.gradle | 1 + .../avatartranslator/AvatarSyntaxChecker.java | 1 - .../AvatarIBSExpressionClass.java | 2 +- ...Parser.java => AvatarIBSOriginParser.java} | 6 +- .../intboolsolver/AvatarIBSStdParser.java | 102 ++++++++++++++++++ .../intboolsolver/AvatarIBSolver.java | 2 +- .../myutil/intboolsolver/IBSStdLexer.java | 76 ++++++------- .../myutil/intboolsolver/IBSStdParser.java | 75 ++++++++++++- .../intboolsolver/javacup/IBSStdLexer.jflex | 26 ++--- .../intboolsolver/javacup/IBSStdParser.jcup | 75 ++++++++++++- .../myutil/intboolsolver/javacup/test.tgz | Bin 2156 -> 0 bytes tiftranslator/build.gradle | 1 + tmltranslator/build.gradle | 1 + ttool-cli/build.gradle | 1 + ...st.java => AvatarIBSOriginParserTest.java} | 8 +- webcrawler/client/build.gradle | 1 + webcrawler/server/build.gradle | 1 + 21 files changed, 318 insertions(+), 65 deletions(-) rename src/main/java/avatartranslator/intboolsolver/{AvatarIBSParser.java => AvatarIBSOriginParser.java} (96%) create mode 100644 src/main/java/avatartranslator/intboolsolver/AvatarIBSStdParser.java delete mode 100644 src/main/java/myutil/intboolsolver/javacup/test.tgz rename ttool/src/test/java/avatartranslator/{AvatarIBSParserTest.java => AvatarIBSOriginParserTest.java} (98%) diff --git a/graphminimize/build.gradle b/graphminimize/build.gradle index 7b80aed762..a96b2cdc43 100644 --- a/graphminimize/build.gradle +++ b/graphminimize/build.gradle @@ -20,6 +20,7 @@ sourceSets { } dependencies { + implementation name: 'java_cup' compileOnly name: 'gs-core-2.0' compileOnly name: 'gs-algo-2.0' compileOnly name: 'gs-ui-swing-2.0' diff --git a/graphshow/build.gradle b/graphshow/build.gradle index d784aed857..7cfae83b48 100644 --- a/graphshow/build.gradle +++ b/graphshow/build.gradle @@ -15,6 +15,7 @@ sourceSets { } dependencies { + implementation name: 'java_cup' implementation name: 'gs-core-2.0' implementation name: 'gs-algo-2.0' implementation name: 'gs-ui-swing-2.0' diff --git a/launcher/build.gradle b/launcher/build.gradle index 1c07d24e9f..5a88f6c619 100644 --- a/launcher/build.gradle +++ b/launcher/build.gradle @@ -12,6 +12,7 @@ sourceSets { } dependencies { + implementation name: 'java_cup' implementation name: 'commons-codec-1.10' compileOnly name: 'commons-io-2.5' compileOnly name: 'jsoup-1.8.1' diff --git a/rundse/build.gradle b/rundse/build.gradle index 3727e52832..0b0b7ccd02 100644 --- a/rundse/build.gradle +++ b/rundse/build.gradle @@ -10,6 +10,7 @@ sourceSets { } dependencies { + implementation name: 'java_cup' compileOnly name: 'opencloud' compileOnly name: 'JavaPlot' compileOnly name: 'derbynet' diff --git a/simulationcontrol/build.gradle b/simulationcontrol/build.gradle index 7cafd684af..a88b8d7f0b 100644 --- a/simulationcontrol/build.gradle +++ b/simulationcontrol/build.gradle @@ -13,6 +13,7 @@ sourceSets { } dependencies { + implementation name: 'java_cup' implementation name: 'jsoup-1.8.1' } diff --git a/src/main/java/avatartranslator/AvatarSyntaxChecker.java b/src/main/java/avatartranslator/AvatarSyntaxChecker.java index ed5800c4fb..9a79c7c3f0 100644 --- a/src/main/java/avatartranslator/AvatarSyntaxChecker.java +++ b/src/main/java/avatartranslator/AvatarSyntaxChecker.java @@ -47,7 +47,6 @@ import compiler.tmlparser.TokenMgrError; import myutil.Conversion; import myutil.NameChecker; import myutil.TraceManager; -import avatartranslator.intboolsolver.AvatarIBSParser; import java.io.StringReader; import java.util.ArrayList; diff --git a/src/main/java/avatartranslator/intboolsolver/AvatarIBSExpressionClass.java b/src/main/java/avatartranslator/intboolsolver/AvatarIBSExpressionClass.java index 5043706c2d..cb571acc35 100644 --- a/src/main/java/avatartranslator/intboolsolver/AvatarIBSExpressionClass.java +++ b/src/main/java/avatartranslator/intboolsolver/AvatarIBSExpressionClass.java @@ -53,7 +53,7 @@ import myutil.intboolsolver.*; * <p> It is provided for documentation together with * {@link IBSStdClosedFormulaAttributeClass * IBSStdClosedFormulaAttribute} and - * {@link AvatarIBSParser + * {@link AvatarIBSOriginParser * IBSStdClosedFormulaSolver}}</p> * * <p>These three diff --git a/src/main/java/avatartranslator/intboolsolver/AvatarIBSParser.java b/src/main/java/avatartranslator/intboolsolver/AvatarIBSOriginParser.java similarity index 96% rename from src/main/java/avatartranslator/intboolsolver/AvatarIBSParser.java rename to src/main/java/avatartranslator/intboolsolver/AvatarIBSOriginParser.java index bb9e19d06e..d3c956ad68 100644 --- a/src/main/java/avatartranslator/intboolsolver/AvatarIBSParser.java +++ b/src/main/java/avatartranslator/intboolsolver/AvatarIBSOriginParser.java @@ -71,16 +71,16 @@ import myutil.intboolsolver.*; * @author Sophie Coudert */ -public class AvatarIBSParser extends IBSOriginParser< +public class AvatarIBSOriginParser extends IBSOriginParser< AvatarSpecification, AvatarBlock, AvatarStateMachineElement, SpecificationState, SpecificationBlock> { - public AvatarIBSParser() { + public AvatarIBSOriginParser() { super(new AvatarIBSAttributeClass(),new AvatarIBSExpressionClass()); } - public AvatarIBSParser( + public AvatarIBSOriginParser( IBSAttributeClass< AvatarSpecification, AvatarBlock, diff --git a/src/main/java/avatartranslator/intboolsolver/AvatarIBSStdParser.java b/src/main/java/avatartranslator/intboolsolver/AvatarIBSStdParser.java new file mode 100644 index 0000000000..1444f1b5ac --- /dev/null +++ b/src/main/java/avatartranslator/intboolsolver/AvatarIBSStdParser.java @@ -0,0 +1,102 @@ +/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille + * + * ludovic.apvrille AT enst.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + */ + +package avatartranslator.intboolsolver; + +import avatartranslator.AvatarBlock; +import avatartranslator.AvatarSpecification; +import avatartranslator.AvatarStateMachineElement; +import avatartranslator.modelchecker.SpecificationBlock; +import avatartranslator.modelchecker.SpecificationState; +import myutil.intboolsolver.*; + +/** + * class IBSStdClosedFormulaSolver is a complete implementation + * and instantiation of {@link IBSOriginParser + * IBSolver} for closed Formulas. + * + * <p> It is provided for documentation together with + * {@link IBSStdClosedFormulaAttributeClass + * IBSStdClosedFormulaAttributeClass} and + * {@link IBSStdClosedFormulaAttributeClass + * IBSStdClosedFormulaAttribute}}</p> + * + * <p>These three + * classes provides the same features as + * {@link IBSClosedFormulaAttributeClass + * IBSClosedFormulaAttribute}, + * {@link IBSClosedFormulaAttributeClass + * IBSClosedFormulaAttributeClass} and + * {@link IBSClosedFormulaParser + * IBSClosedFormulaSolver} (together).</p> + * + * Creation: 07/03/2023 + * + * @version 0.1 07/03/2023 + * @author Sophie Coudert + */ + +public class AvatarIBSStdParser extends IBSStdParser< + AvatarSpecification, + AvatarBlock, + AvatarStateMachineElement, + SpecificationState, + SpecificationBlock> { + public AvatarIBSStdParser() { + super(); + setAttributeClass(new AvatarIBSAttributeClass()); + setExpressionClass(new AvatarIBSExpressionClass()); + } + public AvatarIBSStdParser( + IBSAttributeClass< + AvatarSpecification, + AvatarBlock, + AvatarStateMachineElement, + SpecificationState, + SpecificationBlock> _c, + IBSExpressionClass< + AvatarSpecification, + AvatarBlock, + AvatarStateMachineElement, + SpecificationState, + SpecificationBlock> _e) { + super(); + setAttributeClass(_c); + setExpressionClass(_e); + } +} \ No newline at end of file diff --git a/src/main/java/avatartranslator/intboolsolver/AvatarIBSolver.java b/src/main/java/avatartranslator/intboolsolver/AvatarIBSolver.java index 44df3cfb76..a1742b1aef 100644 --- a/src/main/java/avatartranslator/intboolsolver/AvatarIBSolver.java +++ b/src/main/java/avatartranslator/intboolsolver/AvatarIBSolver.java @@ -4,5 +4,5 @@ public class AvatarIBSolver { public static AvatarIBSAttributeClass attrC = new AvatarIBSAttributeClass(); protected static AvatarIBSExpressionClass exprC = new AvatarIBSExpressionClass(); - public static AvatarIBSParser parser = new AvatarIBSParser(attrC,exprC); + public static AvatarIBSStdParser parser = new AvatarIBSStdParser(attrC,exprC); } diff --git a/src/main/java/myutil/intboolsolver/IBSStdLexer.java b/src/main/java/myutil/intboolsolver/IBSStdLexer.java index deb1a10840..214a412818 100644 --- a/src/main/java/myutil/intboolsolver/IBSStdLexer.java +++ b/src/main/java/myutil/intboolsolver/IBSStdLexer.java @@ -1,4 +1,4 @@ -/* The following code was generated by JFlex 1.4.3 on 05/04/2023 14:20 */ +/* The following code was generated by JFlex 1.4.3 on 05/04/2023 15:54 */ package myutil.intboolsolver; import java_cup.runtime.*; @@ -8,7 +8,7 @@ import java.util.HashSet; /** * This class is a scanner generated by * <a href="http://www.jflex.de/">JFlex</a> 1.4.3 - * on 05/04/2023 14:20 from the specification file + * on 05/04/2023 15:54 from the specification file * <tt>IBSStdLexer.jflex</tt> */ class IBSStdLexer< Spec extends IBSParamSpec, Comp extends IBSParamComp, State extends IBSParamState, SpecState extends IBSParamSpecState, CompState extends IBSParamCompState > implements java_cup.runtime.Scanner { @@ -251,24 +251,24 @@ class IBSStdLexer< Spec extends IBSParamSpec, Comp extends IBSParamComp, State e private boolean zzEOFDone; /* user code: */ -private IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState> attrC; +private IBSAttributeClass<Spec,Comp,State,SpecState,CompState> attrC; private IBSExpressionClass<Spec,Comp,State,SpecState,CompState> exprC; private final HashSet<String> badIdents = new HashSet<String>(); public IBSStdLexer(){} -public void setAttributeClass( IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState> _attrC) { attrC = _attrC; } -public IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState> getAttributeClass() { return attrC; } +public void setAttributeClass( IBSAttributeClass<Spec,Comp,State,SpecState,CompState> _attrC) { attrC = _attrC; } +public IBSAttributeClass<Spec,Comp,State,SpecState,CompState> getAttributeClass() { return attrC; } public void setExpressionClass( IBSExpressionClass<Spec,Comp,State,SpecState,CompState> _exprC) { exprC = _exprC; } public IBSExpressionClass<Spec,Comp,State,SpecState,CompState> getExpressionClass() { return exprC; } public HashSet<String> getBadIdents() { return badIdents; } public void clearBadIdents() { badIdents.clear(); } private abstract class AttrHandler { - public abstract IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s) throws Exception; + public abstract IBSAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s) throws Exception; } private class ClosedAttrHandler extends AttrHandler { ClosedAttrHandler(){}; - public IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s) + public IBSAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s) throws Exception { badIdents.add(_s); throw new Exception ("Ident in closed expression: " + _s); } @@ -276,14 +276,14 @@ private class ClosedAttrHandler extends AttrHandler { private class SpecAttrHandler extends AttrHandler { private Spec spec; SpecAttrHandler(Spec _spec){ spec = _spec; } - public IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s){ + public IBSAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s){ return attrC.getTypedAttribute(spec,_s); } } private class CompAttrHandler extends AttrHandler { private Comp comp; CompAttrHandler(Comp _comp){ comp = _comp; } - public IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s){ + public IBSAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s){ return attrC.getTypedAttribute(comp,_s); } } @@ -614,86 +614,86 @@ public void init(Comp _comp, String _s) throws java.io.IOException { attrHandler { return new Symbol(IBSStdParserSym.LT); } case 26: break; + case 3: + { IBSAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute attr = + attrHandler.getTypedAttribute(yytext()); + switch(attr.getType()) { + case IBSAttributeClass.NullAttr : badIdents.add(yytext()); throw new Exception ("Bad Ident : " + yytext()); + case IBSAttributeClass.BoolConst : return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bConst(attr.getConstant()!=0))); + case IBSAttributeClass.IntConst : return new Symbol(IBSStdParserSym.INT, Integer.valueOf(exprC.make_iConst(attr.getConstant()))); + case IBSAttributeClass.BoolAttr : return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bVar(attr.getAttribute()))); + case IBSAttributeClass.IntAttr : return new Symbol(IBSStdParserSym.INT, Integer.valueOf(exprC.make_iVar(attr.getAttribute()))); + default : throw new Error ("Lexer, BUG : bad attribute type"); + } + } + case 27: break; case 19: { return new Symbol(IBSStdParserSym.GEQ); } - case 27: break; + case 28: break; case 8: { return new Symbol(IBSStdParserSym.MOD); } - case 28: break; + case 29: break; case 11: { return new Symbol(IBSStdParserSym.GT); } - case 29: break; + case 30: break; case 18: { return new Symbol(IBSStdParserSym.LEQ); } - case 30: break; + case 31: break; case 17: { return new Symbol(IBSStdParserSym.EQ); } - case 31: break; + case 32: break; case 14: { return new Symbol(IBSStdParserSym.OR); } - case 32: break; + case 33: break; case 4: { return new Symbol(IBSStdParserSym.PLUS); } - case 33: break; + case 34: break; case 21: { return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bConst(false))); } - case 34: break; + case 35: break; case 13: { return new Symbol(IBSStdParserSym.RPAR); } - case 35: break; + case 36: break; case 5: { return new Symbol(IBSStdParserSym.MINUS); } - case 36: break; + case 37: break; case 22: { yybegin(INTBOOL); return new Symbol(IBSStdParserSym.PARSE_BOOL); } - case 37: break; + case 38: break; case 15: { return new Symbol(IBSStdParserSym.AND); } - case 38: break; + case 39: break; case 9: { return new Symbol(IBSStdParserSym.NOT); } - case 39: break; + case 40: break; case 7: { return new Symbol(IBSStdParserSym.DIV); } - case 40: break; + case 41: break; case 6: { return new Symbol(IBSStdParserSym.MULT); } - case 41: break; + case 42: break; case 12: { return new Symbol(IBSStdParserSym.LPAR); } - case 42: break; + case 43: break; case 20: { return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bConst(true))); } - case 43: break; - case 3: - { IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute attr = - attrHandler.getTypedAttribute(yytext()); - switch(attr.getType()) { - case IBSStdAttributeClass.NullAttr : badIdents.add(yytext()); throw new Exception ("Bad Ident : " + yytext()); - case IBSStdAttributeClass.BoolConst : return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bConst(attr.getConstant()!=0))); - case IBSStdAttributeClass.IntConst : return new Symbol(IBSStdParserSym.INT, Integer.valueOf(exprC.make_iConst(attr.getConstant()))); - case IBSStdAttributeClass.BoolAttr : return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bVar(attr.getAttribute()))); - case IBSStdAttributeClass.IntAttr : return new Symbol(IBSStdParserSym.INT, Integer.valueOf(exprC.make_iVar(attr.getAttribute()))); - default : throw new Error ("Lexer, BUG : bad attribute type"); - } - } case 44: break; case 2: { try { return new Symbol(IBSStdParserSym.INT, Integer.valueOf(exprC.make_iConst(Integer.parseInt(yytext()))));} diff --git a/src/main/java/myutil/intboolsolver/IBSStdParser.java b/src/main/java/myutil/intboolsolver/IBSStdParser.java index 87234659b0..5431c49dfe 100644 --- a/src/main/java/myutil/intboolsolver/IBSStdParser.java +++ b/src/main/java/myutil/intboolsolver/IBSStdParser.java @@ -216,9 +216,9 @@ public class IBSStdParser< Spec extends IBSParamSpec, Comp extends IBSParamComp, public void setLexer(IBSStdLexer<Spec,Comp,State,SpecState,CompState> _lexer){ lexer=_lexer; setScanner(_lexer); } - public void setAttributeClass(IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState> _c){ lexer.setAttributeClass(_c); } + public void setAttributeClass(IBSAttributeClass<Spec,Comp,State,SpecState,CompState> _c){ lexer.setAttributeClass(_c); } - public IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState> getAttributeClass(){ return lexer.getAttributeClass(); } + public IBSAttributeClass<Spec,Comp,State,SpecState,CompState> getAttributeClass(){ return lexer.getAttributeClass(); } public void setExpressionClass(IBSExpressionClass<Spec,Comp,State,SpecState,CompState> _c){ lexer.setExpressionClass(_c); } @@ -296,6 +296,77 @@ public class IBSStdParser< Spec extends IBSParamSpec, Comp extends IBSParamComp, return null; } + // A DEPLACER ... + + public int indexOfVariable(String expr, String variable) { + int index; + String tmp = expr; + int removed = 0; + //System.out.println("\nHandling expr: " + expr); + + while ((index = tmp.indexOf(variable)) > -1) { + char c1, c2; + if (index > 0) { + c1 = tmp.charAt(index - 1); + } else { + c1 = ' '; + } + + if (index + variable.length() < tmp.length()) + c2 = tmp.charAt(index + variable.length()); + else + c2 = ' '; + + //System.out.println("tmp=" + tmp + " c1=" + c1 + " c2=" + c2); + + if (!(Character.isLetterOrDigit(c1) || (c1 == '_'))) { + if (!(Character.isLetterOrDigit(c2) || (c2 == '_'))) { + //System.out.println("Found at index=" + index + " returnedIndex=" + (index+removed)); + return index + removed; + } + } + tmp = tmp.substring(index + variable.length(), tmp.length()); + //System.out.println("tmp=" + tmp); + removed = index + variable.length(); + if (tmp.length() == 0) { + return -1; + } + // We cut until we find a non alphanumerical character + while (Character.isLetterOrDigit(tmp.charAt(0)) || (tmp.charAt(0) == '_')) { + tmp = tmp.substring(1, tmp.length()); + if (tmp.length() == 0) { + return -1; + } + removed++; + } + //System.out.println("after remove: tmp=" + tmp); + + } + return -1; + } + + + public String replaceVariable(String expr, String oldVariable, String newVariable) { + if (oldVariable.compareTo(newVariable) == 0) { + return expr; + } + int index; + String tmp = expr; + + while ((index = indexOfVariable(tmp, oldVariable)) > -1) { + String tmp1 = ""; + if (index > 0) { + tmp1 = tmp.substring(0, index); + } + tmp1 += newVariable; + tmp1 += tmp.substring(index + oldVariable.length(), tmp.length()); + tmp = tmp1; + } + + return tmp; + } + + /** Cup generated class to encapsulate user supplied action code.*/ class CUP$IBSStdParser$actions { diff --git a/src/main/java/myutil/intboolsolver/javacup/IBSStdLexer.jflex b/src/main/java/myutil/intboolsolver/javacup/IBSStdLexer.jflex index 119873a5eb..e7211054b1 100644 --- a/src/main/java/myutil/intboolsolver/javacup/IBSStdLexer.jflex +++ b/src/main/java/myutil/intboolsolver/javacup/IBSStdLexer.jflex @@ -14,24 +14,24 @@ import java.util.HashSet; %yylexthrow Exception %{ -private IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState> attrC; +private IBSAttributeClass<Spec,Comp,State,SpecState,CompState> attrC; private IBSExpressionClass<Spec,Comp,State,SpecState,CompState> exprC; private final HashSet<String> badIdents = new HashSet<String>(); public IBSStdLexer(){} -public void setAttributeClass( IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState> _attrC) { attrC = _attrC; } -public IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState> getAttributeClass() { return attrC; } +public void setAttributeClass( IBSAttributeClass<Spec,Comp,State,SpecState,CompState> _attrC) { attrC = _attrC; } +public IBSAttributeClass<Spec,Comp,State,SpecState,CompState> getAttributeClass() { return attrC; } public void setExpressionClass( IBSExpressionClass<Spec,Comp,State,SpecState,CompState> _exprC) { exprC = _exprC; } public IBSExpressionClass<Spec,Comp,State,SpecState,CompState> getExpressionClass() { return exprC; } public HashSet<String> getBadIdents() { return badIdents; } public void clearBadIdents() { badIdents.clear(); } private abstract class AttrHandler { - public abstract IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s) throws Exception; + public abstract IBSAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s) throws Exception; } private class ClosedAttrHandler extends AttrHandler { ClosedAttrHandler(){}; - public IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s) + public IBSAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s) throws Exception { badIdents.add(_s); throw new Exception ("Ident in closed expression: " + _s); } @@ -39,14 +39,14 @@ private class ClosedAttrHandler extends AttrHandler { private class SpecAttrHandler extends AttrHandler { private Spec spec; SpecAttrHandler(Spec _spec){ spec = _spec; } - public IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s){ + public IBSAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s){ return attrC.getTypedAttribute(spec,_s); } } private class CompAttrHandler extends AttrHandler { private Comp comp; CompAttrHandler(Comp _comp){ comp = _comp; } - public IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s){ + public IBSAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute getTypedAttribute(String _s){ return attrC.getTypedAttribute(comp,_s); } } @@ -93,14 +93,14 @@ Identifier = [a-zA-Z_][a-zA-Z0-9_\.]* ">=" { return new Symbol(IBSStdParserSym.GEQ); } "(" { return new Symbol(IBSStdParserSym.LPAR); } ")" { return new Symbol(IBSStdParserSym.RPAR); } - {Identifier} { IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute attr = + {Identifier} { IBSAttributeClass<Spec,Comp,State,SpecState,CompState>.TypedAttribute attr = attrHandler.getTypedAttribute(yytext()); switch(attr.getType()) { - case IBSStdAttributeClass.NullAttr : badIdents.add(yytext()); throw new Exception ("Bad Ident : " + yytext()); - case IBSStdAttributeClass.BoolConst : return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bConst(attr.getConstant()!=0))); - case IBSStdAttributeClass.IntConst : return new Symbol(IBSStdParserSym.INT, Integer.valueOf(exprC.make_iConst(attr.getConstant()))); - case IBSStdAttributeClass.BoolAttr : return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bVar(attr.getAttribute()))); - case IBSStdAttributeClass.IntAttr : return new Symbol(IBSStdParserSym.INT, Integer.valueOf(exprC.make_iVar(attr.getAttribute()))); + case IBSAttributeClass.NullAttr : badIdents.add(yytext()); throw new Exception ("Bad Ident : " + yytext()); + case IBSAttributeClass.BoolConst : return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bConst(attr.getConstant()!=0))); + case IBSAttributeClass.IntConst : return new Symbol(IBSStdParserSym.INT, Integer.valueOf(exprC.make_iConst(attr.getConstant()))); + case IBSAttributeClass.BoolAttr : return new Symbol(IBSStdParserSym.BOOL, Integer.valueOf(exprC.make_bVar(attr.getAttribute()))); + case IBSAttributeClass.IntAttr : return new Symbol(IBSStdParserSym.INT, Integer.valueOf(exprC.make_iVar(attr.getAttribute()))); default : throw new Error ("Lexer, BUG : bad attribute type"); } } diff --git a/src/main/java/myutil/intboolsolver/javacup/IBSStdParser.jcup b/src/main/java/myutil/intboolsolver/javacup/IBSStdParser.jcup index 9c994c47e0..57896f8647 100644 --- a/src/main/java/myutil/intboolsolver/javacup/IBSStdParser.jcup +++ b/src/main/java/myutil/intboolsolver/javacup/IBSStdParser.jcup @@ -15,9 +15,9 @@ parser code {: public void setLexer(IBSStdLexer<Spec,Comp,State,SpecState,CompState> _lexer){ lexer=_lexer; setScanner(_lexer); } - public void setAttributeClass(IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState> _c){ lexer.setAttributeClass(_c); } + public void setAttributeClass(IBSAttributeClass<Spec,Comp,State,SpecState,CompState> _c){ lexer.setAttributeClass(_c); } - public IBSStdAttributeClass<Spec,Comp,State,SpecState,CompState> getAttributeClass(){ return lexer.getAttributeClass(); } + public IBSAttributeClass<Spec,Comp,State,SpecState,CompState> getAttributeClass(){ return lexer.getAttributeClass(); } public void setExpressionClass(IBSExpressionClass<Spec,Comp,State,SpecState,CompState> _c){ lexer.setExpressionClass(_c); } @@ -94,6 +94,77 @@ parser code {: // if (index==-1) syntaxError=true; else syntaxError=false; return null; } + + // A DEPLACER ... + + public int indexOfVariable(String expr, String variable) { + int index; + String tmp = expr; + int removed = 0; + //System.out.println("\nHandling expr: " + expr); + + while ((index = tmp.indexOf(variable)) > -1) { + char c1, c2; + if (index > 0) { + c1 = tmp.charAt(index - 1); + } else { + c1 = ' '; + } + + if (index + variable.length() < tmp.length()) + c2 = tmp.charAt(index + variable.length()); + else + c2 = ' '; + + //System.out.println("tmp=" + tmp + " c1=" + c1 + " c2=" + c2); + + if (!(Character.isLetterOrDigit(c1) || (c1 == '_'))) { + if (!(Character.isLetterOrDigit(c2) || (c2 == '_'))) { + //System.out.println("Found at index=" + index + " returnedIndex=" + (index+removed)); + return index + removed; + } + } + tmp = tmp.substring(index + variable.length(), tmp.length()); + //System.out.println("tmp=" + tmp); + removed = index + variable.length(); + if (tmp.length() == 0) { + return -1; + } + // We cut until we find a non alphanumerical character + while (Character.isLetterOrDigit(tmp.charAt(0)) || (tmp.charAt(0) == '_')) { + tmp = tmp.substring(1, tmp.length()); + if (tmp.length() == 0) { + return -1; + } + removed++; + } + //System.out.println("after remove: tmp=" + tmp); + + } + return -1; + } + + + public String replaceVariable(String expr, String oldVariable, String newVariable) { + if (oldVariable.compareTo(newVariable) == 0) { + return expr; + } + int index; + String tmp = expr; + + while ((index = indexOfVariable(tmp, oldVariable)) > -1) { + String tmp1 = ""; + if (index > 0) { + tmp1 = tmp.substring(0, index); + } + tmp1 += newVariable; + tmp1 += tmp.substring(index + oldVariable.length(), tmp.length()); + tmp = tmp1; + } + + return tmp; + } + :} diff --git a/src/main/java/myutil/intboolsolver/javacup/test.tgz b/src/main/java/myutil/intboolsolver/javacup/test.tgz deleted file mode 100644 index 3af7ff39682d0d9e7298327feafd63bfb2ba99ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2156 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 Sfe(!z<C~g47cc}cFaQ7reMv0< diff --git a/tiftranslator/build.gradle b/tiftranslator/build.gradle index ba45b1d91d..36c3422678 100644 --- a/tiftranslator/build.gradle +++ b/tiftranslator/build.gradle @@ -17,6 +17,7 @@ sourceSets { } dependencies { + implementation name: 'java_cup' compileOnly name: 'commons-io-2.5' compileOnly name: 'jsoup-1.8.1' compileOnly name: 'commons-codec-1.10' diff --git a/tmltranslator/build.gradle b/tmltranslator/build.gradle index 91195ae974..61d653a683 100644 --- a/tmltranslator/build.gradle +++ b/tmltranslator/build.gradle @@ -10,6 +10,7 @@ sourceSets { } dependencies { + implementation name: 'java_cup' compileOnly name: 'opencloud' compileOnly name: 'JavaPlot' compileOnly name: 'derbynet' diff --git a/ttool-cli/build.gradle b/ttool-cli/build.gradle index a5e309691b..681b99068f 100644 --- a/ttool-cli/build.gradle +++ b/ttool-cli/build.gradle @@ -19,6 +19,7 @@ sourceSets { } dependencies { + implementation name: 'java_cup' implementation name: 'opencloud' implementation name: 'JavaPlot' implementation name: 'derbynet' diff --git a/ttool/src/test/java/avatartranslator/AvatarIBSParserTest.java b/ttool/src/test/java/avatartranslator/AvatarIBSOriginParserTest.java similarity index 98% rename from ttool/src/test/java/avatartranslator/AvatarIBSParserTest.java rename to ttool/src/test/java/avatartranslator/AvatarIBSOriginParserTest.java index 98f149e71f..68af7a033f 100644 --- a/ttool/src/test/java/avatartranslator/AvatarIBSParserTest.java +++ b/ttool/src/test/java/avatartranslator/AvatarIBSOriginParserTest.java @@ -44,7 +44,7 @@ */ package avatartranslator; import avatartranslator.intboolsolver.AvatarIBSExpressionClass; -import avatartranslator.intboolsolver.AvatarIBSParser; +import avatartranslator.intboolsolver.AvatarIBSOriginParser; import avatartranslator.intboolsolver.AvatarIBSAttributeClass; import avatartranslator.modelchecker.SpecificationBlock; import avatartranslator.modelchecker.SpecificationState; @@ -56,15 +56,15 @@ import java.util.ArrayList; import static org.junit.Assert.*; -public class AvatarIBSParserTest { +public class AvatarIBSOriginParserTest { private AvatarSpecification as; private AvatarBlock block1, block2; private AvatarIBSAttributeClass attC = new AvatarIBSAttributeClass(); private AvatarIBSExpressionClass expr = new AvatarIBSExpressionClass(); - private AvatarIBSParser parser = new AvatarIBSParser(attC,expr); - public AvatarIBSParserTest() { + private AvatarIBSOriginParser parser = new AvatarIBSOriginParser(attC,expr); + public AvatarIBSOriginParserTest() { } @Before diff --git a/webcrawler/client/build.gradle b/webcrawler/client/build.gradle index c8b3d8c5b5..389fdee413 100644 --- a/webcrawler/client/build.gradle +++ b/webcrawler/client/build.gradle @@ -12,6 +12,7 @@ sourceSets { } dependencies { + implementation name: 'java_cup' compileOnly name: 'commons-codec-1.10' compileOnly name: 'jsoup-1.8.1' compileOnly name: 'commons-io-2.5' diff --git a/webcrawler/server/build.gradle b/webcrawler/server/build.gradle index 9ee6566d14..98cf4fc26e 100644 --- a/webcrawler/server/build.gradle +++ b/webcrawler/server/build.gradle @@ -12,6 +12,7 @@ sourceSets { } dependencies { + implementation name: 'java_cup' compileOnly name: 'commons-codec-1.10' compileOnly name: 'jsoup-1.8.1' implementation name: 'commons-io-2.5' -- GitLab