diff --git a/AlgebraicDataflowArchitectureModel/models/NemophilaAccounts.model b/AlgebraicDataflowArchitectureModel/models/NemophilaAccounts.model index c2cc23a..0158d26 100644 --- a/AlgebraicDataflowArchitectureModel/models/NemophilaAccounts.model +++ b/AlgebraicDataflowArchitectureModel/models/NemophilaAccounts.model @@ -36,7 +36,7 @@ out accounts.{sendId}.requesting(sendRequesting:Map, sync1(recvId:Str, sendRequested:Map, recvRequesting:Map, sendFriends:Map)) = if(contains(sendFriends:Map, recvId) == true, sendRequesting, insert(sendRequesting:Map, recvId:Str, true)) - out accounts.{recvId}.requested(recvRequested:Map, sync1(recvId:Str, sendRequested:Map, recvRequesting:Map, sendFriends:Map)) = if(ontains(sendFriends:Map, recvId) == true, + out accounts.{recvId}.requested(recvRequested:Map, sync1(recvId:Str, sendRequested:Map, recvRequesting:Map, sendFriends:Map)) = if(contains(sendFriends:Map, recvId) == true, recvRequested, insert(recvRequested:Map, sendId:Str, true)) } diff --git a/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromDataFlowGraph.java b/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromDataFlowGraph.java index 51abab3..2586162 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromDataFlowGraph.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromDataFlowGraph.java @@ -262,7 +262,7 @@ ((Variable) param).setType(var.getType()); } } - params.add(param.toImplementation(null)); + params.add(param.toImplementation(new String[] {""})); } else { params.add(var.getName()); } @@ -1496,7 +1496,7 @@ } resExp = ((Term) resExp).getChild(0); } - String resourceAccess = resExp.toImplementation(new String[] {null}); + String resourceAccess = resExp.toImplementation(new String[] {""}); // Values of channel parameters. for (Selector selector: ch.getAllSelectors()) { if (selector.getExpression() instanceof Variable) { diff --git a/AlgebraicDataflowArchitectureModel/src/generators/JavaMethodBodyGenerator.java b/AlgebraicDataflowArchitectureModel/src/generators/JavaMethodBodyGenerator.java index 59de1bd..c56d194 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/JavaMethodBodyGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/JavaMethodBodyGenerator.java @@ -216,7 +216,7 @@ } v++; } - String ifStatement = "if (" + conditions.toImplementation(new String[] {})+ ") {\n"; + String ifStatement = "if (" + conditions.toImplementation(new String[] {""})+ ") {\n"; update.addFirstStatement(ifStatement + "\t" + updateStatement.replace("\n", "\n\t") + "\n}"); } } @@ -632,7 +632,7 @@ composerSub = composer; } composer.setType(stateGetter.getReturnType()); - String[] sideEffects = new String[] {null}; + String[] sideEffects = new String[] {""}; String returnValue = composer.toImplementation(sideEffects); if (sideEffects[0] != null) { stateGetter.addStatement(sideEffects[0] + "return " + returnValue+ ";"); diff --git a/AlgebraicDataflowArchitectureModel/src/generators/JerseyMethodBodyGenerator.java b/AlgebraicDataflowArchitectureModel/src/generators/JerseyMethodBodyGenerator.java index 47f4e58..65d2dd7 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/JerseyMethodBodyGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/JerseyMethodBodyGenerator.java @@ -237,7 +237,7 @@ } v++; } - String ifStatement = "if (" + conditions.toImplementation(new String[] {})+ ") {\n"; + String ifStatement = "if (" + conditions.toImplementation(new String[] {""})+ ") {\n"; update.addFirstStatement(ifStatement + "\t" + updateStatement.replace("\n", "\n\t") + "\n}"); } } @@ -281,7 +281,7 @@ } resExp = ((Term) resExp).getChild(0); } - String resourceAccess = resExp.toImplementation(new String[] {null}); + String resourceAccess = resExp.toImplementation(new String[] {""}); int v = 0; for (VariableDeclaration var: update2.getParameters()) { if (v < out.getResource().getPathParams().size()) { @@ -977,7 +977,7 @@ } resExp = ((Term) resExp).getChild(0); } - String resourceAccess = resExp.toImplementation(new String[] {null}); + String resourceAccess = resExp.toImplementation(new String[] {""}); // Values of channel parameters. for (Selector selector: ch.getAllSelectors()) { if (selector.getExpression() instanceof Variable) { diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Field.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Field.java index f51b3c4..6702d3f 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/algebra/Field.java +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Field.java @@ -14,7 +14,8 @@ } public Field(String name, Type type) { - super(name, type); + super(name); + symbol.setSignature(new Type[] {type}); } public Field(Symbol symbol) { @@ -22,7 +23,7 @@ } public Type getType() { - if (symbol.getSignature().length >= 1) { + if (symbol.getSignature() != null && symbol.getSignature().length >= 1) { return symbol.getSignature()[0]; } return null; diff --git a/AlgebraicDataflowArchitectureModel/src/models/algebra/Parameter.java b/AlgebraicDataflowArchitectureModel/src/models/algebra/Parameter.java index 739ab80..ab84998 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/algebra/Parameter.java +++ b/AlgebraicDataflowArchitectureModel/src/models/algebra/Parameter.java @@ -12,7 +12,8 @@ } public Parameter(String name, Type type) { - super(name, type); + super(name); + symbol.setSignature(new Type[] {type}); } public Parameter(Symbol symbol) { @@ -20,7 +21,7 @@ } public Type getType() { - if (symbol.getSignature().length >= 1) { + if (symbol.getSignature() != null && symbol.getSignature().length >= 1) { return symbol.getSignature()[0]; } return null; diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/DataConstraintModel.java b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/DataConstraintModel.java index 555f07d..3a3de81 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/DataConstraintModel.java +++ b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/DataConstraintModel.java @@ -67,16 +67,22 @@ Constant arg1 = (Constant) args.get(1); String sArg0 = arg0.getSymbol().toString(); String sArg1 = arg1.getSymbol().toString(); - if (arg0.getType().equals(typeDouble) || arg1.getType().equals(typeDouble)) { + if (arg0.getType() != null && arg1.getType() != null) { + if (arg0.getType().equals(typeDouble) || arg1.getType().equals(typeDouble)) { + return new Constant(Double.toString(Double.parseDouble(sArg0) + Double.parseDouble(sArg1)), typeDouble); + } else if (arg0.getType().equals(typeFloat) || arg1.getType().equals(typeFloat)) { + return new Constant(Float.toString(Float.parseFloat(sArg0) + Float.parseFloat(sArg1)), typeFloat); + } else if (arg0.getType().equals(typeLong) || arg1.getType().equals(typeLong)) { + return new Constant(Long.toString(Long.parseLong(sArg0) + Long.parseLong(sArg1)), typeLong); + } else if (arg0.getType().equals(typeInt) || arg1.getType().equals(typeInt)) { + return new Constant(Integer.toString(Integer.parseInt(sArg0) + Integer.parseInt(sArg1)), typeInt); + } + } + if (sArg0.contains(Parser.DOT) || sArg1.contains(Parser.DOT)) { return new Constant(Double.toString(Double.parseDouble(sArg0) + Double.parseDouble(sArg1)), typeDouble); - } else if (arg0.getType().equals(typeFloat) || arg1.getType().equals(typeFloat)) { - return new Constant(Float.toString(Float.parseFloat(sArg0) + Float.parseFloat(sArg1)), typeFloat); - } else if (arg0.getType().equals(typeLong) || arg1.getType().equals(typeLong)) { - return new Constant(Long.toString(Long.parseLong(sArg0) + Long.parseLong(sArg1)), typeLong); - } else if (arg0.getType().equals(typeInt) || arg1.getType().equals(typeInt)) { + } else { return new Constant(Integer.toString(Integer.parseInt(sArg0) + Integer.parseInt(sArg1)), typeInt); } - return new Constant(Integer.toString(Integer.parseInt(sArg0) + Integer.parseInt(sArg1))); } }); public static final Symbol mul = new Symbol(Parser.MUL, 2, Symbol.Type.INFIX, new Symbol.ICalculator() { @@ -92,16 +98,22 @@ Constant arg1 = (Constant) args.get(1); String sArg0 = arg0.getSymbol().toString(); String sArg1 = arg1.getSymbol().toString(); - if (arg0.getType().equals(typeDouble) || arg1.getType().equals(typeDouble)) { + if (arg0.getType() != null && arg1.getType() != null) { + if (arg0.getType().equals(typeDouble) || arg1.getType().equals(typeDouble)) { + return new Constant(Double.toString(Double.parseDouble(sArg0) * Double.parseDouble(sArg1)), typeDouble); + } else if (arg0.getType().equals(typeFloat) || arg1.getType().equals(typeFloat)) { + return new Constant(Float.toString(Float.parseFloat(sArg0) * Float.parseFloat(sArg1)), typeFloat); + } else if (arg0.getType().equals(typeLong) || arg1.getType().equals(typeLong)) { + return new Constant(Long.toString(Long.parseLong(sArg0) * Long.parseLong(sArg1)), typeLong); + } else if (arg0.getType().equals(typeInt) || arg1.getType().equals(typeInt)) { + return new Constant(Integer.toString(Integer.parseInt(sArg0) * Integer.parseInt(sArg1)), typeInt); + } + } + if (sArg0.contains(Parser.DOT) || sArg1.contains(Parser.DOT)) { return new Constant(Double.toString(Double.parseDouble(sArg0) * Double.parseDouble(sArg1)), typeDouble); - } else if (arg0.getType().equals(typeFloat) || arg1.getType().equals(typeFloat)) { - return new Constant(Float.toString(Float.parseFloat(sArg0) * Float.parseFloat(sArg1)), typeFloat); - } else if (arg0.getType().equals(typeLong) || arg1.getType().equals(typeLong)) { - return new Constant(Long.toString(Long.parseLong(sArg0) * Long.parseLong(sArg1)), typeLong); - } else if (arg0.getType().equals(typeInt) || arg1.getType().equals(typeInt)) { + } else { return new Constant(Integer.toString(Integer.parseInt(sArg0) * Integer.parseInt(sArg1)), typeInt); } - return new Constant(Integer.toString(Integer.parseInt(sArg0) * Integer.parseInt(sArg1))); } }); public static final Symbol sub = new Symbol(Parser.SUB, 2, Symbol.Type.INFIX, new Symbol.ICalculator() { @@ -117,16 +129,22 @@ Constant arg1 = (Constant) args.get(1); String sArg0 = arg0.getSymbol().toString(); String sArg1 = arg1.getSymbol().toString(); - if (arg0.getType().equals(typeDouble) || arg1.getType().equals(typeDouble)) { + if (arg0.getType() != null && arg1.getType() != null) { + if (arg0.getType().equals(typeDouble) || arg1.getType().equals(typeDouble)) { + return new Constant(Double.toString(Double.parseDouble(sArg0) - Double.parseDouble(sArg1)), typeDouble); + } else if (arg0.getType().equals(typeFloat) || arg1.getType().equals(typeFloat)) { + return new Constant(Float.toString(Float.parseFloat(sArg0) - Float.parseFloat(sArg1)), typeFloat); + } else if (arg0.getType().equals(typeLong) || arg1.getType().equals(typeLong)) { + return new Constant(Long.toString(Long.parseLong(sArg0) - Long.parseLong(sArg1)), typeLong); + } else if (arg0.getType().equals(typeInt) || arg1.getType().equals(typeInt)) { + return new Constant(Integer.toString(Integer.parseInt(sArg0) - Integer.parseInt(sArg1)), typeInt); + } + } + if (sArg0.contains(Parser.DOT) || sArg1.contains(Parser.DOT)) { return new Constant(Double.toString(Double.parseDouble(sArg0) - Double.parseDouble(sArg1)), typeDouble); - } else if (arg0.getType().equals(typeFloat) || arg1.getType().equals(typeFloat)) { - return new Constant(Float.toString(Float.parseFloat(sArg0) - Float.parseFloat(sArg1)), typeFloat); - } else if (arg0.getType().equals(typeLong) || arg1.getType().equals(typeLong)) { - return new Constant(Long.toString(Long.parseLong(sArg0) - Long.parseLong(sArg1)), typeLong); - } else if (arg0.getType().equals(typeInt) || arg1.getType().equals(typeInt)) { + } else { return new Constant(Integer.toString(Integer.parseInt(sArg0) - Integer.parseInt(sArg1)), typeInt); } - return new Constant(Integer.toString(Integer.parseInt(sArg0) - Integer.parseInt(sArg1))); } }); public static final Symbol div = new Symbol(Parser.DIV, 2, Symbol.Type.INFIX, new Symbol.ICalculator() { @@ -142,16 +160,22 @@ Constant arg1 = (Constant) args.get(1); String sArg0 = arg0.getSymbol().toString(); String sArg1 = arg1.getSymbol().toString(); - if (arg0.getType().equals(typeDouble) || arg1.getType().equals(typeDouble)) { + if (arg0.getType() != null && arg1.getType() != null) { + if (arg0.getType().equals(typeDouble) || arg1.getType().equals(typeDouble)) { + return new Constant(Double.toString(Double.parseDouble(sArg0) / Double.parseDouble(sArg1)), typeDouble); + } else if (arg0.getType().equals(typeFloat) || arg1.getType().equals(typeFloat)) { + return new Constant(Float.toString(Float.parseFloat(sArg0) / Float.parseFloat(sArg1)), typeFloat); + } else if (arg0.getType().equals(typeLong) || arg1.getType().equals(typeLong)) { + return new Constant(Long.toString(Long.parseLong(sArg0) / Long.parseLong(sArg1)), typeLong); + } else if (arg0.getType().equals(typeInt) || arg1.getType().equals(typeInt)) { + return new Constant(Integer.toString(Integer.parseInt(sArg0) / Integer.parseInt(sArg1)), typeInt); + } + } + if (sArg0.contains(Parser.DOT) || sArg1.contains(Parser.DOT)) { return new Constant(Double.toString(Double.parseDouble(sArg0) / Double.parseDouble(sArg1)), typeDouble); - } else if (arg0.getType().equals(typeFloat) || arg1.getType().equals(typeFloat)) { - return new Constant(Float.toString(Float.parseFloat(sArg0) / Float.parseFloat(sArg1)), typeFloat); - } else if (arg0.getType().equals(typeLong) || arg1.getType().equals(typeLong)) { - return new Constant(Long.toString(Long.parseLong(sArg0) / Long.parseLong(sArg1)), typeLong); - } else if (arg0.getType().equals(typeInt) || arg1.getType().equals(typeInt)) { + } else { return new Constant(Integer.toString(Integer.parseInt(sArg0) / Integer.parseInt(sArg1)), typeInt); } - return new Constant(Integer.toString(Integer.parseInt(sArg0) / Integer.parseInt(sArg1))); } }); public static final Symbol mod = new Symbol(Parser.MOD, 2, Symbol.Type.INFIX, "%", Symbol.Type.INFIX, new Symbol.ICalculator() { @@ -167,10 +191,12 @@ Constant arg1 = (Constant) args.get(1); String sArg0 = arg0.getSymbol().toString(); String sArg1 = arg1.getSymbol().toString(); - if (arg0.getType().equals(typeLong) || arg1.getType().equals(typeLong)) { - return new Constant(Long.toString(Long.parseLong(sArg0) % Long.parseLong(sArg1)), typeLong); - } else if (arg0.getType().equals(typeInt) || arg1.getType().equals(typeInt)) { - return new Constant(Integer.toString(Integer.parseInt(sArg0) % Integer.parseInt(sArg1)), typeInt); + if (arg0.getType() != null && arg1.getType() != null) { + if (arg0.getType().equals(typeLong) || arg1.getType().equals(typeLong)) { + return new Constant(Long.toString(Long.parseLong(sArg0) % Long.parseLong(sArg1)), typeLong); + } else if (arg0.getType().equals(typeInt) || arg1.getType().equals(typeInt)) { + return new Constant(Integer.toString(Integer.parseInt(sArg0) % Integer.parseInt(sArg1)), typeInt); + } } return new Constant(Integer.toString(Integer.parseInt(sArg0) % Integer.parseInt(sArg1))); } @@ -183,16 +209,22 @@ } Constant arg = (Constant) args.get(0); String sArg = arg.getSymbol().toString(); - if (arg.getType().equals(typeDouble)) { + if (arg.getType() != null) { + if (arg.getType().equals(typeDouble)) { + return new Constant(Double.toString(-Double.parseDouble(sArg)), typeDouble); + } else if (arg.getType().equals(typeFloat)) { + return new Constant(Float.toString(-Float.parseFloat(sArg)), typeFloat); + } else if (arg.getType().equals(typeLong)) { + return new Constant(Long.toString(-Long.parseLong(sArg)), typeLong); + } else if (arg.getType().equals(typeInt)) { + return new Constant(Integer.toString(-Integer.parseInt(sArg)), typeInt); + } + } + if (sArg.contains(Parser.DOT)) { return new Constant(Double.toString(-Double.parseDouble(sArg)), typeDouble); - } else if (arg.getType().equals(typeFloat)) { - return new Constant(Float.toString(-Float.parseFloat(sArg)), typeFloat); - } else if (arg.getType().equals(typeLong)) { - return new Constant(Long.toString(-Long.parseLong(sArg)), typeLong); - } else if (arg.getType().equals(typeInt)) { + } else { return new Constant(Integer.toString(-Integer.parseInt(sArg)), typeInt); } - return new Constant(Integer.toString(-Integer.parseInt(sArg))); } }); public static final Symbol eq = new Symbol(Parser.EQ, 2, Symbol.Type.INFIX, new Symbol.IImplGenerator() { @@ -201,11 +233,12 @@ for (String s: childrenSideEffects) { sideEffect[0] += s; } - if (childrenTypes[0].equals(typeString) && childrenTypes[1].equals(typeString)) { + if (childrenTypes[0] != null && childrenTypes[0].equals(typeString) + && childrenTypes[1] != null && childrenTypes[1].equals(typeString)) { return children[0] + ".equals(" + children[1] + ")"; } return "(" + children[0] + "==" + children[1] + ")"; - } + } }, new Symbol.ICalculator() { @Override public Expression calculate(List args) { @@ -220,6 +253,13 @@ String sArg0 = arg0.getSymbol().toString(); String sArg1 = arg1.getSymbol().toString(); boolean result = false; + if (arg0.getType() == null || arg1.getType() == null) { + if (sArg0.contains(Parser.DOT) || sArg1.contains(Parser.DOT)) { + result = Double.parseDouble(sArg0) == Double.parseDouble(sArg1); + } else { + result = Integer.parseInt(sArg0) == Integer.parseInt(sArg1); + } + } if (arg0.getType().equals(typeDouble) || arg1.getType().equals(typeDouble)) { result = (Double.parseDouble(sArg0) == Double.parseDouble(sArg1)); } else if (arg0.getType().equals(typeFloat) || arg1.getType().equals(typeFloat)) { @@ -244,7 +284,8 @@ for (String s: childrenSideEffects) { sideEffect[0] += s; } - if (childrenTypes[0].equals(typeString) && childrenTypes[1].equals(typeString)) { + if (childrenTypes[0] != null && childrenTypes[0].equals(typeString) + && childrenTypes[1] != null && childrenTypes[1].equals(typeString)) { return "!" + children[0] + ".equals(" + children[1] + ")"; } return "(" + children[0] + "!=" + children[1] + ")"; @@ -263,6 +304,13 @@ String sArg0 = arg0.getSymbol().toString(); String sArg1 = arg1.getSymbol().toString(); boolean result = false; + if (arg0.getType() == null || arg1.getType() == null) { + if (sArg0.contains(Parser.DOT) || sArg1.contains(Parser.DOT)) { + result = Double.parseDouble(sArg0) != Double.parseDouble(sArg1); + } else { + result = Integer.parseInt(sArg0) != Integer.parseInt(sArg1); + } + } if (arg0.getType().equals(typeDouble) || arg1.getType().equals(typeDouble)) { result = (Double.parseDouble(sArg0) != Double.parseDouble(sArg1)); } else if (arg0.getType().equals(typeFloat) || arg1.getType().equals(typeFloat)) { @@ -295,6 +343,13 @@ String sArg0 = arg0.getSymbol().toString(); String sArg1 = arg1.getSymbol().toString(); boolean result = false; + if (arg0.getType() == null || arg1.getType() == null) { + if (sArg0.contains(Parser.DOT) || sArg1.contains(Parser.DOT)) { + result = Double.parseDouble(sArg0) > Double.parseDouble(sArg1); + } else { + result = Integer.parseInt(sArg0) > Integer.parseInt(sArg1); + } + } if (arg0.getType().equals(typeDouble) || arg1.getType().equals(typeDouble)) { result = (Double.parseDouble(sArg0) > Double.parseDouble(sArg1)); } else if (arg0.getType().equals(typeFloat) || arg1.getType().equals(typeFloat)) { @@ -325,6 +380,13 @@ String sArg0 = arg0.getSymbol().toString(); String sArg1 = arg1.getSymbol().toString(); boolean result = false; + if (arg0.getType() == null || arg1.getType() == null) { + if (sArg0.contains(Parser.DOT) || sArg1.contains(Parser.DOT)) { + result = Double.parseDouble(sArg0) < Double.parseDouble(sArg1); + } else { + result = Integer.parseInt(sArg0) < Integer.parseInt(sArg1); + } + } if (arg0.getType().equals(typeDouble) || arg1.getType().equals(typeDouble)) { result = (Double.parseDouble(sArg0) < Double.parseDouble(sArg1)); } else if (arg0.getType().equals(typeFloat) || arg1.getType().equals(typeFloat)) { @@ -355,6 +417,13 @@ String sArg0 = arg0.getSymbol().toString(); String sArg1 = arg1.getSymbol().toString(); boolean result = false; + if (arg0.getType() == null || arg1.getType() == null) { + if (sArg0.contains(Parser.DOT) || sArg1.contains(Parser.DOT)) { + result = Double.parseDouble(sArg0) >= Double.parseDouble(sArg1); + } else { + result = Integer.parseInt(sArg0) >= Integer.parseInt(sArg1); + } + } if (arg0.getType().equals(typeDouble) || arg1.getType().equals(typeDouble)) { result = (Double.parseDouble(sArg0) >= Double.parseDouble(sArg1)); } else if (arg0.getType().equals(typeFloat) || arg1.getType().equals(typeFloat)) { @@ -385,6 +454,13 @@ String sArg0 = arg0.getSymbol().toString(); String sArg1 = arg1.getSymbol().toString(); boolean result = false; + if (arg0.getType() == null || arg1.getType() == null) { + if (sArg0.contains(Parser.DOT) || sArg1.contains(Parser.DOT)) { + result = Double.parseDouble(sArg0) <= Double.parseDouble(sArg1); + } else { + result = Integer.parseInt(sArg0) <= Integer.parseInt(sArg1); + } + } if (arg0.getType().equals(typeDouble) || arg1.getType().equals(typeDouble)) { result = (Double.parseDouble(sArg0) <= Double.parseDouble(sArg1)); } else if (arg0.getType().equals(typeFloat) || arg1.getType().equals(typeFloat)) { @@ -415,6 +491,7 @@ String sArg0 = arg0.getSymbol().toString(); String sArg1 = arg1.getSymbol().toString(); boolean result = false; + if (arg0.getType() == null || arg1.getType() == null) return null; if (arg0.getType().equals(typeBoolean) || arg1.getType().equals(typeBoolean)) { result = (Boolean.parseBoolean(sArg0) && Boolean.parseBoolean(sArg1)); } @@ -439,6 +516,7 @@ String sArg0 = arg0.getSymbol().toString(); String sArg1 = arg1.getSymbol().toString(); boolean result = false; + if (arg0.getType() == null || arg1.getType() == null) return null; if (arg0.getType().equals(typeBoolean) || arg1.getType().equals(typeBoolean)) { result = (Boolean.parseBoolean(sArg0) || Boolean.parseBoolean(sArg1)); } @@ -458,6 +536,7 @@ Constant arg0 = (Constant) args.get(0); String sArg0 = arg0.getSymbol().toString(); boolean result = false; + if (arg0.getType() == null) return null; if (arg0.getType().equals(typeBoolean)) { result = !Boolean.parseBoolean(sArg0); } diff --git a/AlgebraicDataflowArchitectureModel/src/simulator/SystemState.java b/AlgebraicDataflowArchitectureModel/src/simulator/SystemState.java index 90a4546..e078ccb 100644 --- a/AlgebraicDataflowArchitectureModel/src/simulator/SystemState.java +++ b/AlgebraicDataflowArchitectureModel/src/simulator/SystemState.java @@ -1,5 +1,5 @@ package simulator; - + import java.util.AbstractMap; import java.util.ArrayList; import java.util.HashMap; @@ -7,7 +7,7 @@ import java.util.List; import java.util.Map; import java.util.Set; - + import models.algebra.Constant; import models.algebra.Expression; import models.algebra.Term; @@ -25,7 +25,7 @@ import simulator.states.MapResourceState; import simulator.states.PrimitiveResourceState; import simulator.states.ResourceState; - + public class SystemState { private Set rootResources = new HashSet<>(); private Map channelStates = new HashMap<>(); @@ -70,7 +70,7 @@ } return null; } - + /** * update the state of a specified resource * @@ -545,7 +545,7 @@ } return null; } - + public Map.Entry> createResourceState(ResourceIdentifier resourceIdentifier, Variable curResVar, Expression resCurStateVal, Expression resStateValue) { Type resType = resourceIdentifier.getResourceStateType(); if (resType == null && resStateValue instanceof Term) { @@ -1001,13 +1001,18 @@ createInfo.getValue().addAll(childInfo.getValue()); createInfo = new AbstractMap.SimpleEntry<>(state, createInfo.getValue()); } - } - + } } return createInfo; } } } + if (curResVar != null && resCurStateVal != null) { + if (resStateValue instanceof Term) { + resStateValue = ((Term) resStateValue).substitute(curResVar, resCurStateVal); + resStateValue = ((Term) resStateValue).reduce(); + } + } if (resStateValue instanceof Constant) { Resource res = getResource(resourceIdentifier); ResourceState state = null; @@ -1039,7 +1044,7 @@ public void updateChannelState(DataTransferChannel channel, ChannelState channelState) { channelStates.put(channel, channelState); } - + public List getEvents() { return events; } @@ -1047,4 +1052,4 @@ public void addEvent(Event event) { events.add(event); } -} +} \ No newline at end of file