Пример #1
0
def walk_fsm(data):
	fsm = Graph()
	fsm.add_edge("consume_one", "loop_on_zero", consumes="1", accept=False)
	fsm.add_edge("loop_on_zero", "loop_on_zero", consumes="0", accept=False)
	fsm.add_edge("loop_on_zero", "end_with_one", consumes="1", accept=True)
	accept = False
	w = fsm.walk_path("consume_one")
	for edges in w:
		try:
			next = {e.consumes: e for e in edges}[data.pop(0)]
			accept = next.accept
			w.send(next)
		except:
			return False
	return accept and not data