diff --git a/src/main/java/de/tla2bAst/BAstCreator.java b/src/main/java/de/tla2bAst/BAstCreator.java index f40c733e5de424a74d3fd0f59578c362124364bb..85956657656109702bcebed4bbe54699960f84b6 100644 --- a/src/main/java/de/tla2bAst/BAstCreator.java +++ b/src/main/java/de/tla2bAst/BAstCreator.java @@ -228,9 +228,7 @@ public class BAstCreator extends BuiltInOPs } if (!defs.isEmpty()) { - ADefinitionsMachineClause defClause = new ADefinitionsMachineClause(); - defClause.setDefinitions(defs); - machineClauseList.add(defClause); + machineClauseList.add(new ADefinitionsMachineClause(defs)); for (PDefinition def : defs) { if (def instanceof AExpressionDefinitionDefinition) { @@ -241,54 +239,43 @@ public class BAstCreator extends BuiltInOPs bDefinitions.addDefinition((ASubstitutionDefinitionDefinition) def, Definitions.Type.Substitution); } } - } - } - private ArrayList<PDefinition> createDefinitionsForExternalFunctions(Set<EXTERNAL_FUNCTIONS> set) { - ArrayList<PDefinition> list = new ArrayList<>(); - + private List<PDefinition> createDefinitionsForExternalFunctions(Set<EXTERNAL_FUNCTIONS> set) { + List<PDefinition> list = new ArrayList<>(); if (set.contains(UsedExternalFunctions.EXTERNAL_FUNCTIONS.CHOOSE)) { - AExpressionDefinitionDefinition def1 = new AExpressionDefinitionDefinition(); - def1.setName(new TIdentifierLiteral("CHOOSE")); - def1.setParameters(createIdentifierList("X")); - def1.setRhs(new AStringExpression(new TStringLiteral("a member of X"))); - list.add(def1); - AExpressionDefinitionDefinition def2 = new AExpressionDefinitionDefinition(); - def2.setName(new TIdentifierLiteral("EXTERNAL_FUNCTION_CHOOSE")); - def2.setParameters(createIdentifierList("T")); - ATotalFunctionExpression total = new ATotalFunctionExpression(); - total.setLeft(new APowSubsetExpression(createIdentifierNode("T"))); - total.setRight(createIdentifierNode("T")); - def2.setRhs(total); - list.add(def2); + list.add(new AExpressionDefinitionDefinition( + new TIdentifierLiteral("CHOOSE"), + createIdentifierList("X"), + new AStringExpression(new TStringLiteral("a member of X")) + )); + list.add(new AExpressionDefinitionDefinition( + new TIdentifierLiteral("EXTERNAL_FUNCTION_CHOOSE"), + createIdentifierList("T"), + new ATotalFunctionExpression( + new APowSubsetExpression(createIdentifierNode("T")), + createIdentifierNode("T") + ) + )); } if (set.contains(UsedExternalFunctions.EXTERNAL_FUNCTIONS.ASSERT)) { - APredicateDefinitionDefinition def1 = new APredicateDefinitionDefinition(); - def1.setName(new TDefLiteralPredicate("ASSERT_TRUE")); - ArrayList<PExpression> params = new ArrayList<>(); - params.add(createIdentifierNode("P")); - params.add(createIdentifierNode("Msg")); - def1.setParameters(params); - def1.setRhs(new AEqualPredicate(new AIntegerExpression(new TIntegerLiteral("1")), - new AIntegerExpression(new TIntegerLiteral("1")))); - list.add(def1); - - AExpressionDefinitionDefinition def2 = new AExpressionDefinitionDefinition(); - def2.setName(new TIdentifierLiteral("EXTERNAL_PREDICATE_ASSERT_TRUE")); - def2.setParameters(new ArrayList<>()); - AMultOrCartExpression cart = new AMultOrCartExpression(); - cart.setLeft(new ABoolSetExpression()); - cart.setRight(new AStringSetExpression()); - def2.setRhs(cart); - list.add(def2); + list.add(new APredicateDefinitionDefinition( + new TDefLiteralPredicate("ASSERT_TRUE"), + Arrays.asList(createIdentifierNode("P"), createIdentifierNode("Msg")), + new ATruthPredicate() + )); + list.add(new AExpressionDefinitionDefinition( + new TIdentifierLiteral("EXTERNAL_PREDICATE_ASSERT_TRUE"), + new ArrayList<>(), + new AMultOrCartExpression(new ABoolSetExpression(), new AStringSetExpression()) + )); } return list; } private void createOperationsClause() { - ArrayList<BOperation> bOperations = specAnalyser.getBOperations(); + List<BOperation> bOperations = specAnalyser.getBOperations(); if (bOperations == null || bOperations.isEmpty()) { return; } @@ -309,19 +296,17 @@ public class BAstCreator extends BuiltInOPs for (OpDeclNode var : vars) { varList.add(createIdentifierNode(var)); } - ABecomesSuchSubstitution becomes = new ABecomesSuchSubstitution(); - becomes.setIdentifiers(varList); List<PPredicate> predList = new ArrayList<>(); for (ExprNode node : specAnalyser.getInits()) { predList.add(visitExprNodePredicate(node)); } if (predList.isEmpty()) { - throw new NotImplementedException("Could not find a definition of Init."); + throw new IllegalStateException("Could not find a definition of Init."); } - becomes.setPredicate(createConjunction(predList)); - AInitialisationMachineClause initClause = new AInitialisationMachineClause(becomes); - machineClauseList.add(initClause); + machineClauseList.add(new AInitialisationMachineClause( + new ABecomesSuchSubstitution(varList,createConjunction(predList)) + )); } private void createVariableClause() { @@ -329,15 +314,11 @@ public class BAstCreator extends BuiltInOPs if (!bVariables.isEmpty()) { List<PExpression> list = new ArrayList<>(); for (OpDeclNode opDeclNode : bVariables) { - - AIdentifierExpression id = createPositionedNode( - new AIdentifierExpression(createTIdentifierLiteral(getName(opDeclNode))), opDeclNode); + AIdentifierExpression id = createPositionedNode(createIdentifierNode(getName(opDeclNode)), opDeclNode); list.add(id); - TLAType type = (TLAType) opDeclNode.getToolObject(TYPE_ID); - types.put(id, type); + types.put(id, (TLAType) opDeclNode.getToolObject(TYPE_ID)); } - AVariablesMachineClause varClause = new AVariablesMachineClause(list); - machineClauseList.add(varClause); + machineClauseList.add(new AVariablesMachineClause(list)); } } @@ -345,25 +326,20 @@ public class BAstCreator extends BuiltInOPs List<PExpression> constantsList = new ArrayList<>(); for (RecursiveDefinition recDef : specAnalyser.getRecursiveDefinitions()) { - AIdentifierExpression id = createPositionedNode( - new AIdentifierExpression(createTIdentifierLiteral(getName(recDef.getOpDefNode()))), + AIdentifierExpression id = createPositionedNode(createIdentifierNode(getName(recDef.getOpDefNode())), recDef.getOpDefNode()); constantsList.add(id); - TLAType type = (TLAType) recDef.getOpDefNode().getToolObject(TYPE_ID); - types.put(id, type); + types.put(id, (TLAType) recDef.getOpDefNode().getToolObject(TYPE_ID)); } for (OpDefNode recFunc : specAnalyser.getRecursiveFunctions()) { AIdentifierExpression id = new AIdentifierExpression(createTIdentifierLiteral(getName(recFunc))); constantsList.add(id); - TLAType type = (TLAType) recFunc.getToolObject(TYPE_ID); - types.put(id, type); + types.put(id, (TLAType) recFunc.getToolObject(TYPE_ID)); } if (!constantsList.isEmpty()) { - AAbstractConstantsMachineClause abstractConstantsClause = new AAbstractConstantsMachineClause( - constantsList); - machineClauseList.add(abstractConstantsClause); + machineClauseList.add(new AAbstractConstantsMachineClause(constantsList)); } } @@ -2249,22 +2225,13 @@ public class BAstCreator extends BuiltInOPs // sequence FormalParamNode param = params[i][0]; param.setToolObject(TUPLE, params[i]); - - AMemberPredicate member = new AMemberPredicate(); - member.setLeft(createIdentifierNode(param)); - member.setRight(visitExprNodeExpression(in[i])); - predList.add(member); - + predList.add(new AMemberPredicate(createIdentifierNode(param), visitExprNodeExpression(in[i]))); } else if (i == 0) { - ArrayList<PExpression> list = new ArrayList<>(); + List<PExpression> list = new ArrayList<>(); for (int j = 0; j < params[i].length; j++) { - FormalParamNode param = params[i][j]; - list.add(createIdentifierNode(param)); + list.add(createIdentifierNode(params[i][j])); } - AMemberPredicate member = new AMemberPredicate(); - member.setLeft(new ACoupleExpression(list)); - member.setRight(visitExprNodeExpression(in[i])); - predList.add(member); + predList.add(new AMemberPredicate(new ACoupleExpression(list), visitExprNodeExpression(in[i]))); } else { ArrayList<PExpression> list = new ArrayList<>(); StringBuilder sb = new StringBuilder(); @@ -2277,18 +2244,11 @@ public class BAstCreator extends BuiltInOPs sb.append(param.getName().toString()); list.add(createIdentifierNode(param)); } - PExpression id = createIdentifierNode(sb.toString()); - AMemberPredicate member = new AMemberPredicate(); - member.setLeft(id); - member.setRight(visitExprNodeExpression(in[i])); - predList.add(member); + predList.add(new AMemberPredicate(createIdentifierNode(sb.toString()), visitExprNodeExpression(in[i]))); } } else { for (int j = 0; j < params[i].length; j++) { - AMemberPredicate member = new AMemberPredicate(); - member.setLeft(createIdentifierNode(params[i][j])); - member.setRight(visitExprNodeExpression(in[i])); - predList.add(member); + predList.add(new AMemberPredicate(createIdentifierNode(params[i][j]), visitExprNodeExpression(in[i]))); } } } diff --git a/src/test/java/de/tla2b/prettyprintb/ExternalFunctionsTest.java b/src/test/java/de/tla2b/prettyprintb/ExternalFunctionsTest.java index 510f128f7d22c379ae95ee062de50d3b1684ce0f..4d9bb05774c4d8c04447a6c107fc616bb3ef00f7 100644 --- a/src/test/java/de/tla2b/prettyprintb/ExternalFunctionsTest.java +++ b/src/test/java/de/tla2b/prettyprintb/ExternalFunctionsTest.java @@ -16,7 +16,7 @@ public class ExternalFunctionsTest { final String expected = "MACHINE Testing\n" + "DEFINITIONS " - + "ASSERT_TRUE(P, Msg) == 1 = 1; \n" + + "ASSERT_TRUE(P, Msg) == btrue; \n" + "EXTERNAL_PREDICATE_ASSERT_TRUE == BOOL * STRING; \n" + "PROPERTIES ASSERT_TRUE(TRUE, \"abc\") \n" + "END";