def create_new_fsm(): f = FSM("INIT", []) f.set_default_transition(do_default, "INIT") f.add_transition("START", "INIT", do_start, "RUNNING") f.add_transition("STOP", "RUNNING", do_start, "INIT") f.add_transition_list(["START", "INIT", "RELOAD", "RESTART"], "RUNNING", running_ok, "RUNNING") return f
def _init(self): f = FSM(0) f.arg = "" f.add_default_transition(self._error, 0) # normally add text to args f.add_transition(ANY, 0, self._addtext, 0) f.add_transition_list(" \t", 0, self._wordbreak, 0) f.add_transition_list(";\n", 0, self._doit, 0) # slashes f.add_transition("\\", 0, None, 1) f.add_transition("\\", 3, None, 6) f.add_transition(ANY, 1, self._slashescape, 0) f.add_transition(ANY, 6, self._slashescape, 3) # vars f.add_transition("$", 0, self._startvar, 7) f.add_transition("{", 7, self._vartext, 9) f.add_transition_list(self.VARNAME, 7, self._vartext, 7) f.add_transition(ANY, 7, self._endvar, 0) f.add_transition("}", 9, self._endvar, 0) f.add_transition(ANY, 9, self._vartext, 9) # vars in singlequote f.add_transition("$", 3, self._startvar, 8) f.add_transition("{", 8, self._vartext, 10) f.add_transition_list(self.VARNAME, 8, self._vartext, 8) f.add_transition(ANY, 8, self._endvar, 3) f.add_transition("}", 10, self._endvar, 3) f.add_transition(ANY, 10, self._vartext, 10) # single quotes quote all f.add_transition("'", 0, None, 2) f.add_transition("'", 2, self._singlequote, 0) f.add_transition(ANY, 2, self._addtext, 2) # double quotes allow embedding word breaks and such f.add_transition('"', 0, None, 3) f.add_transition('"', 3, self._doublequote, 0) f.add_transition(ANY, 3, self._addtext, 3) # single-quotes withing double quotes f.add_transition("'", 3, None, 5) f.add_transition("'", 5, self._singlequote, 3) f.add_transition(ANY, 5, self._addtext, 5) self._fsm = f
def finishThreeTen(fsm): print("finishThreeTen") print("310 :", helices[-1]) def finishAlpha(fsm): print("finishAlpha") print("Alpha :", helices[-1]) def anyTransition(fsm): print("anyTransition") helices = [] non_helix_symbols = " BTSE" f = FSM('NON_HELIX', helices) f.set_default_transition(Error, 'NON_HELIX') f.add_transition_any('NON_HELIX', anyTransition, 'NON_HELIX') f.add_transition('H', 'NON_HELIX', startHelix, 'ALPHA_HELIX') f.add_transition('H', 'ALPHA_HELIX', continueHelix, 'ALPHA_HELIX') f.add_transition('G', 'ALPHA_HELIX', continueHelix, 'ALPHA_HELIX') f.add_transition('G', 'NON_HELIX', startHelix, '310_HELIX') f.add_transition('G', '310_HELIX', continueHelix, '310_HELIX') f.add_transition('H', '310_HELIX', continueHelix, 'ALPHA_HELIX') f.add_transition_list(non_helix_symbols, '310_HELIX', finishThreeTen, 'NON_HELIX') f.add_transition_list(non_helix_symbols, 'ALPHA_HELIX', finishAlpha, 'NON_HELIX') seq = " HHHGG TTHHHHH GGHH GGGG " for s in seq: f.process(s) print(s, f.current_state)