Blame view

circus/src/jcircus/newutil/MuUtil.java 2.67 KB
8d0dc533f   Madiel de Souza Conserva Filho   first
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 ();
  		}
  	}
  }