001 /** 002 * Process operators 003 */ 004 package toolbus.process; 005 006 import java.util.Stack; 007 import toolbus.AtomList; 008 import toolbus.State; 009 import toolbus.StateElement; 010 import toolbus.TBTermFactory; 011 import toolbus.environment.Environment; 012 import toolbus.exceptions.ToolBusException; 013 import toolbus.parsercup.PositionInformation; 014 015 /** 016 * ProcesssExpression represents abstract syntax operators for operators in process expressions of 017 * Tscripts. Specific operators like Sequence and Alternative are subclasses of ProcessExpression. 018 */ 019 abstract public class ProcessExpression{ 020 /** 021 * The term factory to be used. 022 */ 023 protected final TBTermFactory tbfactory; 024 025 /** 026 * The first (entry) state for the automaton that implements this process expression. 027 */ 028 private State first; 029 030 /** 031 * The state that follows (= connected to the exit of) the automaton that implements this 032 * process expression. 033 */ 034 private State follow; 035 036 /** 037 * Position information (i.e., source code location) of this process expression. 038 */ 039 protected final PositionInformation posInfo; 040 041 public ProcessExpression(TBTermFactory tbfactory, PositionInformation posInfo){ 042 this.tbfactory = tbfactory; 043 this.posInfo = posInfo; 044 045 first = new State(); 046 } 047 048 public State getFirst(){ 049 return first; 050 } 051 052 protected void setFirst(State first){ 053 this.first = first; 054 } 055 056 public PositionInformation getPosInfo(){ 057 return posInfo; 058 } 059 060 protected void addToFirst(StateElement a){ 061 first.addElement(a); 062 } 063 064 public State getFollow(){ 065 return follow; 066 } 067 068 protected void setFollow(State follow){ 069 this.follow = follow; 070 } 071 072 protected void addToFollow(State set){ 073 follow = follow.union(set); 074 } 075 076 abstract protected void computeFirst(); 077 078 abstract protected void replaceFormals(Environment env) throws ToolBusException; 079 080 abstract protected void compile(ProcessInstance processInstance, Stack<String> calls, State followSet) throws ToolBusException; 081 082 abstract protected ProcessExpression copy(); 083 084 abstract public AtomList getAtoms(); 085 }