File: FSM.html

package info (click to toggle)
pexpect 2.1-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, lenny
  • size: 584 kB
  • ctags: 701
  • sloc: python: 3,036; makefile: 46
file content (210 lines) | stat: -rw-r--r-- 18,372 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210

<!doctype html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><title>Python: module FSM</title>
</head><body bgcolor="#f0f0f8">

<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="heading">
<tr bgcolor="#7799ee">
<td valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong>FSM</strong></big></big></font></td
><td align=right valign=bottom
><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:/home/noah/documents/export/engineering/source/python/pexpect/trunk/pexpect/FSM.py">/home/noah/documents/export/engineering/source/python/pexpect/trunk/pexpect/FSM.py</a></font></td></tr></table>
    <p><tt>This&nbsp;module&nbsp;implements&nbsp;a&nbsp;Finite&nbsp;State&nbsp;Machine&nbsp;(<a href="#FSM">FSM</a>).<br>
In&nbsp;addition&nbsp;to&nbsp;state&nbsp;this&nbsp;<a href="#FSM">FSM</a>&nbsp;also&nbsp;maintains&nbsp;a&nbsp;user&nbsp;defined&nbsp;"something".<br>
This&nbsp;"something"&nbsp;is&nbsp;effectively&nbsp;memory,&nbsp;so&nbsp;this&nbsp;<a href="#FSM">FSM</a>&nbsp;could&nbsp;be&nbsp;considered<br>
a&nbsp;Push-down&nbsp;Automata&nbsp;(PDA)&nbsp;since&nbsp;a&nbsp;PDA&nbsp;is&nbsp;a&nbsp;<a href="#FSM">FSM</a>&nbsp;+&nbsp;memory.<br>
&nbsp;<br>
The&nbsp;following&nbsp;describes&nbsp;how&nbsp;the&nbsp;<a href="#FSM">FSM</a>&nbsp;works,&nbsp;but&nbsp;you&nbsp;will&nbsp;probably&nbsp;also&nbsp;need<br>
to&nbsp;see&nbsp;the&nbsp;example&nbsp;function&nbsp;to&nbsp;understand&nbsp;how&nbsp;the&nbsp;<a href="#FSM">FSM</a>&nbsp;is&nbsp;used&nbsp;in&nbsp;practice.<br>
&nbsp;<br>
You&nbsp;define&nbsp;an&nbsp;<a href="#FSM">FSM</a>&nbsp;by&nbsp;building&nbsp;tables&nbsp;of&nbsp;transitions.<br>
For&nbsp;a&nbsp;given&nbsp;input&nbsp;symbol&nbsp;the&nbsp;process()&nbsp;method&nbsp;uses&nbsp;these&nbsp;tables&nbsp;<br>
to&nbsp;decide&nbsp;what&nbsp;action&nbsp;to&nbsp;call&nbsp;and&nbsp;what&nbsp;the&nbsp;next&nbsp;state&nbsp;will&nbsp;be.&nbsp;<br>
The&nbsp;<a href="#FSM">FSM</a>&nbsp;has&nbsp;a&nbsp;table&nbsp;of&nbsp;transitions&nbsp;that&nbsp;associate:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(input_symbol,&nbsp;current_state)&nbsp;--&gt;&nbsp;(action,&nbsp;next_state)<br>
where&nbsp;"action"&nbsp;is&nbsp;a&nbsp;function&nbsp;you&nbsp;define.&nbsp;The&nbsp;symbols&nbsp;and&nbsp;states&nbsp;<br>
can&nbsp;be&nbsp;any&nbsp;objects.&nbsp;You&nbsp;use&nbsp;the&nbsp;add_transition()&nbsp;and&nbsp;add_transition_list()&nbsp;<br>
methods&nbsp;to&nbsp;add&nbsp;to&nbsp;the&nbsp;transition&nbsp;table.&nbsp;The&nbsp;<a href="#FSM">FSM</a>&nbsp;also&nbsp;has&nbsp;a&nbsp;table<br>
of&nbsp;transitions&nbsp;that&nbsp;associate:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(current_state)&nbsp;--&gt;&nbsp;(action,&nbsp;next_state)<br>
You&nbsp;use&nbsp;the&nbsp;add_transition_any()&nbsp;method&nbsp;to&nbsp;add&nbsp;to&nbsp;this&nbsp;transition&nbsp;table.<br>
The&nbsp;<a href="#FSM">FSM</a>&nbsp;also&nbsp;has&nbsp;one&nbsp;default&nbsp;transition&nbsp;that&nbsp;is&nbsp;not&nbsp;associated<br>
with&nbsp;any&nbsp;specific&nbsp;input_symbol&nbsp;or&nbsp;state.&nbsp;You&nbsp;use&nbsp;the&nbsp;<br>
set_default_transition()&nbsp;method&nbsp;to&nbsp;set&nbsp;the&nbsp;default&nbsp;transition.<br>
&nbsp;<br>
When&nbsp;an&nbsp;action&nbsp;function&nbsp;is&nbsp;called&nbsp;it&nbsp;is&nbsp;passed&nbsp;a&nbsp;reference&nbsp;to&nbsp;the&nbsp;<a href="#FSM">FSM</a>.<br>
The&nbsp;action&nbsp;function&nbsp;may&nbsp;then&nbsp;access&nbsp;attributes&nbsp;of&nbsp;the&nbsp;<a href="#FSM">FSM</a>&nbsp;such&nbsp;as<br>
input_symbol,&nbsp;current_state,&nbsp;or&nbsp;"something".&nbsp;The&nbsp;"something"&nbsp;attribute&nbsp;<br>
can&nbsp;be&nbsp;any&nbsp;object&nbsp;that&nbsp;you&nbsp;want&nbsp;to&nbsp;pass&nbsp;along&nbsp;to&nbsp;the&nbsp;action&nbsp;functions.<br>
It&nbsp;is&nbsp;not&nbsp;used&nbsp;by&nbsp;the&nbsp;<a href="#FSM">FSM</a>.&nbsp;For&nbsp;parsing&nbsp;you&nbsp;would&nbsp;typically&nbsp;pass&nbsp;a&nbsp;list&nbsp;<br>
to&nbsp;be&nbsp;used&nbsp;as&nbsp;a&nbsp;stack.<br>
&nbsp;<br>
The&nbsp;processing&nbsp;sequence&nbsp;is&nbsp;as&nbsp;follows.<br>
The&nbsp;process()&nbsp;method&nbsp;is&nbsp;given&nbsp;an&nbsp;input_symbol&nbsp;to&nbsp;process.<br>
The&nbsp;<a href="#FSM">FSM</a>&nbsp;will&nbsp;search&nbsp;the&nbsp;table&nbsp;of&nbsp;transitions&nbsp;that&nbsp;associate:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(input_symbol,&nbsp;current_state)&nbsp;--&gt;&nbsp;(action,&nbsp;next_state)&nbsp;<br>
If&nbsp;the&nbsp;pair&nbsp;(input_symbol,&nbsp;current_state)&nbsp;is&nbsp;found&nbsp;then&nbsp;<br>
process()&nbsp;will&nbsp;call&nbsp;the&nbsp;associated&nbsp;action&nbsp;function&nbsp;and&nbsp;then&nbsp;set&nbsp;the&nbsp;<br>
current&nbsp;state&nbsp;to&nbsp;the&nbsp;next_state.<br>
&nbsp;<br>
If&nbsp;the&nbsp;<a href="#FSM">FSM</a>&nbsp;cannot&nbsp;find&nbsp;a&nbsp;match&nbsp;for&nbsp;(input_symbol,&nbsp;current_state)<br>
it&nbsp;will&nbsp;then&nbsp;search&nbsp;the&nbsp;table&nbsp;of&nbsp;transitions&nbsp;that&nbsp;associate:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(current_state)&nbsp;--&gt;&nbsp;(action,&nbsp;next_state)<br>
If&nbsp;the&nbsp;current_state&nbsp;is&nbsp;found&nbsp;then&nbsp;the&nbsp;process()&nbsp;method&nbsp;will&nbsp;call&nbsp;<br>
the&nbsp;associated&nbsp;action&nbsp;function&nbsp;and&nbsp;then&nbsp;set&nbsp;the&nbsp;current&nbsp;state&nbsp;to&nbsp;<br>
the&nbsp;next_state.&nbsp;Notice&nbsp;that&nbsp;this&nbsp;table&nbsp;lacks&nbsp;an&nbsp;input_symbol.&nbsp;<br>
It&nbsp;lets&nbsp;you&nbsp;define&nbsp;transitions&nbsp;for&nbsp;a&nbsp;current_state&nbsp;and&nbsp;ANY&nbsp;input_symbol.<br>
Hence,&nbsp;it&nbsp;is&nbsp;called&nbsp;the&nbsp;"any"&nbsp;table.&nbsp;Remember,&nbsp;it&nbsp;is&nbsp;always&nbsp;checked<br>
after&nbsp;first&nbsp;searching&nbsp;the&nbsp;table&nbsp;for&nbsp;a&nbsp;specific&nbsp;(input_symbol,&nbsp;current_state).<br>
&nbsp;<br>
For&nbsp;the&nbsp;case&nbsp;where&nbsp;the&nbsp;<a href="#FSM">FSM</a>&nbsp;did&nbsp;not&nbsp;match&nbsp;either&nbsp;of&nbsp;the&nbsp;previous&nbsp;two&nbsp;cases<br>
the&nbsp;<a href="#FSM">FSM</a>&nbsp;will&nbsp;try&nbsp;to&nbsp;use&nbsp;the&nbsp;default&nbsp;transition.&nbsp;If&nbsp;the&nbsp;default&nbsp;transition<br>
is&nbsp;defined&nbsp;then&nbsp;the&nbsp;process()&nbsp;method&nbsp;will&nbsp;call&nbsp;the&nbsp;associated&nbsp;action&nbsp;function<br>
and&nbsp;then&nbsp;set&nbsp;the&nbsp;current&nbsp;state&nbsp;to&nbsp;the&nbsp;next_state.&nbsp;This&nbsp;lets&nbsp;you&nbsp;define&nbsp;<br>
a&nbsp;default&nbsp;transition&nbsp;as&nbsp;a&nbsp;catch-all&nbsp;case.&nbsp;You&nbsp;can&nbsp;think&nbsp;of&nbsp;it&nbsp;as&nbsp;an&nbsp;<br>
exception&nbsp;handler.&nbsp;There&nbsp;can&nbsp;be&nbsp;only&nbsp;one&nbsp;default&nbsp;transition.<br>
&nbsp;<br>
Finally,&nbsp;if&nbsp;none&nbsp;of&nbsp;the&nbsp;previous&nbsp;cases&nbsp;are&nbsp;defined&nbsp;for&nbsp;an&nbsp;input_symbol&nbsp;<br>
and&nbsp;current_state&nbsp;then&nbsp;the&nbsp;<a href="#FSM">FSM</a>&nbsp;will&nbsp;raise&nbsp;an&nbsp;exception.&nbsp;<br>
This&nbsp;may&nbsp;be&nbsp;desirable,&nbsp;but&nbsp;you&nbsp;can&nbsp;always&nbsp;prevent&nbsp;this&nbsp;just&nbsp;by&nbsp;<br>
defining&nbsp;a&nbsp;default&nbsp;transition.<br>
&nbsp;<br>
Noah&nbsp;Spurrier<br>
&nbsp;<br>
$Revision:&nbsp;33&nbsp;$<br>
$Date:&nbsp;2002-08-28&nbsp;12:07:03&nbsp;-0700&nbsp;(Wed,&nbsp;28&nbsp;Aug&nbsp;2002)&nbsp;$</tt></p>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#aa55cc">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#fffff" face="helvetica, arial"><big><strong>Modules</strong></big></font></td></tr>
    
