Refactor into FA#enumerate
This commit is contained in:
parent
5b688b090d
commit
5fecd5c6a2
@ -18,18 +18,10 @@ module Imbecile
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
rv = ""
|
rv = ""
|
||||||
states = {start_state => 0}
|
states = enumerate
|
||||||
to_visit = [start_state]
|
states.each do |state, id|
|
||||||
state_id = lambda do |state|
|
|
||||||
unless states.include?(state)
|
|
||||||
states[state] = states.values.max + 1
|
|
||||||
to_visit << state
|
|
||||||
end
|
|
||||||
states[state]
|
|
||||||
end
|
|
||||||
visit = lambda do |state|
|
|
||||||
accepts_s = state.accepts ? " #{state.accepts}" : ""
|
accepts_s = state.accepts ? " #{state.accepts}" : ""
|
||||||
rv += "#{state_id[state]}#{accepts_s}:\n"
|
rv += "#{id}#{accepts_s}:\n"
|
||||||
state.transitions.each do |transition|
|
state.transitions.each do |transition|
|
||||||
if transition.nil?
|
if transition.nil?
|
||||||
range_s = "nil"
|
range_s = "nil"
|
||||||
@ -40,16 +32,28 @@ module Imbecile
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
accepts_s = transition.destination.accepts ? " #{transition.destination.accepts}" : ""
|
accepts_s = transition.destination.accepts ? " #{transition.destination.accepts}" : ""
|
||||||
rv += " #{range_s} => #{state_id[transition.destination]}#{accepts_s}\n"
|
rv += " #{range_s} => #{id}#{accepts_s}\n"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
while to_visit.size > 0
|
|
||||||
visit[to_visit[0]]
|
|
||||||
to_visit.slice!(0)
|
|
||||||
end
|
|
||||||
rv
|
rv
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def enumerate
|
||||||
|
id = 0
|
||||||
|
states = {}
|
||||||
|
visit = lambda do |state|
|
||||||
|
unless states.include?(state)
|
||||||
|
id += 1
|
||||||
|
states[state] = id
|
||||||
|
state.transitions.each do |transition|
|
||||||
|
visit[transition.destination]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
visit[@start_state]
|
||||||
|
states
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user