# File lib/uri_template/rfc6570.rb, line 219
    def each
      scanner = StringScanner.new(@source)
      until scanner.eos?
        expression = scanner.scan(EXPRESSION)
        if expression
          vars = scanner[2].split(',').map{|name|
            match = VAR.match(name)
            # 1 = varname
            # 2 = explode
            # 3 = length
            [ match[1], match[2] == '*', match[3].to_i ]
          }
          yield @operators[scanner[1]].new(vars)
        else
          literal = scanner.scan(LITERAL)
          if literal
            yield(Literal.new(literal))
          else
            raise Invalid.new(@source,scanner.pos)
          end
        end
      end
    end