class ActionDispatch::Journey::GTG::Builder
def transition_table
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