def renumber_dfa(dfa, base=0):
c = itertools.count(base)
mapping = {}
def remap(state):
if state in mapping:
newnum = mapping[state]
else:
newnum = next(c)
mapping[state] = newnum
return newnum
newdfa = DFA(remap(dfa.initial))
for src, trans in iteritems(dfa.transitions):
for label, dest in iteritems(trans):
newdfa.add_transition(remap(src), label, remap(dest))
for finalstate in dfa.final_states:
newdfa.add_final_state(remap(finalstate))
for src, dest in iteritems(dfa.defaults):
newdfa.set_default_transition(remap(src), remap(dest))
return newdfa
评论列表
文章目录