code: func (r *Lexer) fetchNumber() {
  	hasE := false
  	afterE := false
  	hasDot := false
  
  	r.pos++
  	for i, c := range r.Data[r.pos:] {
  		switch {
  		case c >= '0' && c <= '9':
  			afterE = false
  		case c == '.' && !hasDot:
  			hasDot = true
  		case (c == 'e' || c == 'E') && !hasE:
  			hasE = true
  			hasDot = true
  			afterE = true
  		case (c == '+' || c == '-') && afterE:
  			afterE = false
  		default:
  			r.pos += i
  			if !isTokenEnd(c) {
  				r.errSyntax()
  			} else {
  				r.token.byteValue = r.Data[r.start:r.pos]
  			}
  			return
  		}
  	}
  
  	r.pos = len(r.Data)
  	r.token.byteValue = r.Data[r.start:]
  }
docs: // fetchNumber scans a number literal token.