AltRe.java

1    import java.util.ArrayList; 
2    import java.util.Map; 
3    import java.util.Map.Entry; 
4     
5    /** 
6     * Created by IntelliJ IDEA. 
7     * Code By: Bo Li, libo@libo.me 
8     * Date: 2009-12-10 
9     * Time: 15:27:37 
10    * CBIT, Roskilde University 
11    */ 
12   public class AltRe extends RegEx{ 
13       RegEx re1, re2; 
14    
15       public AltRe(RegEx re1,RegEx re2){ 
16           this.re1 = re1; 
17           this.re2 = re2; 
18       } 
19       public NFA translate(NFA.stateName name){ 
20           int s1 = name.next(); 
21           int s2 = name.next(); 
22           NFA nfa1 = re1.translate(name); 
23           NFA nfa2 = re2.translate(name); 
24           NFA nfa = new NFA(s1,s2); 
25           for(Entry<Integer,ArrayList<transition>> entry : nfa1.trans.entrySet()) 
26                   for(transition t : entry.getValue()) 
27                           nfa.AddTransitions(t.previousState,t.nextState,t.lab); 
28           for(Entry<Integer,ArrayList<transition>> entry : nfa2.trans.entrySet()) 
29                   for(transition t : entry.getValue()) 
30                           nfa.AddTransitions(t.previousState,t.nextState,t.lab); 
31           nfa.AddTransitions(s1,nfa1.Start(),"lambda"); 
32           nfa.AddTransitions(s1,nfa2.Start(),"lambda"); 
33           nfa.AddTransitions(nfa1.Exit(),s2,"lambda"); 
34           nfa.AddTransitions(nfa2.Exit(),s2,"lambda"); 
35           return nfa; 
36       } 
37       public String toString(){ 
38           return "("+re1.toString()+"+"+re2.toString()+")"; 
39       } 
40   } 
41