public static AMapDomainUnaryExp newAMapDomainUnaryExp( ILexLocation location, PExp exp) { AMapDomainUnaryExp result = new AMapDomainUnaryExp(); initExpressionUnary(result, location, exp); return result; }
/** * Returns a deep clone of this {@link AMapDomainUnaryExp} node. * @return a deep clone of this {@link AMapDomainUnaryExp} node */ public AMapDomainUnaryExp clone() { return new AMapDomainUnaryExp( _type, _location, cloneNode(_exp) ); }
/** * Creates a deep clone of this {@link AMapDomainUnaryExp} node while putting all * old node-new node relations in the map {@code oldToNewMap}. * @param oldToNewMap the map filled with the old node-new node relation * @return a deep clone of this {@link AMapDomainUnaryExp} node */ public AMapDomainUnaryExp clone(Map<INode,INode> oldToNewMap) { AMapDomainUnaryExp node = new AMapDomainUnaryExp( _type, _location, cloneNode(_exp, oldToNewMap) ); oldToNewMap.put(this, node); return node; }
/** * idx in set dom m */ private List<PMultipleBind> getSetBindList(ILexNameToken finmap, ILexNameToken findex) { AMapDomainUnaryExp domExp = new AMapDomainUnaryExp(); domExp.setType(new ABooleanBasicType()); domExp.setExp(getVarExp(finmap)); return getMultipleSetBindList(domExp, findex); }
public MapApplyObligation(PExp root, PExp arg, IPOContextStack ctxt, IPogAssistantFactory af) throws AnalysisException { super(root, POType.MAP_APPLY, ctxt, root.getLocation(), af); /* <arg> in set dom <root> */ AMapDomainUnaryExp dom_exp = new AMapDomainUnaryExp(); dom_exp.setExp(root.clone()); // We don't care about type of the exp. This is just for the CGP to not crash. dom_exp.setType(new AUnknownType()); AInSetBinaryExp inSetExp = AstExpressionFactory.newAInSetBinaryExp(arg.clone(), dom_exp); stitch = inSetExp; valuetree.setPredicate(ctxt.getPredWithContext(inSetExp)); }
/** * exists idx in set dom m & m(idx) =f(a) */ private PExp getImpliesExists(ASetCompSetExp exp, ILexNameToken finmap, ILexNameToken findex) { AExistsExp exists = new AExistsExp(); AMapDomainUnaryExp domExp = new AMapDomainUnaryExp(); domExp.setType(new ABooleanBasicType()); domExp.setExp(getVarExp(finmap)); List<PMultipleBind> bindList = getMultipleSetBindList(domExp, findex); exists.setBindList(bindList); exists.setPredicate(getExistsPredicate(exp, finmap, findex)); return exists; }
public MapApplyObligation(PStateDesignator root, PExp arg, IPOContextStack ctxt, IPogAssistantFactory af) throws AnalysisException { super(root, POType.MAP_APPLY, ctxt, root.getLocation(), af); AMapDomainUnaryExp dom_exp = new AMapDomainUnaryExp(); dom_exp.setExp(root.clone().apply(new StateDesignatorToExpVisitor())); // We don't care about type of the exp. This is just for the CGP to not crash. dom_exp.setType(new AUnknownType()); AInSetBinaryExp inSetExp = AstExpressionFactory.newAInSetBinaryExp(arg.clone(), dom_exp); stitch = inSetExp; valuetree.setPredicate(ctxt.getPredWithContext(inSetExp)); } }
ILexNameToken rdom = getUnique("rdom"); AMapDomainUnaryExp domLeft = new AMapDomainUnaryExp(); domLeft.setExp(left.clone()); AMapDomainUnaryExp domRight = new AMapDomainUnaryExp(); domRight.setExp(right.clone()); List<PMultipleBind> bindings = getMultipleSetBindList(domLeft, ldom);
ILexNameToken d2 = getUnique("d"); AMapDomainUnaryExp domM1 = new AMapDomainUnaryExp(); domM1.setExp(getVarExp(m1)); AMapDomainUnaryExp domM2 = new AMapDomainUnaryExp(); domM2.setExp(getVarExp(m2));
public MapComposeObligation(ACompBinaryExp exp, IPOContextStack ctxt, IPogAssistantFactory af) throws AnalysisException { super(exp, POType.MAP_COMPOSE, ctxt, exp.getLocation(), af); /** * The obligation for m1 comp m2 is: rng m2 subset dom m1 */ AMapRangeUnaryExp rng = new AMapRangeUnaryExp(); rng.setExp(exp.getLeft().clone()); AMapDomainUnaryExp dom = new AMapDomainUnaryExp(); dom.setExp(exp.getRight().clone()); ASubsetBinaryExp subset = new ASubsetBinaryExp(); subset.setLeft(rng); subset.setRight(dom); stitch = subset; valuetree.setPredicate(ctxt.getPredWithContext(subset)); } }
public SeqModificationObligation(APlusPlusBinaryExp arg, IPOContextStack ctxt, IPogAssistantFactory af) throws AnalysisException { super(arg, POType.SEQ_MODIFICATION, ctxt, arg.getLocation(), af); /** * "seq ++ map" produces "dom map subset inds seq" */ ASubsetBinaryExp subsetExp = new ASubsetBinaryExp(); subsetExp.setOp(new LexKeywordToken(VDMToken.SUBSET, null)); AMapDomainUnaryExp domExp = new AMapDomainUnaryExp(); domExp.setExp(arg.getRight().clone()); AIndicesUnaryExp indsExp = new AIndicesUnaryExp(); indsExp.setExp(arg.getLeft().clone()); subsetExp.setLeft(domExp); subsetExp.setRight(indsExp); stitch = subsetExp; valuetree.setPredicate(ctxt.getPredWithContext(stitch)); } }
ILexNameToken d2 = getUnique("d"); AMapDomainUnaryExp domM1 = new AMapDomainUnaryExp(); domM1.setExp(getVarExp(m1, mapEnumExp.getType())); SSetType domType = new ASetSetType(); domType.setSetof(af.createPTypeAssistant().getMap(mapEnumExp.getType().clone())); domM1.setType(domType.clone()); AMapDomainUnaryExp domM2 = new AMapDomainUnaryExp(); domM2.setExp(getVarExp(m2, mapEnumExp.getType())); domM2.setType(domType.clone());
AMapDomainUnaryExp dom = new AMapDomainUnaryExp(); dom.setExp(exp.getLeft().clone()); ASubsetBinaryExp subset = new ASubsetBinaryExp();