MuUtil.java 2.67 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
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.ActionList;
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.GuardedAction;
import net.sourceforge.czt.circus.ast.IfGuardedCommand;
import net.sourceforge.czt.circus.ast.MuAction;
import net.sourceforge.czt.circus.ast.PrefixingAction;
import net.sourceforge.czt.circus.ast.VarDeclCommand;
import jcircus.environment.NameTypeEnv;

public class MuUtil {
public static NameTypeEnv searchNameTypeEnvAnnForMu (String callname, CircusAction action) {
if (action instanceof Action2) {
CircusAction left = ((Action2)action).getLeftAction();
CircusAction right = ((Action2)action).getRightAction();
NameTypeEnv nteleft = searchNameTypeEnvAnnForMu (callname, left);
NameTypeEnv nteright = searchNameTypeEnvAnnForMu (callname, right);
nteleft.putAll(nteright);
return nteleft;
}
else if (action instanceof MuAction) {
String muname = ((MuAction)action).getZName().toString();
if (muname.equals (callname)) {
return action.getAnn(NameTypeEnv.class);
}
else {
return searchNameTypeEnvAnnForMu (callname, ((MuAction)action).getCircusAction());
}
}
else if (action instanceof PrefixingAction) {
return searchNameTypeEnvAnnForMu (callname, ((PrefixingAction)action).getCircusAction());
}
else if (action instanceof Action1) {
return searchNameTypeEnvAnnForMu (callname, ((Action1)action).getCircusAction());
}
else if (action instanceof AssignmentCommand) {
return new NameTypeEnv ();
}
else if (action instanceof IfGuardedCommand) {
CircusActionList actions = ((IfGuardedCommand)action).getGuardedActionList();
NameTypeEnv nte = new NameTypeEnv ();
int size = actions.size();
for (int i = 0; i < size; i++) {
GuardedAction ga = (GuardedAction) actions.get(i);
if (nte.iteratorSize() == 0)
nte = searchNameTypeEnvAnnForMu (callname, ga);
}
return nte;
}
else if (action instanceof VarDeclCommand) {
return searchNameTypeEnvAnnForMu (callname, ((VarDeclCommand)action).getCircusAction());
}
else if (action instanceof CallAction) {
return new NameTypeEnv ();
}
else if (action instanceof BasicAction) {
return new NameTypeEnv ();
}
else {
ExceptionUtil.throwImplementationException("MuUtil.searchNameTypeEnvAnnForMu", action.getClass());
return new NameTypeEnv ();
}
}
}