def parse_header
      s0 = @current_pos
      s2 = match_regexp(/^[^：\r\n]/)
      if s2 != :failed
        s1 = []
        while s2 != :failed
          s1 << s2
          s2 = match_regexp(/^[^：\r\n]/)
        end
      else
        s1 = :failed
      end
      if s1 != :failed
        if match_str("：") != :failed
          s3 = parse_nonls
          if parse_nl != :failed
            @reported_pos = s0
            s1 = { "k" => s1.join, "v" => s3.join }
            s0 = s1
          else
            @current_pos = s0
            s0 = :failed
          end
        else
          @current_pos = s0
          s0 = :failed
        end
      else
        @current_pos = s0
        s0 = :failed
      end
      if s0 == :failed
        s0 = @current_pos
        s1 = parse_turn
        if s1 != :failed
          if match_str("手番") != :failed
            if parse_nl != :failed
              @reported_pos = s0
              s0 = { "k" => "手番", "v" => s1 }
            else
              @current_pos = s0
              s0 = :failed
            end
          else
            @current_pos = s0
            s0 = :failed
          end
        else
          @current_pos = s0
          s0 = :failed
        end
        if s0 == :failed
          s0 = @current_pos
          if match_str("盤面回転") != :failed
            if parse_nl != :failed
              @reported_pos = s0
              s0 = nil
            else
              @current_pos = s0
              s0 = :failed
            end
          else
            @current_pos = s0
            s0 = :failed
          end
        end
      end

      s0
    end
def parse_header
      s0 = @current_pos
      s2 = match_regexp(/^[^：\r\n]/)
      if s2 != :failed
        s1 = []
        while s2 != :failed
          s1 << s2
          s2 = match_regexp(/^[^：\r\n]/)
        end
      else
        s1 = :failed
      end
      if s1 != :failed
        if match_str("：") != :failed
          s3 = parse_nonls
          if parse_nl != :failed
            @reported_pos = s0
            s1 = { "k" => s1.join, "v" => s3.join }
            s0 = s1
          else
            @current_pos = s0
            s0 = :failed
          end
        else
          @current_pos = s0
          s0 = :failed
        end
      else
        @current_pos = s0
        s0 = :failed
      end
      if s0 == :failed
        s0 = @current_pos
        s1 = parse_turn
        if s1 != :failed
          if match_str("手番") != :failed
            if parse_nl != :failed
              @reported_pos = s0
              s0 = { "k" => "手番", "v" => s1 }
            else
              @current_pos = s0
              s0 = :failed
            end
          else
            @current_pos = s0
            s0 = :failed
          end
        else
          @current_pos = s0
          s0 = :failed
        end
        if s0 == :failed
          s0 = @current_pos
          if match_str("盤面回転") != :failed
            if parse_nl != :failed
              @reported_pos = s0
              s0 = nil
            else
              @current_pos = s0
              s0 = :failed
            end
          else
            @current_pos = s0
            s0 = :failed
          end
        end
      end

      s0
    end
header : [^：\r\n]+ "：" nonls nl
        | turn "手番" nl
        | "盤面回転" nl