def detailed_transition_graph
      @dtgraph ||= each_with_object(Graph::Labeled.new(size)) do |s, graph|
        s.gotos.each do |tok, goto|
          path = if tok.terminal?
            [tok]
          else
            actions_to_reach_reduce(s.ident, tok)
          end
          graph.add_vector(s.ident, goto.to_state.ident, path)
        end
      end.tap { |graph| graph.start = 0 }.freeze
    end
def detailed_transition_graph
      @dtgraph ||= each_with_object(Graph::Labeled.new(size)) do |s, graph|
        s.gotos.each do |tok, goto|
          path = if tok.terminal?
            [tok]
          else
            actions_to_reach_reduce(s.ident, tok)
          end
          graph.add_vector(s.ident, goto.to_state.ident, path)
        end
      end.tap { |graph| graph.start = 0 }.freeze
    end
Like `transition_graph`, but rather than vectors labeled with NTs, we
 have vectors labeled with the shortest series of terminals and reduce
 operations which could take us through the same transition