001    package toolbus.process;
002    
003    /**
004     * @author paulk
005     */
006    
007    import java.util.Stack;
008    import toolbus.AtomList;
009    import toolbus.State;
010    import toolbus.TBTermFactory;
011    import toolbus.environment.Environment;
012    import toolbus.exceptions.ToolBusException;
013    import toolbus.parsercup.PositionInformation;
014    
015    public class Sequence extends ProcessExpression{
016            private final ProcessExpression left;
017            private final ProcessExpression right;
018            
019            public Sequence(ProcessExpression left, ProcessExpression right, TBTermFactory tbfactory, PositionInformation posInfo){
020                    super(tbfactory, posInfo);
021                    this.left = left;
022                    this.right = right;
023            }
024            
025            protected ProcessExpression copy(){
026                    return new Sequence(left.copy(), right.copy(), tbfactory, getPosInfo());
027            }
028            
029            public String toString(){
030                    return "Seq(" + left.toString() + ", " + right.toString() + ")";
031            }
032            
033            protected void computeFirst(){
034                    left.computeFirst();
035                    right.computeFirst();
036                    setFirst(left.getFirst());
037            }
038            
039            protected void compile(ProcessInstance P, Stack<String> calls, State follow) throws ToolBusException{
040                    right.compile(P, calls, follow);
041                    left.compile(P, calls, right.getFirst());
042                    
043                    setFollow(follow);
044            }
045            
046            protected void replaceFormals(Environment env) throws ToolBusException{
047                    left.replaceFormals(env);
048                    right.replaceFormals(env);
049            }
050            
051            public AtomList getAtoms(){
052                    return left.getAtoms().union(right.getAtoms());
053            }
054    }