ChoiceUtil.java 3.6 KB
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
package jcircus.newutil;

import java.util.List;

import net.sourceforge.czt.circus.ast.Action1;
import net.sourceforge.czt.circus.ast.Action2;
import net.sourceforge.czt.circus.ast.AssignmentCommand;
import net.sourceforge.czt.circus.ast.BasicAction;
import net.sourceforge.czt.circus.ast.CallAction;
import net.sourceforge.czt.circus.ast.CircusAction;
import net.sourceforge.czt.circus.ast.CircusActionList;
import net.sourceforge.czt.circus.ast.CircusCommand;
import net.sourceforge.czt.circus.ast.ExtChoiceAction;
import net.sourceforge.czt.circus.ast.GuardedAction;
import net.sourceforge.czt.circus.ast.IfGuardedCommand;
import net.sourceforge.czt.circus.ast.VarDeclCommand;
import net.sourceforge.czt.circus.util.Factory;
import net.sourceforge.czt.z.ast.Pred;

public class ChoiceUtil {
public static CircusAction replaceGuardsOnExtChoice (CircusAction action) {
Factory f = new Factory ();
FactoryUtil fu = new FactoryUtil ();
if (action instanceof GuardedAction) {
CircusAction resaction = ((GuardedAction)action).getCircusAction();
Pred respred = ((GuardedAction)action).getPred();
if (resaction instanceof ExtChoiceAction) {
CircusAction left = fu.createCircusAction (replaceGuardsOnExtChoice(((ExtChoiceAction)resaction).getLeftAction()));
CircusAction right = fu.createCircusAction (replaceGuardsOnExtChoice(((ExtChoiceAction)resaction).getRightAction()));
GuardedAction gleft = f.createGuardedAction();
GuardedAction gright = f.createGuardedAction();
gleft.setPred(fu.createPred (respred));
gright.setPred(fu.createPred (respred));
gleft.setCircusAction(left);
gright.setCircusAction(right);
ExtChoiceAction eca = f.createExtChoiceAction ();
eca.setLeftAction (gleft);
eca.setRightAction (gright);
return eca;
}
else {
Pred pred = ((GuardedAction)action).getPred();
GuardedAction ga = f.createGuardedAction ();
ga.setPred(fu.createPred(pred));
ga.setCircusAction(fu.createCircusAction (replaceGuardsOnExtChoice(resaction)));
return ga;
}
}
else if (action instanceof Action1) {
CircusAction returnedAction = fu.createCircusAction(((Action1)action).getCircusAction());
((Action1)action).setCircusAction(replaceGuardsOnExtChoice(returnedAction));
return action;
}
else if (action instanceof Action2) {
((Action2)action).setLeftAction(replaceGuardsOnExtChoice (fu.createCircusAction(((Action2)action).getLeftAction())));
((Action2)action).setRightAction(replaceGuardsOnExtChoice (fu.createCircusAction(((Action2)action).getRightAction())));
return action;
}
else if (action instanceof CircusCommand) {
if (action instanceof AssignmentCommand) {
return action;
}
else if (action instanceof IfGuardedCommand) {
CircusActionList cal = ((IfGuardedCommand)action).getGuardedActionList();
int size = cal.size();
for (int i = 0; i < size; i++) {
GuardedAction ga = (GuardedAction)cal.get(i);
ga.setCircusAction(replaceGuardsOnExtChoice (fu.createCircusAction(ga.getCircusAction())));
}
return action;
}
else if (action instanceof VarDeclCommand) {
((VarDeclCommand)action).setCircusAction(replaceGuardsOnExtChoice(((VarDeclCommand)action).getCircusAction()));
return action;
}
else {
ExceptionUtil.throwImplementationException("ChoiceUtil.replaceGuardsOnExtChoice", action.getClass());
return action;
}
}
else if (action instanceof BasicAction) {
return action;
}
else if (action instanceof CallAction) {
return action;
}
else {
ExceptionUtil.throwImplementationException("ChoiceUtil.replaceGuardsOnExtChoice", action.getClass());
return action;
}
}
}