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

array
$_entryActions= 'array()'
List of entry actions Each action executes when entering the state
[state] => action
array()
Details
array
$_exitActions= 'array()'
List of exit actions Each action executes when exiting the state
[state] => action
array()
Details
array
$_inputActions= 'array()'
List of input actions Each action executes when entering the state
[state][input] => action
array()
Details
array
$_rules= 'array()'
State transition table
[sourceState][input] => targetState
array()
Details
__construct(
array $states
=
array(), array $inputAphabet
=
array(), array $rules
=
array()
)
:
void
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.
Name | Type | Description |
---|---|---|
$states | array | |
$inputAphabet | array | |
$rules | array |

addEntryAction(
integer|string $state, \Zend_Search_Lucene_FSMAction $action
)
:
void
Add state entry action.
Several entry actions are allowed. Action execution order is defined by addEntryAction() calls
Name | Type | Description |
---|---|---|
$state | integer|string | |
$action | \Zend_Search_Lucene_FSMAction |

addExitAction(
integer|string $state, \Zend_Search_Lucene_FSMAction $action
)
:
void
Add state exit action.
Several exit actions are allowed. Action execution order is defined by addEntryAction() calls
Name | Type | Description |
---|---|---|
$state | integer|string | |
$action | \Zend_Search_Lucene_FSMAction |

addInputAction(
integer|string $state, $inputSymbol, \Zend_Search_Lucene_FSMAction $action
)
:
void
Add input action (defined by {state, input} pair).
Several input actions are allowed. Action execution order is defined by addInputAction() calls
Name | Type | Description |
---|---|---|
$state | integer|string | |
$inputSymbol | ||
$action | \Zend_Search_Lucene_FSMAction |

addInputSymbol(
integer|string $inputSymbol
)
:
void
Add symbol to the input alphabet
Name | Type | Description |
---|---|---|
$inputSymbol | integer|string |

addInputSymbols(
array $inputAphabet
)
:
void
Add symbols to the input alphabet
Name | Type | Description |
---|---|---|
$inputAphabet | array |

addRule(
integer|string $sourceState, integer|string $input, integer|string $targetState, \Zend_Search_Lucene_FSMAction|null $inputAction
=
null
)
:
void
Add symbol to the input alphabet
Name | Type | Description |
---|---|---|
$sourceState | integer|string | |
$input | integer|string | |
$targetState | integer|string | |
$inputAction | \Zend_Search_Lucene_FSMAction|null |
Exception | Description |
---|---|
\Zend_Search_Exception |

addRules(
array $rules
)
:
void
Add transition rules
array structure: array( array(sourseState, input, targetState[, inputAction]), array(sourseState, input, targetState[, inputAction]), array(sourseState, input, targetState[, inputAction]), ... )
Name | Type | Description |
---|---|---|
$rules | array |

addState(
integer|string $state
)
:
void
Add state to the state machine
Name | Type | Description |
---|---|---|
$state | integer|string |

addStates(
array $states
)
:
void
Add states to the state machine
Name | Type | Description |
---|---|---|
$states | array |

addTransitionAction(
integer|string $sourceState, integer|string $targetState, \Zend_Search_Lucene_FSMAction $action
)
:
void
Add transition action (defined by {state, input} pair).
Several transition actions are allowed. Action execution order is defined by addTransitionAction() calls
Name | Type | Description |
---|---|---|
$sourceState | integer|string | |
$targetState | integer|string | |
$action | \Zend_Search_Lucene_FSMAction |

setState(
integer|string $state
)
:
void
Set FSM state.
No any action is invoked
Name | Type | Description |
---|---|---|
$state | integer|string |
Exception | Description |
---|---|
\Zend_Search_Exception |