<tr><td bgcolor="#aa55cc"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><table width="100%" summary="list"><tr><td width="25%" valign=top><a href="string.html">string</a><br>
</td><td width="25%" valign=top></td><td width="25%" valign=top></td><td width="25%" valign=top></td></tr></table></td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ee77aa">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Classes</strong></big></font></td></tr>
    
<tr><td bgcolor="#ee77aa"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><dl>
<dt><font face="helvetica, arial"><a href="FSM.html#FSM">FSM</a>
</font></dt><dt><font face="helvetica, arial"><a href="exceptions.html#Exception">exceptions.Exception</a>
</font></dt><dd>
<dl>
<dt><font face="helvetica, arial"><a href="FSM.html#ExceptionFSM">ExceptionFSM</a>
</font></dt></dl>
</dd>
</dl>
 <p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#000000" face="helvetica, arial"><a name="ExceptionFSM">class <strong>ExceptionFSM</strong></a>(<a href="exceptions.html#Exception">exceptions.Exception</a>)</font></td></tr>
    
<tr bgcolor="#ffc8d8"><td rowspan=2><tt>&nbsp;&nbsp;&nbsp;</tt></td>
<td colspan=2><tt>This&nbsp;is&nbsp;the&nbsp;<a href="#FSM">FSM</a>&nbsp;<a href="exceptions.html#Exception">Exception</a>&nbsp;class.<br>&nbsp;</tt></td></tr>
<tr><td>&nbsp;</td>
<td width="100%">Methods defined here:<br>
<dl><dt><a name="ExceptionFSM-__init__"><strong>__init__</strong></a>(self, value)</dt></dl>

