def parse_header
      s0 = @current_pos
      parse_comments
      if match_str("$") != :failed
        s4 = match_regexp(/^[^:]/)
        if s4 != :failed
          s3 = []
          while s4 != :failed
            s3 << s4
            s4 = match_regexp(/^[^:]/)
          end
        else
          s3 = :failed
        end
        if s3 != :failed
          if match_str(":") != :failed
            s4 = parse_nonls
            if parse_nl != :failed
              @reported_pos = s0
              s0 = { "k" => s3.join, "v" => s4.join }
            else
              @current_pos = s0
              s0 = :failed
            end
          else
            @current_pos = s0
            s0 = :failed
          end
        else
          @current_pos = s0
          s0 = :failed
        end
      else
        @current_pos = s0
        s0 = :failed
      end
      s0
    end
def parse_header
      s0 = @current_pos
      parse_comments
      if match_str("$") != :failed
        s4 = match_regexp(/^[^:]/)
        if s4 != :failed
          s3 = []
          while s4 != :failed
            s3 << s4
            s4 = match_regexp(/^[^:]/)
          end
        else
          s3 = :failed
        end
        if s3 != :failed
          if match_str(":") != :failed
            s4 = parse_nonls
            if parse_nl != :failed
              @reported_pos = s0
              s0 = { "k" => s3.join, "v" => s4.join }
            else
              @current_pos = s0
              s0 = :failed
            end
          else
            @current_pos = s0
            s0 = :failed
          end
        else
          @current_pos = s0
          s0 = :failed
        end
      else
        @current_pos = s0
        s0 = :failed
      end
      s0
    end
header : comment* "$" [^:]+ ":" nonls nl