# File lib/mail/parsers/rfc2822.rb, line 2916
    def _nt_address_list
      start_index = index
      if node_cache[:address_list].has_key?(index)
        cached = node_cache[:address_list][index]
        if cached
          cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
          @index = cached.interval.end
        end
        return cached
      end

      i0, s0 = index, []
      r2 = _nt_address
      if r2
        r1 = r2
      else
        r1 = instantiate_node(SyntaxNode,input, index...index)
      end
      s0 << r1
      if r1
        s3, i3 = [], index
        loop do
          i4, s4 = index, []
          s5, i5 = [], index
          loop do
            r6 = _nt_FWS
            if r6
              s5 << r6
            else
              break
            end
          end
          r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
          s4 << r5
          if r5
            i7 = index
            if has_terminal?(",", false, index)
              r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
              @index += 1
            else
              terminal_parse_failure(",")
              r8 = nil
            end
            if r8
              r7 = r8
            else
              if has_terminal?(";", false, index)
                r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
                @index += 1
              else
                terminal_parse_failure(";")
                r9 = nil
              end
              if r9
                r7 = r9
              else
                @index = i7
                r7 = nil
              end
            end
            s4 << r7
            if r7
              s10, i10 = [], index
              loop do
                r11 = _nt_FWS
                if r11
                  s10 << r11
                else
                  break
                end
              end
              r10 = instantiate_node(SyntaxNode,input, i10...index, s10)
              s4 << r10
              if r10
                r13 = _nt_address
                if r13
                  r12 = r13
                else
                  r12 = instantiate_node(SyntaxNode,input, index...index)
                end
                s4 << r12
              end
            end
          end
          if s4.last
            r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
            r4.extend(AddressList0)
          else
            @index = i4
            r4 = nil
          end
          if r4
            s3 << r4
          else
            break
          end
        end
        r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
        s0 << r3
      end
      if s0.last
        r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
        r0.extend(AddressList1)
      else
        @index = i0
        r0 = nil
      end

      node_cache[:address_list][start_index] = r0

      r0
    end