<dl><dt><a name="ExceptionFSM-__str__"><strong>__str__</strong></a>(self)</dt></dl>

<hr>
Methods inherited from <a href="exceptions.html#Exception">exceptions.Exception</a>:<br>
<dl><dt><a name="ExceptionFSM-__getitem__"><strong>__getitem__</strong></a>(...)</dt></dl>

</td></tr></table> <p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#000000" face="helvetica, arial"><a name="FSM">class <strong>FSM</strong></a></font></td></tr>
    
<tr bgcolor="#ffc8d8"><td rowspan=2><tt>&nbsp;&nbsp;&nbsp;</tt></td>
<td colspan=2><tt>This&nbsp;is&nbsp;a&nbsp;Finite&nbsp;State&nbsp;Machine&nbsp;(<a href="#FSM">FSM</a>).<br>&nbsp;</tt></td></tr>
<tr><td>&nbsp;</td>
<td width="100%">Methods defined here:<br>
<dl><dt><a name="FSM-__init__"><strong>__init__</strong></a>(self, initial_state, something)</dt><dd><tt>This&nbsp;creates&nbsp;the&nbsp;<a href="#FSM">FSM</a>.&nbsp;<br>
You&nbsp;set&nbsp;the&nbsp;initial&nbsp;state&nbsp;here.&nbsp;The&nbsp;"something"&nbsp;attribute&nbsp;is&nbsp;any<br>
object&nbsp;that&nbsp;you&nbsp;want&nbsp;to&nbsp;pass&nbsp;along&nbsp;to&nbsp;the&nbsp;action&nbsp;functions.<br>
It&nbsp;is&nbsp;not&nbsp;used&nbsp;by&nbsp;the&nbsp;<a href="#FSM">FSM</a>.&nbsp;For&nbsp;parsing&nbsp;you&nbsp;would&nbsp;typically&nbsp;pass&nbsp;<br>
a&nbsp;list&nbsp;to&nbsp;be&nbsp;used&nbsp;as&nbsp;a&nbsp;stack.</tt></dd></dl>

