def __init__(self, regex): enfa = Regex(regex).to_epsilon_nfa() self.dfa = enfa.to_deterministic().minimize() states = self.dfa.states vertices = range(len(states)) self.vert_dict = dict(zip(states, vertices)) self.num_vert = len(self.vert_dict) self.start_states = [ self.vert_dict[st] for st in self.dfa.start_states ] self.final_states = [ self.vert_dict[st] for st in self.dfa.final_states ]
def from_str(st, py=True): if py: e_dfa = Regex.from_python_regex(st).to_epsilon_nfa() else: e_dfa = Regex(st).to_epsilon_nfa() dfa = e_dfa.to_deterministic().minimize() dfa, states_map = SimpleGraph.dfa_normalize_states(dfa) edges = [] size = 0 for vs, labels in dfa.to_dict().items(): for label, ve in labels.items(): vs, ve = int(str(vs)), int(str(ve)) label = str(label) size = max(size, vs, ve) edges.append((vs, label, ve)) return Regexp(size + 1, edges, dfa, states_map)