An FSM is used to represent an instance of a finite state machine
which has a transition function represented by an instance of
StateEngine. An instance of an FSM may be created either by calling
StateEngine.makeFSM( startState ) on a state engine, or by extending FSMImpl and
using a constructor. Using FSMImpl as a base class is convenient if
additional state is associated with the FSM beyond that encoded
by the current state. This is especially convenient if an action
needs some additional information. For example, counters are best
handled by special actions rather than encoding a bounded counter
in a state machine. It is also possible to create a class that
implements the FSM interface by delegating to an FSM instance
created by StateEngine.makeFSM. |