Work towards C SDK (#11). Frenchie is still broken.
[progcomp10.git] / src / link / pexpect / doc / FSM.html
1
2 <!doctype html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
3 <html><head><title>Python: module FSM</title>
4 </head><body bgcolor="#f0f0f8">
5
6 <table width="100%" cellspacing=0 cellpadding=2 border=0 summary="heading">
7 <tr bgcolor="#7799ee">
8 <td valign=bottom>&nbsp;<br>
9 <font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong>FSM</strong></big></big></font></td
10 ><td align=right valign=bottom
11 ><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:/home/noah/pexpect/trunk/pexpect/FSM.py">/home/noah/pexpect/trunk/pexpect/FSM.py</a></font></td></tr></table>
12     <p><tt>This&nbsp;module&nbsp;implements&nbsp;a&nbsp;Finite&nbsp;State&nbsp;Machine&nbsp;(<a href="#FSM">FSM</a>).&nbsp;In&nbsp;addition&nbsp;to&nbsp;state<br>
13 this&nbsp;<a href="#FSM">FSM</a>&nbsp;also&nbsp;maintains&nbsp;a&nbsp;user&nbsp;defined&nbsp;"memory".&nbsp;So&nbsp;this&nbsp;<a href="#FSM">FSM</a>&nbsp;can&nbsp;be&nbsp;used&nbsp;as&nbsp;a<br>
14 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>
15 &nbsp;<br>
16 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&nbsp;to<br>
17 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>
18 &nbsp;<br>
19 You&nbsp;define&nbsp;an&nbsp;<a href="#FSM">FSM</a>&nbsp;by&nbsp;building&nbsp;tables&nbsp;of&nbsp;transitions.&nbsp;For&nbsp;a&nbsp;given&nbsp;input&nbsp;symbol<br>
20 the&nbsp;process()&nbsp;method&nbsp;uses&nbsp;these&nbsp;tables&nbsp;to&nbsp;decide&nbsp;what&nbsp;action&nbsp;to&nbsp;call&nbsp;and&nbsp;what<br>
21 the&nbsp;next&nbsp;state&nbsp;will&nbsp;be.&nbsp;The&nbsp;<a href="#FSM">FSM</a>&nbsp;has&nbsp;a&nbsp;table&nbsp;of&nbsp;transitions&nbsp;that&nbsp;associate:<br>
22 &nbsp;<br>
23 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(input_symbol,&nbsp;current_state)&nbsp;--&gt;&nbsp;(action,&nbsp;next_state)<br>
24 &nbsp;<br>
25 Where&nbsp;"action"&nbsp;is&nbsp;a&nbsp;function&nbsp;you&nbsp;define.&nbsp;The&nbsp;symbols&nbsp;and&nbsp;states&nbsp;can&nbsp;be&nbsp;any<br>
26 objects.&nbsp;You&nbsp;use&nbsp;the&nbsp;add_transition()&nbsp;and&nbsp;add_transition_list()&nbsp;methods&nbsp;to&nbsp;add<br>
27 to&nbsp;the&nbsp;transition&nbsp;table.&nbsp;The&nbsp;<a href="#FSM">FSM</a>&nbsp;also&nbsp;has&nbsp;a&nbsp;table&nbsp;of&nbsp;transitions&nbsp;that<br>
28 associate:<br>
29 &nbsp;<br>
30 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(current_state)&nbsp;--&gt;&nbsp;(action,&nbsp;next_state)<br>
31 &nbsp;<br>
32 You&nbsp;use&nbsp;the&nbsp;add_transition_any()&nbsp;method&nbsp;to&nbsp;add&nbsp;to&nbsp;this&nbsp;transition&nbsp;table.&nbsp;The<br>
33 <a href="#FSM">FSM</a>&nbsp;also&nbsp;has&nbsp;one&nbsp;default&nbsp;transition&nbsp;that&nbsp;is&nbsp;not&nbsp;associated&nbsp;with&nbsp;any&nbsp;specific<br>
34 input_symbol&nbsp;or&nbsp;state.&nbsp;You&nbsp;use&nbsp;the&nbsp;set_default_transition()&nbsp;method&nbsp;to&nbsp;set&nbsp;the<br>
35 default&nbsp;transition.<br>
36 &nbsp;<br>
37 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>.&nbsp;The<br>
38 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&nbsp;input_symbol,<br>
39 current_state,&nbsp;or&nbsp;"memory".&nbsp;The&nbsp;"memory"&nbsp;attribute&nbsp;can&nbsp;be&nbsp;any&nbsp;object&nbsp;that&nbsp;you<br>
40 want&nbsp;to&nbsp;pass&nbsp;along&nbsp;to&nbsp;the&nbsp;action&nbsp;functions.&nbsp;It&nbsp;is&nbsp;not&nbsp;used&nbsp;by&nbsp;the&nbsp;<a href="#FSM">FSM</a>&nbsp;itself.<br>
41 For&nbsp;parsing&nbsp;you&nbsp;would&nbsp;typically&nbsp;pass&nbsp;a&nbsp;list&nbsp;to&nbsp;be&nbsp;used&nbsp;as&nbsp;a&nbsp;stack.<br>
42 &nbsp;<br>
43 The&nbsp;processing&nbsp;sequence&nbsp;is&nbsp;as&nbsp;follows.&nbsp;The&nbsp;process()&nbsp;method&nbsp;is&nbsp;given&nbsp;an<br>
44 input_symbol&nbsp;to&nbsp;process.&nbsp;The&nbsp;<a href="#FSM">FSM</a>&nbsp;will&nbsp;search&nbsp;the&nbsp;table&nbsp;of&nbsp;transitions&nbsp;that<br>
45 associate:<br>
46 &nbsp;<br>
47 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(input_symbol,&nbsp;current_state)&nbsp;--&gt;&nbsp;(action,&nbsp;next_state)<br>
48 &nbsp;<br>
49 If&nbsp;the&nbsp;pair&nbsp;(input_symbol,&nbsp;current_state)&nbsp;is&nbsp;found&nbsp;then&nbsp;process()&nbsp;will&nbsp;call&nbsp;the<br>
50 associated&nbsp;action&nbsp;function&nbsp;and&nbsp;then&nbsp;set&nbsp;the&nbsp;current&nbsp;state&nbsp;to&nbsp;the&nbsp;next_state.<br>
51 &nbsp;<br>
52 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)&nbsp;it&nbsp;will&nbsp;then<br>
53 search&nbsp;the&nbsp;table&nbsp;of&nbsp;transitions&nbsp;that&nbsp;associate:<br>
54 &nbsp;<br>
55 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(current_state)&nbsp;--&gt;&nbsp;(action,&nbsp;next_state)<br>
56 &nbsp;<br>
57 If&nbsp;the&nbsp;current_state&nbsp;is&nbsp;found&nbsp;then&nbsp;the&nbsp;process()&nbsp;method&nbsp;will&nbsp;call&nbsp;the<br>
58 associated&nbsp;action&nbsp;function&nbsp;and&nbsp;then&nbsp;set&nbsp;the&nbsp;current&nbsp;state&nbsp;to&nbsp;the&nbsp;next_state.<br>
59 Notice&nbsp;that&nbsp;this&nbsp;table&nbsp;lacks&nbsp;an&nbsp;input_symbol.&nbsp;It&nbsp;lets&nbsp;you&nbsp;define&nbsp;transitions<br>
60 for&nbsp;a&nbsp;current_state&nbsp;and&nbsp;ANY&nbsp;input_symbol.&nbsp;Hence,&nbsp;it&nbsp;is&nbsp;called&nbsp;the&nbsp;"any"&nbsp;table.<br>
61 Remember,&nbsp;it&nbsp;is&nbsp;always&nbsp;checked&nbsp;after&nbsp;first&nbsp;searching&nbsp;the&nbsp;table&nbsp;for&nbsp;a&nbsp;specific<br>
62 (input_symbol,&nbsp;current_state).<br>
63 &nbsp;<br>
64 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&nbsp;the<br>
65 <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&nbsp;is<br>
66 defined&nbsp;then&nbsp;the&nbsp;process()&nbsp;method&nbsp;will&nbsp;call&nbsp;the&nbsp;associated&nbsp;action&nbsp;function&nbsp;and<br>
67 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;a&nbsp;default<br>
68 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;exception&nbsp;handler.<br>
69 There&nbsp;can&nbsp;be&nbsp;only&nbsp;one&nbsp;default&nbsp;transition.<br>
70 &nbsp;<br>
71 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;and<br>
72 current_state&nbsp;then&nbsp;the&nbsp;<a href="#FSM">FSM</a>&nbsp;will&nbsp;raise&nbsp;an&nbsp;exception.&nbsp;This&nbsp;may&nbsp;be&nbsp;desirable,&nbsp;but<br>
73 you&nbsp;can&nbsp;always&nbsp;prevent&nbsp;this&nbsp;just&nbsp;by&nbsp;defining&nbsp;a&nbsp;default&nbsp;transition.<br>
74 &nbsp;<br>
75 Noah&nbsp;Spurrier&nbsp;20020822</tt></p>
76 <p>
77 <table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
78 <tr bgcolor="#aa55cc">
79 <td colspan=3 valign=bottom>&nbsp;<br>
80 <font color="#fffff" face="helvetica, arial"><big><strong>Modules</strong></big></font></td></tr>
81     
82 <tr><td bgcolor="#aa55cc"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
83 <td width="100%"><table width="100%" summary="list"><tr><td width="25%" valign=top><a href="optparse.html">optparse</a><br>
84 <a href="os.html">os</a><br>
85 </td><td width="25%" valign=top><a href="string.html">string</a><br>
86 <a href="sys.html">sys</a><br>
87 </td><td width="25%" valign=top><a href="time.html">time</a><br>
88 <a href="traceback.html">traceback</a><br>
89 </td><td width="25%" valign=top></td></tr></table></td></tr></table><p>
90 <table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
91 <tr bgcolor="#ee77aa">
92 <td colspan=3 valign=bottom>&nbsp;<br>
93 <font color="#ffffff" face="helvetica, arial"><big><strong>Classes</strong></big></font></td></tr>
94     
95 <tr><td bgcolor="#ee77aa"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
96 <td width="100%"><dl>
97 <dt><font face="helvetica, arial"><a href="FSM.html#FSM">FSM</a>
98 </font></dt><dt><font face="helvetica, arial"><a href="exceptions.html#Exception">exceptions.Exception</a>(<a href="exceptions.html#BaseException">exceptions.BaseException</a>)
99 </font></dt><dd>
100 <dl>
101 <dt><font face="helvetica, arial"><a href="FSM.html#ExceptionFSM">ExceptionFSM</a>
102 </font></dt></dl>
103 </dd>
104 </dl>
105  <p>
106 <table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
107 <tr bgcolor="#ffc8d8">
108 <td colspan=3 valign=bottom>&nbsp;<br>
109 <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>
110     
111 <tr bgcolor="#ffc8d8"><td rowspan=2><tt>&nbsp;&nbsp;&nbsp;</tt></td>
112 <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>
113 <tr><td>&nbsp;</td>
114 <td width="100%"><dl><dt>Method resolution order:</dt>
115 <dd><a href="FSM.html#ExceptionFSM">ExceptionFSM</a></dd>
116 <dd><a href="exceptions.html#Exception">exceptions.Exception</a></dd>
117 <dd><a href="exceptions.html#BaseException">exceptions.BaseException</a></dd>
118 <dd><a href="__builtin__.html#object">__builtin__.object</a></dd>
119 </dl>
120 <hr>
121 Methods defined here:<br>
122 <dl><dt><a name="ExceptionFSM-__init__"><strong>__init__</strong></a>(self, value)</dt></dl>
123
124 <dl><dt><a name="ExceptionFSM-__str__"><strong>__str__</strong></a>(self)</dt></dl>
125
126 <hr>
127 Data descriptors defined here:<br>
128 <dl><dt><strong>__weakref__</strong></dt>
129 <dd><tt>list&nbsp;of&nbsp;weak&nbsp;references&nbsp;to&nbsp;the&nbsp;object&nbsp;(if&nbsp;defined)</tt></dd>
130 </dl>
131 <hr>
132 Data and other attributes inherited from <a href="exceptions.html#Exception">exceptions.Exception</a>:<br>
133 <dl><dt><strong>__new__</strong> = &lt;built-in method __new__ of type object at 0x81400e0&gt;<dd><tt>T.<a href="#ExceptionFSM-__new__">__new__</a>(S,&nbsp;...)&nbsp;-&gt;&nbsp;a&nbsp;new&nbsp;object&nbsp;with&nbsp;type&nbsp;S,&nbsp;a&nbsp;subtype&nbsp;of&nbsp;T</tt></dl>
134
135 <hr>
136 Methods inherited from <a href="exceptions.html#BaseException">exceptions.BaseException</a>:<br>
137 <dl><dt><a name="ExceptionFSM-__delattr__"><strong>__delattr__</strong></a>(...)</dt><dd><tt>x.<a href="#ExceptionFSM-__delattr__">__delattr__</a>('name')&nbsp;&lt;==&gt;&nbsp;del&nbsp;x.name</tt></dd></dl>
138
139 <dl><dt><a name="ExceptionFSM-__getattribute__"><strong>__getattribute__</strong></a>(...)</dt><dd><tt>x.<a href="#ExceptionFSM-__getattribute__">__getattribute__</a>('name')&nbsp;&lt;==&gt;&nbsp;x.name</tt></dd></dl>
140
141 <dl><dt><a name="ExceptionFSM-__getitem__"><strong>__getitem__</strong></a>(...)</dt><dd><tt>x.<a href="#ExceptionFSM-__getitem__">__getitem__</a>(y)&nbsp;&lt;==&gt;&nbsp;x[y]</tt></dd></dl>
142
143 <dl><dt><a name="ExceptionFSM-__getslice__"><strong>__getslice__</strong></a>(...)</dt><dd><tt>x.<a href="#ExceptionFSM-__getslice__">__getslice__</a>(i,&nbsp;j)&nbsp;&lt;==&gt;&nbsp;x[i:j]<br>
144 &nbsp;<br>
145 Use&nbsp;of&nbsp;negative&nbsp;indices&nbsp;is&nbsp;not&nbsp;supported.</tt></dd></dl>
146
147 <dl><dt><a name="ExceptionFSM-__reduce__"><strong>__reduce__</strong></a>(...)</dt></dl>
148
149 <dl><dt><a name="ExceptionFSM-__repr__"><strong>__repr__</strong></a>(...)</dt><dd><tt>x.<a href="#ExceptionFSM-__repr__">__repr__</a>()&nbsp;&lt;==&gt;&nbsp;repr(x)</tt></dd></dl>
150
151 <dl><dt><a name="ExceptionFSM-__setattr__"><strong>__setattr__</strong></a>(...)</dt><dd><tt>x.<a href="#ExceptionFSM-__setattr__">__setattr__</a>('name',&nbsp;value)&nbsp;&lt;==&gt;&nbsp;x.name&nbsp;=&nbsp;value</tt></dd></dl>
152
153 <dl><dt><a name="ExceptionFSM-__setstate__"><strong>__setstate__</strong></a>(...)</dt></dl>
154
155 <hr>
156 Data descriptors inherited from <a href="exceptions.html#BaseException">exceptions.BaseException</a>:<br>
157 <dl><dt><strong>__dict__</strong></dt>
158 </dl>
159 <dl><dt><strong>args</strong></dt>
160 </dl>
161 <dl><dt><strong>message</strong></dt>
162 <dd><tt>exception&nbsp;message</tt></dd>
163 </dl>
164 </td></tr></table> <p>
165 <table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
166 <tr bgcolor="#ffc8d8">
167 <td colspan=3 valign=bottom>&nbsp;<br>
168 <font color="#000000" face="helvetica, arial"><a name="FSM">class <strong>FSM</strong></a></font></td></tr>
169     
170 <tr bgcolor="#ffc8d8"><td rowspan=2><tt>&nbsp;&nbsp;&nbsp;</tt></td>
171 <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>
172 <tr><td>&nbsp;</td>
173 <td width="100%">Methods defined here:<br>
174 <dl><dt><a name="FSM-__init__"><strong>__init__</strong></a>(self, initial_state, memory<font color="#909090">=None</font>)</dt><dd><tt>This&nbsp;creates&nbsp;the&nbsp;<a href="#FSM">FSM</a>.&nbsp;You&nbsp;set&nbsp;the&nbsp;initial&nbsp;state&nbsp;here.&nbsp;The&nbsp;"memory"<br>
175 attribute&nbsp;is&nbsp;any&nbsp;object&nbsp;that&nbsp;you&nbsp;want&nbsp;to&nbsp;pass&nbsp;along&nbsp;to&nbsp;the&nbsp;action<br>
176 functions.&nbsp;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<br>
177 pass&nbsp;a&nbsp;list&nbsp;to&nbsp;be&nbsp;used&nbsp;as&nbsp;a&nbsp;stack.</tt></dd></dl>
178
179 <dl><dt><a name="FSM-add_transition"><strong>add_transition</strong></a>(self, input_symbol, state, action<font color="#909090">=None</font>, next_state<font color="#909090">=None</font>)</dt><dd><tt>This&nbsp;adds&nbsp;a&nbsp;transition&nbsp;that&nbsp;associates:<br>
180 &nbsp;<br>
181 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(input_symbol,&nbsp;current_state)&nbsp;--&gt;&nbsp;(action,&nbsp;next_state)<br>
182 &nbsp;<br>
183 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;will<br>
184 ignore&nbsp;the&nbsp;action&nbsp;and&nbsp;only&nbsp;set&nbsp;the&nbsp;next_state.&nbsp;The&nbsp;next_state&nbsp;may&nbsp;be<br>
185 set&nbsp;to&nbsp;None&nbsp;in&nbsp;which&nbsp;case&nbsp;the&nbsp;current&nbsp;state&nbsp;will&nbsp;be&nbsp;unchanged.<br>
186 &nbsp;<br>
187 You&nbsp;can&nbsp;also&nbsp;set&nbsp;transitions&nbsp;for&nbsp;a&nbsp;list&nbsp;of&nbsp;symbols&nbsp;by&nbsp;using<br>
188 <a href="#FSM-add_transition_list">add_transition_list</a>().</tt></dd></dl>
189
190 <dl><dt><a name="FSM-add_transition_any"><strong>add_transition_any</strong></a>(self, state, action<font color="#909090">=None</font>, next_state<font color="#909090">=None</font>)</dt><dd><tt>This&nbsp;adds&nbsp;a&nbsp;transition&nbsp;that&nbsp;associates:<br>
191 &nbsp;<br>
192 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(current_state)&nbsp;--&gt;&nbsp;(action,&nbsp;next_state)<br>
193 &nbsp;<br>
194 That&nbsp;is,&nbsp;any&nbsp;input&nbsp;symbol&nbsp;will&nbsp;match&nbsp;the&nbsp;current&nbsp;state.<br>
195 The&nbsp;<a href="#FSM-process">process</a>()&nbsp;method&nbsp;checks&nbsp;the&nbsp;"any"&nbsp;state&nbsp;associations&nbsp;after&nbsp;it&nbsp;first<br>
196 checks&nbsp;for&nbsp;an&nbsp;exact&nbsp;match&nbsp;of&nbsp;(input_symbol,&nbsp;current_state).<br>
197 &nbsp;<br>
198 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;will<br>
199 ignore&nbsp;the&nbsp;action&nbsp;and&nbsp;only&nbsp;set&nbsp;the&nbsp;next_state.&nbsp;The&nbsp;next_state&nbsp;may&nbsp;be<br>
200 set&nbsp;to&nbsp;None&nbsp;in&nbsp;which&nbsp;case&nbsp;the&nbsp;current&nbsp;state&nbsp;will&nbsp;be&nbsp;unchanged.</tt></dd></dl>
201
202 <dl><dt><a name="FSM-add_transition_list"><strong>add_transition_list</strong></a>(self, list_input_symbols, state, action<font color="#909090">=None</font>, next_state<font color="#909090">=None</font>)</dt><dd><tt>This&nbsp;adds&nbsp;the&nbsp;same&nbsp;transition&nbsp;for&nbsp;a&nbsp;list&nbsp;of&nbsp;input&nbsp;symbols.<br>
203 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>
204 string.digits,&nbsp;string.whitespace,&nbsp;string.letters,&nbsp;etc.&nbsp;to&nbsp;add<br>
205 transitions&nbsp;that&nbsp;match&nbsp;character&nbsp;classes.<br>
206 &nbsp;<br>
207 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;will<br>
208 ignore&nbsp;the&nbsp;action&nbsp;and&nbsp;only&nbsp;set&nbsp;the&nbsp;next_state.&nbsp;The&nbsp;next_state&nbsp;may&nbsp;be<br>
209 set&nbsp;to&nbsp;None&nbsp;in&nbsp;which&nbsp;case&nbsp;the&nbsp;current&nbsp;state&nbsp;will&nbsp;be&nbsp;unchanged.</tt></dd></dl>
210
211 <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>
212 This&nbsp;does&nbsp;not&nbsp;modify&nbsp;the&nbsp;<a href="#FSM">FSM</a>&nbsp;state,&nbsp;so&nbsp;calling&nbsp;this&nbsp;method&nbsp;has&nbsp;no&nbsp;side<br>
213 effects.&nbsp;Normally&nbsp;you&nbsp;do&nbsp;not&nbsp;call&nbsp;this&nbsp;method&nbsp;directly.&nbsp;It&nbsp;is&nbsp;called&nbsp;by<br>
214 <a href="#FSM-process">process</a>().<br>
215 &nbsp;<br>
216 The&nbsp;sequence&nbsp;of&nbsp;steps&nbsp;to&nbsp;check&nbsp;for&nbsp;a&nbsp;defined&nbsp;transition&nbsp;goes&nbsp;from&nbsp;the<br>
217 most&nbsp;specific&nbsp;to&nbsp;the&nbsp;least&nbsp;specific.<br>
218 &nbsp;<br>
219 1.&nbsp;Check&nbsp;state_transitions[]&nbsp;that&nbsp;match&nbsp;exactly&nbsp;the&nbsp;tuple,<br>
220 &nbsp;&nbsp;&nbsp;&nbsp;(input_symbol,&nbsp;state)<br>
221 &nbsp;<br>
222 2.&nbsp;Check&nbsp;state_transitions_any[]&nbsp;that&nbsp;match&nbsp;(state)<br>
223 &nbsp;&nbsp;&nbsp;&nbsp;In&nbsp;other&nbsp;words,&nbsp;match&nbsp;a&nbsp;specific&nbsp;state&nbsp;and&nbsp;ANY&nbsp;input_symbol.<br>
224 &nbsp;<br>
225 3.&nbsp;Check&nbsp;if&nbsp;the&nbsp;default_transition&nbsp;is&nbsp;defined.<br>
226 &nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;catches&nbsp;any&nbsp;input_symbol&nbsp;and&nbsp;any&nbsp;state.<br>
227 &nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;is&nbsp;a&nbsp;handler&nbsp;for&nbsp;errors,&nbsp;undefined&nbsp;states,&nbsp;or&nbsp;defaults.<br>
228 &nbsp;<br>
229 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>
230
231 <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.&nbsp;This&nbsp;may<br>
232 cause&nbsp;the&nbsp;<a href="#FSM">FSM</a>&nbsp;to&nbsp;change&nbsp;state&nbsp;and&nbsp;call&nbsp;an&nbsp;action.&nbsp;This&nbsp;method&nbsp;calls<br>
233 <a href="#FSM-get_transition">get_transition</a>()&nbsp;to&nbsp;find&nbsp;the&nbsp;action&nbsp;and&nbsp;next_state&nbsp;associated&nbsp;with&nbsp;the<br>
234 input_symbol&nbsp;and&nbsp;current_state.&nbsp;If&nbsp;the&nbsp;action&nbsp;is&nbsp;None&nbsp;then&nbsp;the&nbsp;action<br>
235 is&nbsp;not&nbsp;called&nbsp;and&nbsp;only&nbsp;the&nbsp;current&nbsp;state&nbsp;is&nbsp;changed.&nbsp;This&nbsp;method<br>
236 processes&nbsp;one&nbsp;complete&nbsp;input&nbsp;symbol.&nbsp;You&nbsp;can&nbsp;process&nbsp;a&nbsp;list&nbsp;of&nbsp;symbols<br>
237 (or&nbsp;a&nbsp;string)&nbsp;by&nbsp;calling&nbsp;<a href="#FSM-process_list">process_list</a>().</tt></dd></dl>
238
239 <dl><dt><a name="FSM-process_list"><strong>process_list</strong></a>(self, input_symbols)</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>().&nbsp;The&nbsp;list&nbsp;may<br>
240 be&nbsp;a&nbsp;string&nbsp;or&nbsp;any&nbsp;iterable&nbsp;object.</tt></dd></dl>
241
242 <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&nbsp;sets<br>
243 input_symbol&nbsp;to&nbsp;None.&nbsp;The&nbsp;initial&nbsp;state&nbsp;was&nbsp;set&nbsp;by&nbsp;the&nbsp;constructor<br>
244 <a href="#FSM-__init__">__init__</a>().</tt></dd></dl>
245
246 <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;This&nbsp;defines&nbsp;an&nbsp;action&nbsp;and<br>
247 next_state&nbsp;if&nbsp;the&nbsp;<a href="#FSM">FSM</a>&nbsp;cannot&nbsp;find&nbsp;the&nbsp;input&nbsp;symbol&nbsp;and&nbsp;the&nbsp;current<br>
248 state&nbsp;in&nbsp;the&nbsp;transition&nbsp;list&nbsp;and&nbsp;if&nbsp;the&nbsp;<a href="#FSM">FSM</a>&nbsp;cannot&nbsp;find&nbsp;the<br>
249 current_state&nbsp;in&nbsp;the&nbsp;transition_any&nbsp;list.&nbsp;This&nbsp;is&nbsp;useful&nbsp;as&nbsp;a&nbsp;final<br>
250 fall-through&nbsp;state&nbsp;for&nbsp;catching&nbsp;errors&nbsp;and&nbsp;undefined&nbsp;states.<br>
251 &nbsp;<br>
252 The&nbsp;default&nbsp;transition&nbsp;can&nbsp;be&nbsp;removed&nbsp;by&nbsp;setting&nbsp;the&nbsp;attribute<br>
253 default_transition&nbsp;to&nbsp;None.</tt></dd></dl>
254
255 </td></tr></table></td></tr></table><p>
256 <table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
257 <tr bgcolor="#eeaa77">
258 <td colspan=3 valign=bottom>&nbsp;<br>
259 <font color="#ffffff" face="helvetica, arial"><big><strong>Functions</strong></big></font></td></tr>
260     
261 <tr><td bgcolor="#eeaa77"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
262 <td width="100%"><dl><dt><a name="-BeginBuildNumber"><strong>BeginBuildNumber</strong></a>(fsm)</dt></dl>
263  <dl><dt><a name="-BuildNumber"><strong>BuildNumber</strong></a>(fsm)</dt></dl>
264  <dl><dt><a name="-DoEqual"><strong>DoEqual</strong></a>(fsm)</dt></dl>
265  <dl><dt><a name="-DoOperator"><strong>DoOperator</strong></a>(fsm)</dt></dl>
266  <dl><dt><a name="-EndBuildNumber"><strong>EndBuildNumber</strong></a>(fsm)</dt></dl>
267  <dl><dt><a name="-Error"><strong>Error</strong></a>(fsm)</dt></dl>
268  <dl><dt><a name="-main"><strong>main</strong></a>()</dt><dd><tt>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<br>
269 defined.&nbsp;Note&nbsp;that&nbsp;states&nbsp;are&nbsp;strings&nbsp;(such&nbsp;as&nbsp;'INIT').&nbsp;This&nbsp;is&nbsp;not<br>
270 necessary,&nbsp;but&nbsp;it&nbsp;makes&nbsp;the&nbsp;example&nbsp;easier&nbsp;to&nbsp;read.</tt></dd></dl>
271 </td></tr></table>
272 </body></html>

UCC git Repository :: git.ucc.asn.au