/** * Determine which locations in the PTA satisfy a (Boolean) expression. Note: This is rather * inefficiently at the moment. TODO: potentially use explicit.StateMC on dummy model eventually */ private BitSet checkLocationExpression(Expression expr) throws PrismException { int i, n; BitSet res; // Labels - expand and recurse // (note: currently not used - these are expanded earlier) if (expr instanceof ExpressionLabel) { ExpressionLabel exprLabel = (ExpressionLabel) expr; if (exprLabel.getName().equals("deadlock")) throw new PrismException("The \"deadlock\" label is not yet supported for PTAs"); if (exprLabel.getName().equals("init")) throw new PrismException("The \"init\" label is not yet supported for PTAs"); i = labelList.getLabelIndex(exprLabel.getName()); if (i == -1) throw new PrismException("Unknown label \"" + exprLabel.getName() + "\" in property"); // Check recursively return checkLocationExpression(labelList.getLabel(i)); } // Other expressions... else { List<Object> states; // Object[] state; states = pta.getLocationNameList(); n = states.size(); res = new BitSet(n); for (i = 0; i < n; i++) { // state = (Object[])states.get(i); State state = (State) states.get(i); if (expr.evaluateBoolean(state, nonClockVarMap)) { res.set(i); } } } return res; }