<dl><dt><a name="FSM-add_transition"><strong>add_transition</strong></a>(self, input_symbol, state, action, next_state)</dt><dd><tt>This&nbsp;adds&nbsp;a&nbsp;transition&nbsp;that&nbsp;associates<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(input_symbol,&nbsp;current_state)&nbsp;--&gt;&nbsp;(action,&nbsp;next_state)<br>
The&nbsp;action&nbsp;may&nbsp;be&nbsp;set&nbsp;to&nbsp;None&nbsp;in&nbsp;which&nbsp;case&nbsp;the&nbsp;<a href="#FSM-process">process</a>()&nbsp;method&nbsp;<br>
will&nbsp;ignore&nbsp;the&nbsp;action&nbsp;and&nbsp;only&nbsp;set&nbsp;the&nbsp;next_state.<br>
&nbsp;&nbsp;&nbsp;<br>
You&nbsp;can&nbsp;also&nbsp;set&nbsp;transitions&nbsp;for&nbsp;a&nbsp;list&nbsp;of&nbsp;symbols&nbsp;by&nbsp;using<br>
<a href="#FSM-add_transition_list">add_transition_list</a>().</tt></dd></dl>

<dl><dt><a name="FSM-add_transition_any"><strong>add_transition_any</strong></a>(self, state, action, next_state)</dt><dd><tt>This&nbsp;adds&nbsp;a&nbsp;transition&nbsp;that&nbsp;associates<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(current_state)&nbsp;--&gt;&nbsp;(action,&nbsp;next_state)<br>
The&nbsp;<a href="#FSM-process">process</a>()&nbsp;method&nbsp;checks&nbsp;these&nbsp;associations&nbsp;if&nbsp;it&nbsp;cannot<br>
first&nbsp;find&nbsp;a&nbsp;match&nbsp;of&nbsp;an&nbsp;(input_symbol,&nbsp;current_state).</tt></dd></dl>

