diff --git a/nfa.py b/nfa.py new file mode 100644 index 0000000..367d618 --- /dev/null +++ b/nfa.py @@ -0,0 +1,10 @@ +from collections import namedtuple + +NFA = namedtuple('NFA', ['start', 'accept', 'transitions']) + +def copy_nfa(nfa): + transitions_copy = {} + for from_state in nfa.transitions: + transitions_copy[from_state] = nfa.transitions[from_state].copy() + + return NFA(nfa.start, nfa.accept, transitions_copy) diff --git a/nfa_to_regex.py b/nfa_to_regex.py index 3f89576..7d04324 100644 --- a/nfa_to_regex.py +++ b/nfa_to_regex.py @@ -1,16 +1,7 @@ import enum -from collections import namedtuple from regex import lit, concat, bar, star - -NFA = namedtuple('NFA', ['start', 'accept', 'transitions']) - -def copy_nfa(nfa): - transitions_copy = {} - for from_state in nfa.transitions: - transitions_copy[from_state] = nfa.transitions[from_state].copy() - - return NFA(nfa.start, nfa.accept, transitions_copy) +from nfa import NFA, copy_nfa def remove_states(nfa): start, accept, transitions = nfa @@ -150,16 +141,19 @@ def prettyprint(nfa): print(process_state(from_state) + '\t' + '\t'.join(t)) def main(): - nfa = NFA('start', ['end'], { - 'start': {'0': lit('s')}, - '0': {'0': lit('0'), '1': lit('1'), 'end': lit('e'), 'start': lit('r')}, - '1': {'0': lit('1'), '1': lit('0'), 'start': lit('r')}, - 'end': {'end': lit('e'), 'start': lit('n')} + nfa = NFA('start', ['0'], { + 'start': {'1': lit('i'), '2': lit('d')}, + '0': {'1': lit('i'), '2': lit('d')}, + '1': {'0': lit('d'), '2': lit('i')}, + '2': {'0': lit('i'), '1': lit('d')} }) prettyprint(nfa) - print(to_regex(nfa)) + regex = to_regex(nfa) + + print(repr(regex)) + print(regex) if __name__ == '__main__': main()