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