<dl><dt><a name="FSM-add_transition_list"><strong>add_transition_list</strong></a>(self, list_input_symbols, state, action, next_state)</dt><dd><tt>This&nbsp;adds&nbsp;the&nbsp;same&nbsp;transition&nbsp;for&nbsp;lots&nbsp;of&nbsp;different&nbsp;input&nbsp;symbols.<br>
You&nbsp;can&nbsp;pass&nbsp;a&nbsp;list&nbsp;or&nbsp;a&nbsp;string.&nbsp;Note&nbsp;that&nbsp;it&nbsp;is&nbsp;handy&nbsp;to&nbsp;use<br>
string.digits,&nbsp;string.whitespace,&nbsp;string.letters,&nbsp;etc.&nbsp;to&nbsp;add<br>
transitions&nbsp;that&nbsp;match&nbsp;character&nbsp;classes.</tt></dd></dl>

<dl><dt><a name="FSM-get_transition"><strong>get_transition</strong></a>(self, input_symbol, state)</dt><dd><tt>This&nbsp;returns&nbsp;(action,&nbsp;next&nbsp;state)&nbsp;given&nbsp;an&nbsp;input_symbol&nbsp;and&nbsp;state.<br>
This&nbsp;leaves&nbsp;the&nbsp;<a href="#FSM">FSM</a>&nbsp;unchanged.&nbsp;This&nbsp;does&nbsp;not&nbsp;update&nbsp;the&nbsp;current&nbsp;state&nbsp;<br>
nor&nbsp;does&nbsp;it&nbsp;trigger&nbsp;the&nbsp;output&nbsp;action.&nbsp;Normally&nbsp;you&nbsp;do&nbsp;not&nbsp;call&nbsp;<br>
this&nbsp;method.&nbsp;It&nbsp;is&nbsp;called&nbsp;by&nbsp;<a href="#FSM-process">process</a>().<br>
&nbsp;<br>
The&nbsp;sequence&nbsp;of&nbsp;steps&nbsp;to&nbsp;check&nbsp;for&nbsp;a&nbsp;defined&nbsp;transition&nbsp;goes&nbsp;from&nbsp;<br>
the&nbsp;most&nbsp;specific&nbsp;to&nbsp;the&nbsp;least&nbsp;specific.&nbsp;<br>
1.&nbsp;Check&nbsp;state_transitions[]&nbsp;that&nbsp;match&nbsp;(input_symbol,&nbsp;state)<br>
2.&nbsp;Check&nbsp;state_transitions_any[]&nbsp;that&nbsp;match&nbsp;(state)<br>
&nbsp;&nbsp;&nbsp;In&nbsp;other&nbsp;words,&nbsp;match&nbsp;a&nbsp;specific&nbsp;state&nbsp;and&nbsp;ANY&nbsp;input_symbol.<br>
3.&nbsp;Check&nbsp;if&nbsp;the&nbsp;default_transition&nbsp;is&nbsp;defined.<br>
&nbsp;&nbsp;&nbsp;This&nbsp;catches&nbsp;any&nbsp;input_symbol&nbsp;and&nbsp;any&nbsp;state.<br>
&nbsp;&nbsp;&nbsp;This&nbsp;is&nbsp;a&nbsp;handler&nbsp;for&nbsp;errors,&nbsp;undefined&nbsp;states,&nbsp;or&nbsp;defaults.<br>
4.&nbsp;No&nbsp;transition&nbsp;was&nbsp;defined.&nbsp;If&nbsp;we&nbsp;get&nbsp;here&nbsp;then&nbsp;raise&nbsp;an&nbsp;exception.</tt></dd></dl>

