diff --git a/src/main/java/de/tlc4b/analysis/MachineContext.java b/src/main/java/de/tlc4b/analysis/MachineContext.java index 92de4664c54c76feee80744c02a2d67c0e9c9d49..ff194588996457bf2a9878714cba8103dd67b1bc 100644 --- a/src/main/java/de/tlc4b/analysis/MachineContext.java +++ b/src/main/java/de/tlc4b/analysis/MachineContext.java @@ -16,9 +16,6 @@ import de.tlc4b.exceptions.ScopeException; import de.tlc4b.ltl.LTLBPredicate; import de.tlc4b.ltl.LTLFormulaVisitor; -import static de.tlc4b.util.UtilMethods.getIdentifierExpression; -import static de.tlc4b.util.UtilMethods.getOperation; - public class MachineContext extends DepthFirstAdapter { private String machineName; @@ -391,7 +388,7 @@ public class MachineContext extends DepthFirstAdapter { private void extractIdentifierExpressions(List<PExpression> copy, Map<String, Node> addToMap) { for (PExpression e : copy) { - AIdentifierExpression identifier = getIdentifierExpression(e); + AIdentifierExpression identifier = (AIdentifierExpression) e; String name = Utils.getTIdentifierListAsString(identifier.getIdentifier()); exist(identifier.getIdentifier()); addToMap.put(name, identifier); @@ -557,7 +554,7 @@ public class MachineContext extends DepthFirstAdapter { List<POperation> copy = new ArrayList<>(node.getOperations()); // first collect all operations for (POperation e : copy) { - AOperation op = getOperation(e); + AOperation op = (AOperation) e; String name = Utils.getTIdentifierListAsString(op.getOpName()); // existString(name); if (operations.containsKey(name)) { diff --git a/src/main/java/de/tlc4b/analysis/Typechecker.java b/src/main/java/de/tlc4b/analysis/Typechecker.java index b76c6da8037890f5c2239271e034afd76e7247a1..01baa17b896614ef4e2373e41687de9a4ad11b50 100644 --- a/src/main/java/de/tlc4b/analysis/Typechecker.java +++ b/src/main/java/de/tlc4b/analysis/Typechecker.java @@ -30,8 +30,6 @@ import de.tlc4b.exceptions.UnificationException; import de.tlc4b.ltl.LTLBPredicate; import de.tlc4b.ltl.LTLFormulaVisitor; -import static de.tlc4b.util.UtilMethods.getIdentifierExpression; - /** * TODO we need a second run over the AST to check if all local variables have a * type. This run should be performed after the normal model checking task. @@ -181,25 +179,25 @@ public class Typechecker extends DepthFirstAdapter implements ITypechecker { @Override public void caseAConstantsMachineClause(AConstantsMachineClause node) { List<PExpression> copy = new ArrayList<>(node.getIdentifiers()); - copy.forEach(e -> setType(getIdentifierExpression(e), new UntypedType())); + copy.forEach(e -> setType(e, new UntypedType())); } @Override public void caseAAbstractConstantsMachineClause(AAbstractConstantsMachineClause node) { List<PExpression> copy = new ArrayList<>(node.getIdentifiers()); - copy.forEach(e -> setType(getIdentifierExpression(e), new UntypedType())); + copy.forEach(e -> setType(e, new UntypedType())); } @Override public void caseAVariablesMachineClause(AVariablesMachineClause node) { List<PExpression> copy = new ArrayList<>(node.getIdentifiers()); - copy.forEach(e -> setType(getIdentifierExpression(e), new UntypedType())); + copy.forEach(e -> setType(e, new UntypedType())); } @Override public void caseAConcreteVariablesMachineClause(AConcreteVariablesMachineClause node) { List<PExpression> copy = new ArrayList<>(node.getIdentifiers()); - copy.forEach(e -> setType(getIdentifierExpression(e), new UntypedType())); + copy.forEach(e -> setType(e, new UntypedType())); } /** diff --git a/src/main/java/de/tlc4b/analysis/UnsupportedConstructsFinder.java b/src/main/java/de/tlc4b/analysis/UnsupportedConstructsFinder.java index eaeb66826e6f2881f7132d6666b6a17088277d53..1860cd30b40c0e5ea2cf3eb012a5032fa82d18d2 100644 --- a/src/main/java/de/tlc4b/analysis/UnsupportedConstructsFinder.java +++ b/src/main/java/de/tlc4b/analysis/UnsupportedConstructsFinder.java @@ -88,4 +88,22 @@ public class UnsupportedConstructsFinder extends DepthFirstAdapter { node.getPredicate().apply(this); node.replaceBy(node.getPredicate()); } + + @Override + public void caseADescriptionExpression(ADescriptionExpression node) { + node.getExpression().apply(this); + node.replaceBy(node.getExpression()); + } + + @Override + public void caseADescriptionOperation(ADescriptionOperation node) { + node.getOperation().apply(this); + node.replaceBy(node.getOperation()); + } + + @Override + public void caseADescriptionSet(ADescriptionSet node) { + node.getSet().apply(this); + node.replaceBy(node.getSet()); + } } diff --git a/src/main/java/de/tlc4b/analysis/typerestriction/TypeRestrictor.java b/src/main/java/de/tlc4b/analysis/typerestriction/TypeRestrictor.java index 479abd532fecaa8a83f1cd20b2370cc3ae426a9e..2d2a7d6d3852312a1a6691e4034d366513b9b58b 100644 --- a/src/main/java/de/tlc4b/analysis/typerestriction/TypeRestrictor.java +++ b/src/main/java/de/tlc4b/analysis/typerestriction/TypeRestrictor.java @@ -53,7 +53,6 @@ import de.tlc4b.analysis.Typechecker; import de.tlc4b.btypes.BType; import de.tlc4b.exceptions.NotSupportedException; import de.tlc4b.ltl.LTLFormulaVisitor; -import de.tlc4b.util.UtilMethods; public class TypeRestrictor extends DepthFirstAdapter { @@ -500,12 +499,10 @@ public class TypeRestrictor extends DepthFirstAdapter { AIdentifierExpression id = (AIdentifierExpression) e; String localVariableName = Utils.getTIdentifierListAsString(id.getIdentifier()); throw new NotSupportedException( - "Unable to restrict the type '" - + conType - + "' of identifier '" - + localVariableName + "Unable to restrict the type '" + conType + "' of identifier '" + localVariableName + "' to a finite set. TLC is not able to handle infinite sets.\n" - + UtilMethods.getPositionAsString(e)); + + (e.getStartPos() == null ? "### Unknown position." + : "### Line " + e.getStartPos().getLine() + ", Column " + e.getEndPos().getPos())); } tree = conType.createASTNode(typechecker); diff --git a/src/main/java/de/tlc4b/btypes/EnumeratedSetElement.java b/src/main/java/de/tlc4b/btypes/EnumeratedSetElement.java index e20b807696b7448adcd7d8c3fbb0e87f592cdbec..05cfb6a61e83473ab3b78723ed0b92e9c820321b 100644 --- a/src/main/java/de/tlc4b/btypes/EnumeratedSetElement.java +++ b/src/main/java/de/tlc4b/btypes/EnumeratedSetElement.java @@ -2,9 +2,9 @@ package de.tlc4b.btypes; import de.be4.classicalb.core.parser.node.AIdentifierExpression; import de.be4.classicalb.core.parser.node.PExpression; +import de.be4.classicalb.core.parser.util.ASTBuilder; import de.tlc4b.analysis.Typechecker; import de.tlc4b.exceptions.UnificationException; -import de.tlc4b.util.UtilMethods; public class EnumeratedSetElement implements BType { private final String name; @@ -58,7 +58,7 @@ public class EnumeratedSetElement implements BType { } public PExpression createASTNode(Typechecker typechecker) { - AIdentifierExpression id = UtilMethods.createAIdentifierExpression(name); + AIdentifierExpression id = ASTBuilder.createIdentifier(name); typechecker.setType(id, new SetType(this)); return id; } diff --git a/src/main/java/de/tlc4b/util/UtilMethods.java b/src/main/java/de/tlc4b/util/UtilMethods.java deleted file mode 100644 index 2e824b3dfc82c032a7c063d09142440a9e3d82c2..0000000000000000000000000000000000000000 --- a/src/main/java/de/tlc4b/util/UtilMethods.java +++ /dev/null @@ -1,57 +0,0 @@ -package de.tlc4b.util; - -import java.util.ArrayList; - -import de.be4.classicalb.core.parser.node.*; -import de.hhu.stups.sablecc.patch.SourcePosition; - -public class UtilMethods { - - public static AIdentifierExpression createAIdentifierExpression(String name) { - TIdentifierLiteral literal = new TIdentifierLiteral(name); - ArrayList<TIdentifierLiteral> idList = new ArrayList<>(); - idList.add(literal); - return new AIdentifierExpression(idList); - } - - public static AIdentifierExpression getIdentifierExpression(PExpression e) { - AIdentifierExpression identifier; - if (e instanceof ADescriptionExpression) { - identifier = getIdentifierExpression(((ADescriptionExpression) e).getExpression()); - } else if (e instanceof AIdentifierExpression) { - identifier = (AIdentifierExpression) e; - } else { - throw new IllegalStateException("Unexpected expression type: " + e); - } - return identifier; - } - - public static AOperation getOperation(POperation e) { - AOperation op; - if (e instanceof ADescriptionOperation) { - op = getOperation(((ADescriptionOperation) e).getOperation()); - } else if (e instanceof AOperation) { - op = (AOperation) e; - } else { - throw new IllegalStateException("Unexpected operation type: " + e); - } - return op; - } - - public static String getPositionAsString(Node node) { - StringBuilder sb = new StringBuilder(); - SourcePosition startPos = node.getStartPos(); - SourcePosition endPos = node.getEndPos(); - if (startPos == null) { - sb.append("### Unknown position."); - } else { - sb.append("### Line "); - sb.append(startPos.getLine()); - sb.append(", Column "); - sb.append(endPos.getPos()); - } - - return sb.toString(); - } - -}