Zend Framework
LICENSE
This source file is subject to the new BSD license that is bundled with this package in the file LICENSE.txt. It is also available through the world-wide-web at this URL: http://framework.zend.com/license/new-bsd If you did not receive a copy of the license and are unable to obtain it through the world-wide-web, please send an email to license@zend.com so we can send you a copy immediately.
Abstract Finite State Machine
Take a look on Wikipedia state machine description: http://en.wikipedia.org/wiki/Finite_state_machine
Any type of Transducers (Moore machine or Mealy machine) also may be implemented by using this abstract FSM. process() methods invokes a specified actions which may construct FSM output. Actions may be also used to signal, that we have reached Accept State
integer|string $_currentState = 'null'
Current state
array $_entryActions = 'array'
List of entry actions Each action executes when entering the state
[state] => action
array $_exitActions = 'array'
List of exit actions Each action executes when exiting the state
[state] => action
array $_inputActions = 'array'
List of input actions Each action executes when entering the state
[state][input] => action
array $_inputAphabet = 'array'
Input alphabet
array $_rules = 'array'
State transition table
[sourceState][input] => targetState
array $_states = 'array'
Machine States alphabet
array $_transitionActions = 'array'
List of input actions Each action executes when entering the state
[state1][state2] => action
__construct(
array $states
=
array, array $inputAphabet
=
array, array $rules
=
array
)
:
Finite State machine constructor
$states is an array of integers or strings with a list of possible machine states constructor treats fist list element as a sturt state (assignes it to $_current state). It may be reassigned by setState() call. States list may be empty and can be extended later by addState() or addStates() calls.
$inputAphabet is the same as $states, but represents input alphabet it also may be extended later by addInputSymbols() or addInputSymbol() calls.
$rules parameter describes FSM transitions and has a structure: array( array(sourseState, input, targetState[, inputAction]), array(sourseState, input, targetState[, inputAction]), array(sourseState, input, targetState[, inputAction]), ... ) Rules also can be added later by addRules() and addRule() calls.
FSM actions are very flexible and may be defined by addEntryAction(), addExitAction(), addInputAction() and addTransitionAction() calls.
addEntryAction(
integer|string $state, Zend_Search_Lucene_FSMAction $action
)
:
Add state entry action.
Several entry actions are allowed. Action execution order is defined by addEntryAction() calls
addExitAction(
integer|string $state, Zend_Search_Lucene_FSMAction $action
)
:
Add state exit action.
Several exit actions are allowed. Action execution order is defined by addEntryAction() calls
addInputAction(
integer|string $state, $inputSymbol, Zend_Search_Lucene_FSMAction $action
)
:
Add input action (defined by {state, input} pair).
Several input actions are allowed. Action execution order is defined by addInputAction() calls
addInputSymbol(
integer|string $inputSymbol
)
:
Add symbol to the input alphabet
addInputSymbols(
array $inputAphabet
)
:
Add symbols to the input alphabet
addRule(
integer|string $sourceState, integer|string $input, integer|string $targetState, Zend_Search_Lucene_FSMAction|null $inputAction
=
null
)
:
Add symbol to the input alphabet
addRules(
array $rules
)
:
Add transition rules
array structure: array( array(sourseState, input, targetState[, inputAction]), array(sourseState, input, targetState[, inputAction]), array(sourseState, input, targetState[, inputAction]), ... )
addState(
integer|string $state
)
:
Add state to the state machine
addStates(
array $states
)
:
Add states to the state machine
addTransitionAction(
integer|string $sourceState, integer|string $targetState, Zend_Search_Lucene_FSMAction $action
)
:
Add transition action (defined by {state, input} pair).
Several transition actions are allowed. Action execution order is defined by addTransitionAction() calls
getState(
)
:
integer|string
Get FSM state.
process(
mixed $input
)
:
Process an input
reset(
)
:
setState(
integer|string $state
)
:
Set FSM state.
No any action is invoked