Browse Source

Unbreak R[F] for DTMCs (symbolic) following changes to parser.

git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@10342 bbc10eb1-c90d-0410-af57-cb519fbb1720
master
Dave Parker 11 years ago
parent
commit
c97b7eea4f
  1. 22
      prism/src/prism/ProbModelChecker.java

22
prism/src/prism/ProbModelChecker.java

@ -52,6 +52,9 @@ import parser.ast.ExpressionTemporal;
import parser.ast.ExpressionUnaryOp; import parser.ast.ExpressionUnaryOp;
import parser.ast.PropertiesFile; import parser.ast.PropertiesFile;
import parser.ast.RelOp; import parser.ast.RelOp;
import parser.type.TypeBool;
import parser.type.TypePathBool;
import parser.type.TypePathDouble;
import sparse.PrismSparse; import sparse.PrismSparse;
import dv.DoubleVector; import dv.DoubleVector;
@ -221,7 +224,7 @@ public class ProbModelChecker extends NonProbModelChecker
// Compute rewards // Compute rewards
StateValues rewards = null; StateValues rewards = null;
Expression expr2 = expr.getExpression(); Expression expr2 = expr.getExpression();
if (expr2 instanceof ExpressionTemporal) {
if (expr2.getType() instanceof TypePathDouble) {
ExpressionTemporal exprTemp = (ExpressionTemporal) expr2; ExpressionTemporal exprTemp = (ExpressionTemporal) expr2;
switch (exprTemp.getOperator()) { switch (exprTemp.getOperator()) {
case ExpressionTemporal.R_C: case ExpressionTemporal.R_C:
@ -241,7 +244,10 @@ public class ProbModelChecker extends NonProbModelChecker
rewards = checkRewardSS(exprTemp, stateRewards, transRewards); rewards = checkRewardSS(exprTemp, stateRewards, transRewards);
break; break;
} }
} else if (expr2.getType() instanceof TypePathBool || expr2.getType() instanceof TypeBool) {
rewards = checkRewardPathFormula(expr2, stateRewards, transRewards);
} }
if (rewards == null) if (rewards == null)
throw new PrismException("Unrecognised operator in R operator"); throw new PrismException("Unrecognised operator in R operator");
@ -849,6 +855,20 @@ public class ProbModelChecker extends NonProbModelChecker
return rewards; return rewards;
} }
/**
* Compute rewards for a reachability reward operator.
*/
protected StateValues checkRewardPathFormula(Expression expr, JDDNode stateRewards, JDDNode transRewards) throws PrismException
{
if (Expression.isReach(expr)) {
return checkRewardReach((ExpressionTemporal) expr, stateRewards, transRewards);
}
else if (Expression.isCoSafeLTLSyntactic(expr)) {
throw new PrismNotSupportedException("Co-safe reward properties not yet supported for DTMCs in this engine");
}
throw new PrismException("Invalid contents for an R operator: " + expr);
}
// reach reward // reach reward
protected StateValues checkRewardReach(ExpressionTemporal expr, JDDNode stateRewards, JDDNode transRewards) throws PrismException protected StateValues checkRewardReach(ExpressionTemporal expr, JDDNode stateRewards, JDDNode transRewards) throws PrismException

Loading…
Cancel
Save