Move prettyprint() to nfa.py

This commit is contained in:
Juhani Krekelä 2019-06-01 19:36:22 +03:00
parent 46aab39ee6
commit 4a789f6b16
2 changed files with 32 additions and 32 deletions

31
nfa.py
View File

@ -8,3 +8,34 @@ def copy_nfa(nfa):
transitions_copy[from_state] = nfa.transitions[from_state].copy()
return NFA(nfa.start, nfa.accept, transitions_copy)
def prettyprint(nfa):
def process_state(state):
nonlocal start, accept
t = ''
if state == start:
# Bold
t += '\x1b[1m'
if state in accept:
# Green
t += '\x1b[32m'
if t != '':
return t + str(state) + '\x1b[0m'
else:
return str(state)
start, accept, transitions = nfa
states = transitions.keys()
print('\t' + '\t'.join(map(process_state, states)))
for from_state in states:
t = []
for to_state in states:
if to_state in transitions[from_state]:
t.append(str(transitions[from_state][to_state]))
else:
t.append('\x1b[90m-\x1b[0m')
print(process_state(from_state) + '\t' + '\t'.join(t))

View File

@ -1,7 +1,7 @@
import enum
from regex import lit, concat, bar, star
from nfa import NFA, copy_nfa
from nfa import NFA, copy_nfa, prettyprint
def remove_states(nfa):
start, accept, transitions = nfa
@ -109,37 +109,6 @@ def to_regex(nfa):
return processed.transitions[_.start][_.end]
def prettyprint(nfa):
def process_state(state):
nonlocal start, accept
t = ''
if state == start:
# Bold
t += '\x1b[1m'
if state in accept:
# Green
t += '\x1b[32m'
if t != '':
return t + str(state) + '\x1b[0m'
else:
return str(state)
start, accept, transitions = nfa
states = transitions.keys()
print('\t' + '\t'.join(map(process_state, states)))
for from_state in states:
t = []
for to_state in states:
if to_state in transitions[from_state]:
t.append(str(transitions[from_state][to_state]))
else:
t.append('\x1b[90m-\x1b[0m')
print(process_state(from_state) + '\t' + '\t'.join(t))
def main():
nfa = NFA('start', ['0'], {
'start': {'1': lit('i'), '2': lit('d')},