<dl><dt><a name="FSM-process"><strong>process</strong></a>(self, input_symbol)</dt><dd><tt>This&nbsp;is&nbsp;the&nbsp;main&nbsp;method&nbsp;that&nbsp;you&nbsp;call&nbsp;to&nbsp;process&nbsp;input.<br>
This&nbsp;may&nbsp;cause&nbsp;the&nbsp;<a href="#FSM">FSM</a>&nbsp;to&nbsp;change&nbsp;state&nbsp;and&nbsp;call&nbsp;an&nbsp;action.<br>
This&nbsp;method&nbsp;calls&nbsp;<a href="#FSM-get_transition">get_transition</a>()&nbsp;to&nbsp;find&nbsp;the&nbsp;action&nbsp;and&nbsp;next_state<br>
associated&nbsp;with&nbsp;the&nbsp;input_symbol&nbsp;and&nbsp;current_state.<br>
If&nbsp;the&nbsp;action&nbsp;is&nbsp;None&nbsp;then&nbsp;the&nbsp;action&nbsp;is&nbsp;not&nbsp;called&nbsp;and<br>
only&nbsp;the&nbsp;current&nbsp;state&nbsp;is&nbsp;changed.<br>
This&nbsp;method&nbsp;processes&nbsp;one&nbsp;input&nbsp;symbol.&nbsp;You&nbsp;can&nbsp;process&nbsp;a&nbsp;list&nbsp;of<br>
symbols&nbsp;(or&nbsp;a&nbsp;string)&nbsp;by&nbsp;calling&nbsp;<a href="#FSM-process_list">process_list</a>().</tt></dd></dl>

<dl><dt><a name="FSM-process_list"><strong>process_list</strong></a>(self, s)</dt><dd><tt>This&nbsp;takes&nbsp;a&nbsp;list&nbsp;and&nbsp;sends&nbsp;each&nbsp;element&nbsp;to&nbsp;<a href="#FSM-process">process</a>().<br>
The&nbsp;list&nbsp;may&nbsp;be&nbsp;a&nbsp;string.</tt></dd></dl>

