|
|
|
@ -31,7 +31,7 @@ public class ReplaceAccumulationExpressionComplex extends ASTTraverseModify { |
|
|
|
// This expression is of the form OR{0..(l-1)}(init_i AND (run_i UNTIL goal_i)) |
|
|
|
|
|
|
|
// Build all the subexpressions... |
|
|
|
ArrayList<ExpressionBinaryOp> clauses = new ArrayList<>(); |
|
|
|
ArrayList<Expression> clauses = new ArrayList<>(); |
|
|
|
Expression result = null; |
|
|
|
|
|
|
|
for(int i=0; i<accLength; i++) { |
|
|
|
@ -54,14 +54,21 @@ public class ReplaceAccumulationExpressionComplex extends ASTTraverseModify { |
|
|
|
ExpressionTemporal until = new ExpressionTemporal(ExpressionTemporal.P_U, run, goal); |
|
|
|
// xuntil:(X until) |
|
|
|
ExpressionTemporal xuntil = new ExpressionTemporal(ExpressionTemporal.P_X, null, Expression.Parenth(until)); |
|
|
|
// and: (init_i AND until) |
|
|
|
ExpressionBinaryOp and = new ExpressionBinaryOp(ExpressionBinaryOp.AND, init, xuntil); |
|
|
|
|
|
|
|
clauses.add(and); |
|
|
|
Expression clause; |
|
|
|
if(accexp.hasFireOn()) { |
|
|
|
// until: (init_i UNTIL until) |
|
|
|
clause = new ExpressionTemporal(ExpressionTemporal.P_U, init, xuntil); |
|
|
|
} else { |
|
|
|
// and: (init_i AND until) |
|
|
|
clause = new ExpressionBinaryOp(ExpressionBinaryOp.AND, init, xuntil); |
|
|
|
} |
|
|
|
|
|
|
|
clauses.add(clause); |
|
|
|
if(i==0) { |
|
|
|
result = and; |
|
|
|
result = clause; |
|
|
|
} else { |
|
|
|
result = new ExpressionBinaryOp(ExpressionBinaryOp.OR, result, Expression.Parenth(and)); |
|
|
|
result = new ExpressionBinaryOp(ExpressionBinaryOp.OR, result, Expression.Parenth(clause)); |
|
|
|
} |
|
|
|
} |
|
|
|
return result; |
|
|
|
|