code: func (p *Parser) parseNumber(cur *ListNode) error {
  	r := p.peek()
  	if r == '+' || r == '-' {
  		r = p.next()
  	}
  	for {
  		r = p.next()
  		if r != '.' && !unicode.IsDigit(r) {
  			p.backup()
  			break
  		}
  	}
  	value := p.consumeText()
  	i, err := strconv.Atoi(value)
  	if err == nil {
  		cur.append(newInt(i))
  		return p.parseInsideAction(cur)
  	}
  	d, err := strconv.ParseFloat(value, 64)
  	if err == nil {
  		cur.append(newFloat(d))
  		return p.parseInsideAction(cur)
  	}
  	return fmt.Errorf("cannot parse number %s", value)
  }
docs: // parseNumber scans number