Browse Source

Explicit model checker handles "and" directly, not via evaluate().

git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@3130 bbc10eb1-c90d-0410-af57-cb519fbb1720
master
Dave Parker 15 years ago
parent
commit
99566fce64
  1. 20
      prism/src/explicit/StateModelChecker.java

20
prism/src/explicit/StateModelChecker.java

@ -478,14 +478,20 @@ public class StateModelChecker
{ {
Object res; Object res;
// Binary ops
// (just "and" for now - more to come later)
if (expr instanceof ExpressionBinaryOp && Expression.isAnd(expr)) {
res = checkExpressionBinaryOp(model, (ExpressionBinaryOp) expr);
}
// Literals // Literals
if (expr instanceof ExpressionLiteral) {
else if (expr instanceof ExpressionLiteral) {
res = checkExpressionLiteral(model, (ExpressionLiteral) expr); res = checkExpressionLiteral(model, (ExpressionLiteral) expr);
} }
// Labels // Labels
else if (expr instanceof ExpressionLabel) { else if (expr instanceof ExpressionLabel) {
res = checkExpressionLabel(model, (ExpressionLabel) expr); res = checkExpressionLabel(model, (ExpressionLabel) expr);
} }
// Anything else - just evaluate expression repeatedly // Anything else - just evaluate expression repeatedly
else if (expr.getType() instanceof TypeBool) { else if (expr.getType() instanceof TypeBool) {
int numStates = model.getNumStates(); int numStates = model.getNumStates();
@ -520,6 +526,18 @@ public class StateModelChecker
return res; return res;
} }
/**
* Model check a binary operator.
*/
protected Object checkExpressionBinaryOp(Model model, ExpressionBinaryOp expr) throws PrismException
{
// (just "and" for now - more to come later)
BitSet res1bs = (BitSet) checkExpression(model, expr.getOperand1());
BitSet res2bs = (BitSet) checkExpression(model, expr.getOperand2());
res1bs.and(res2bs);
return res2bs;
}
/** /**
* Model check a literal. * Model check a literal.
*/ */

Loading…
Cancel
Save