method
transition_table
v7.2.3 -
Show latest stable
- Class:
ActionDispatch::Journey::GTG::Builder
transition_table()public
No documentation available.
# File actionpack/lib/action_dispatch/journey/gtg/builder.rb, line 21
def transition_table
dtrans = TransitionTable.new
marked = {}.compare_by_identity
state_id = Hash.new { |h, k| h[k] = h.length }.compare_by_identity
dstates = [firstpos(root)]
until dstates.empty?
s = dstates.shift
next if marked[s]
marked[s] = true # mark s
s.group_by { |state| symbol(state) }.each do |sym, ps|
u = ps.flat_map { |l| @followpos[l] }.uniq
next if u.empty?
from = state_id[s]
if u.all? { |pos| pos == DUMMY_END_NODE }
to = state_id[Object.new]
dtrans[from, to] = sym
dtrans.add_accepting(to)
ps.each { |state| dtrans.add_memo(to, state.memo) }
else
to = state_id[u]
dtrans[from, to] = sym
if u.include?(DUMMY_END_NODE)
ps.each do |state|
if @followpos[state].include?(DUMMY_END_NODE)
dtrans.add_memo(to, state.memo)
end
end
dtrans.add_accepting(to)
end
end
dstates << u
end
end
dtrans
end