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 }