<dl><dt><a name="FSM-reset"><strong>reset</strong></a>(self)</dt><dd><tt>This&nbsp;sets&nbsp;the&nbsp;current_state&nbsp;to&nbsp;the&nbsp;initial_state&nbsp;and<br>
sets&nbsp;input_symbol&nbsp;to&nbsp;None.<br>
The&nbsp;initial&nbsp;state&nbsp;was&nbsp;set&nbsp;by&nbsp;the&nbsp;constructor&nbsp;<a href="#FSM-__init__">__init__</a>().</tt></dd></dl>

<dl><dt><a name="FSM-set_default_transition"><strong>set_default_transition</strong></a>(self, action, next_state)</dt><dd><tt>This&nbsp;sets&nbsp;the&nbsp;default&nbsp;transition.&nbsp;<br>
This&nbsp;defines&nbsp;an&nbsp;action&nbsp;and&nbsp;next_state&nbsp;if&nbsp;the&nbsp;<a href="#FSM">FSM</a>&nbsp;cannot&nbsp;find&nbsp;the<br>
input&nbsp;symbol&nbsp;and&nbsp;the&nbsp;current&nbsp;state&nbsp;in&nbsp;the&nbsp;transition&nbsp;list&nbsp;and&nbsp;<br>
if&nbsp;the&nbsp;<a href="#FSM">FSM</a>&nbsp;cannot&nbsp;find&nbsp;the&nbsp;current_state&nbsp;in&nbsp;the&nbsp;transition_any&nbsp;list.<br>
This&nbsp;is&nbsp;useful&nbsp;for&nbsp;catching&nbsp;errors&nbsp;and&nbsp;undefined&nbsp;states.&nbsp;<br>
&nbsp;<br>
The&nbsp;default&nbsp;transition&nbsp;can&nbsp;be&nbsp;removed&nbsp;by&nbsp;setting&nbsp;the&nbsp;attribute<br>
default_transition&nbsp;to&nbsp;None.</tt></dd></dl>

</td></tr></table></td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#eeaa77">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Functions</strong></big></font></td></tr>
    
<tr><td bgcolor="#eeaa77"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><dl><dt><a name="-BeginBuildNumber"><strong>BeginBuildNumber</strong></a>(fsm)</dt><dd><tt>#&nbsp;These&nbsp;define&nbsp;the&nbsp;actions.&nbsp;<br>
#&nbsp;Note&nbsp;that&nbsp;"something"&nbsp;is&nbsp;a&nbsp;list&nbsp;being&nbsp;used&nbsp;as&nbsp;a&nbsp;stack.</tt></dd></dl>
 <dl><dt><a name="-BuildNumber"><strong>BuildNumber</strong></a>(fsm)</dt></dl>
 <dl><dt><a name="-DoEqual"><strong>DoEqual</strong></a>(fsm)</dt></dl>
 <dl><dt><a name="-DoOperator"><strong>DoOperator</strong></a>(fsm)</dt></dl>
 <dl><dt><a name="-EndBuildNumber"><strong>EndBuildNumber</strong></a>(fsm)</dt></dl>
 <dl><dt><a name="-Error"><strong>Error</strong></a>(fsm)</dt></dl>
 <dl><dt><a name="-example"><strong>example</strong></a>()</dt><dd><tt>#&nbsp;This&nbsp;is&nbsp;where&nbsp;the&nbsp;example&nbsp;starts&nbsp;and&nbsp;the&nbsp;<a href="#FSM">FSM</a>&nbsp;state&nbsp;transitions&nbsp;are&nbsp;defined.<br>
#&nbsp;Note&nbsp;that&nbsp;states&nbsp;(such&nbsp;as&nbsp;'INIT')&nbsp;are&nbsp;strings.&nbsp;This&nbsp;is&nbsp;not&nbsp;necessary,&nbsp;but<br>
#&nbsp;it&nbsp;makes&nbsp;the&nbsp;example&nbsp;easier&nbsp;to&nbsp;read.</tt></dd></dl>
</td></tr></table>
</body></html>