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 }