@Override public ILexLocation defaultPPattern(PPattern node) throws AnalysisException { return node.getLocation(); }
public static ATypeMultipleBind newATypeMultipleBind(List<PPattern> plist, PType readType) { ATypeMultipleBind result = new ATypeMultipleBind(); result.setLocation(plist.get(0).getLocation()); result.setPlist(plist); result.setType(readType); return result; }
public static ASetMultipleBind newASetMultipleBind(List<PPattern> plist, PExp readExpression) { ASetMultipleBind result = new ASetMultipleBind(); result.setLocation(plist.get(0).getLocation()); result.setPlist(plist); result.setSet(readExpression); return result; }
public static ASeqMultipleBind newASeqMultipleBind(List<PPattern> plist, PExp readExpression) { ASeqMultipleBind result = new ASeqMultipleBind(); result.setLocation(plist.get(0).getLocation()); result.setPlist(plist); result.setSeq(readExpression); return result; }
public static ASetBind newASetBind(PPattern pattern, PExp readExpression) { ASetBind result = new ASetBind(); result.setLocation(pattern.getLocation()); result.setPattern(pattern); result.setSet(readExpression); return result; }
public static ASeqBind newASeqBind(PPattern pattern, PExp readExpression) { ASeqBind result = new ASeqBind(); result.setLocation(pattern.getLocation()); result.setPattern(pattern); result.setSeq(readExpression); return result; }
private ALocalDefinition pattern2DummyDef(PPattern pat) { ALocalDefinition r = AstFactory.newALocalDefinition(null, new LexNameToken("", "", pat.getLocation().clone()), NameScope.LOCAL, new AUnknownType()); return r; }
public static ATypeBind newATypeBind(PPattern pattern, PType readType) { ATypeBind result = new ATypeBind(); result.setLocation(pattern.getLocation()); result.setPattern(pattern); result.setType(readType); return result; }
public AExplicitFunctionDefinition getInvDefinition(AStateDefinition d) { ILexLocation loc = d.getInvPattern().getLocation(); List<PPattern> params = new Vector<PPattern>(); params.add(d.getInvPattern().clone()); List<List<PPattern>> parameters = new Vector<List<PPattern>>(); parameters.add(params); PTypeList ptypes = new PTypeList(); ptypes.add(AstFactory.newAUnresolvedType(d.getName())); AFunctionType ftype = AstFactory.newAFunctionType(loc, false, ptypes, AstFactory.newABooleanBasicType(loc)); return AstFactory.newAExplicitFunctionDefinition(d.getName().getInvName(loc), NameScope.GLOBAL, null, ftype, parameters, d.getInvExpression(), null, null, true, null); }
private List<ACaseAlternativeStm> readCaseAlternatives() throws ParserException, LexException { List<ACaseAlternativeStm> alts = new Vector<ACaseAlternativeStm>(); List<PPattern> plist = getPatternReader().readPatternList(); checkFor(VDMToken.ARROW, 2236, "Expecting '->' after case pattern list"); PStm result = readStatement(); for (PPattern p : plist) { p.getLocation().executable(true); alts.add(AstFactory.newACaseAlternativeStm(p.clone(), result.clone())); } return alts; }
public static ACaseAlternative newACaseAlternative(PExp cexp, PPattern pattern, PExp resultExp) { ACaseAlternative result = new ACaseAlternative(); result.setLocation(pattern.getLocation()); result.setCexp(cexp); result.setPattern(pattern); result.setResult(resultExp); return result; }
public AExplicitFunctionDefinition getInitDefinition(AStateDefinition d) { ILexLocation loc = d.getInitPattern().getLocation(); List<PPattern> params = new Vector<PPattern>(); params.add(d.getInitPattern().clone()); List<List<PPattern>> parameters = new Vector<List<PPattern>>(); parameters.add(params); PTypeList ptypes = new PTypeList(); ptypes.add(AstFactory.newAUnresolvedType(d.getName())); AFunctionType ftype = AstFactory.newAFunctionType(loc, false, ptypes, AstFactory.newABooleanBasicType(loc)); PExp body = AstFactory.newAStateInitExp(d); AExplicitFunctionDefinition def = AstFactory.newAExplicitFunctionDefinition(d.getName().getInitName(loc), NameScope.GLOBAL, null, ftype, parameters, body, null, null, false, null); return def; }
private AExplicitFunctionDefinition getRelDef(PRelation node, ATypeDefinition typedef, ILexNameToken fname) { ILexLocation loc = node.getLhsPattern().getLocation(); List<PPattern> params = new Vector<PPattern>(); params.add(node.getLhsPattern().clone()); params.add(node.getRhsPattern().clone()); List<List<PPattern>> parameters = new Vector<List<PPattern>>(); parameters.add(params); PTypeList ptypes = getPTypes(typedef); AFunctionType ftype = AstFactory.newAFunctionType(loc, false, ptypes, AstFactory.newABooleanBasicType(loc)); AExplicitFunctionDefinition def = AstFactory.newAExplicitFunctionDefinition(fname, NameScope.GLOBAL, null, ftype, parameters, node.getRelExp(), null, null, false, null); def.setAccess(typedef.getAccess().clone()); // Same as type's def.setClassDefinition(typedef.getClassDefinition()); return def; }
public static ACaseAlternativeStm newACaseAlternativeStm(PPattern pattern, PStm stmt) { ACaseAlternativeStm result = new ACaseAlternativeStm(); result.setLocation(pattern.getLocation()); result.getLocation().executable(true); result.setPattern(pattern); result.setResult(stmt); return result; }
public static AValueDefinition newAValueDefinition(PPattern p, NameScope scope, PType type, PExp readExpression) { AValueDefinition result = new AValueDefinition(); // Definition initialization initDefinition(result, Pass.VALUES, p.getLocation(), null, scope); result.setPattern(p); result.setType(type); result.setExpression(readExpression); List<PDefinition> defs = new Vector<PDefinition>(); for (ILexNameToken var : af.createPPatternAssistant().getVariableNames(p)) { defs.add(AstFactory.newAUntypedDefinition(result.getLocation(), var, scope)); } result.setDefs(defs); return result; }
public ValueBindingObligation(PPattern pattern, PType type, PExp exp, IPOContextStack ctxt, IPogAssistantFactory af) throws AnalysisException { super(pattern, POType.VALUE_BINDING, ctxt, pattern.getLocation(), af); AExistsExp existsExp = new AExistsExp(); List<PPattern> patternList = new Vector<PPattern>(); patternList.add(pattern.clone()); ATypeMultipleBind typeBind = new ATypeMultipleBind(); typeBind.setPlist(patternList); typeBind.setType(type.clone()); List<PMultipleBind> bindList = new Vector<PMultipleBind>(); bindList.add(typeBind); existsExp.setBindList(bindList); AEqualsBinaryExp equals = AstExpressionFactory.newAEqualsBinaryExp(patternToExp(pattern.clone()), exp.clone()); existsExp.setPredicate(equals); stitch = existsExp; valuetree.setPredicate(ctxt.getPredWithContext(existsExp)); // valuetree.setContext(ctxt.getContextNodeList()); } }
public AExplicitFunctionDefinition getInvDefinition(ATypeDefinition d) { ILexLocation loc = d.getInvPattern().getLocation(); List<PPattern> params = new Vector<PPattern>(); params.add(d.getInvPattern().clone()); List<List<PPattern>> parameters = new Vector<List<PPattern>>(); parameters.add(params); PTypeList ptypes = new PTypeList(); if (d.getInvType() instanceof ARecordInvariantType) { // Records are inv_R: R +> bool ptypes.add(AstFactory.newAUnresolvedType(d.getName().clone())); } else { // Named types are inv_T: x +> bool, for T = x ANamedInvariantType nt = (ANamedInvariantType) d.getInvType(); ptypes.add(nt.getType().clone()); } AFunctionType ftype = AstFactory.newAFunctionType(loc, false, ptypes, AstFactory.newABooleanBasicType(loc)); AExplicitFunctionDefinition def = AstFactory.newAExplicitFunctionDefinition(d.getName().getInvName(loc), NameScope.GLOBAL, null, ftype, parameters, d.getInvExpression(), null, null, true, null); def.setAccess(d.getAccess().clone()); // Same as type's def.setClassDefinition(d.getClassDefinition()); return def; }
private Value eval(ACaseAlternativeStm node, Value val, Context ctxt) throws AnalysisException { Context evalContext = new Context(ctxt.assistantFactory, node.getLocation(), "case alternative", ctxt); node.getPattern().getLocation().hit(); node.getLocation().hit(); try { evalContext.putList(ctxt.assistantFactory.createPPatternAssistant().getNamedValues(node.getPattern(), val, ctxt)); return node.getResult().apply(VdmRuntime.getStatementEvaluator(), evalContext); } catch (PatternMatchException e) { // CasesStatement tries the others } return null; }
TypeCheckerErrors.report(3311, "Pattern cannot match", node.getPattern().getLocation(), node.getPattern()); TypeCheckerErrors.report(3311, "Pattern cannot match", node.getPattern().getLocation(), node.getPattern());
public ADefPatternBind readPatternOrBind() throws ParserException, LexException { ParserException bindError = null; try { reader.push(); PBind bind = readBind(); reader.unpush(); return AstFactory.newADefPatternBind(bind.getLocation(), bind); } catch (ParserException e) { e.adjustDepth(reader.getTokensRead()); reader.pop(); bindError = e; } try { reader.push(); PPattern p = getPatternReader().readPattern(); reader.unpush(); return AstFactory.newADefPatternBind(p.getLocation(), p); } catch (ParserException e) { e.adjustDepth(reader.getTokensRead()); reader.pop(); throw e.deeperThan(bindError) ? e : bindError; } }