Algorithm
NFA = (sigma, states, start,finals,transitions)
DFA = (NFA.sigma, [], NFA.start,[],[])
visited = []
let DFA.start = e-closure(start), add to DFA.states
while visited != DFA.states
add an unvisited state, s, to visited
for each char c in sigma
m = move(s,c)
e = e-closure(m)
if e not in DFA.states
add e to DFA.states
add (s,c,e) to DFA.transitions
DFA.final = {r| r ∈ DFA.states and ∃s ∈ r and s ∈ NFA.final}