code: func lexNumber(l *Lexer) lexFunc {
  	if !l.scanNumber() {
  		return l.errorf("bad number syntax: %q", l.input[l.start:l.pos])
  	}
  	if sign := l.peek(); sign == '+' || sign == '-' {
  		// Complex: 1+2i. No spaces, must end in 'i'.
  		if !l.scanNumber() || l.input[l.pos-1] != 'i' {
  			return l.errorf("bad number syntax: %q", l.input[l.start:l.pos])
  		}
  		l.emit(TokenNumber)
  	} else {
  		l.emit(TokenNumber)
  	}
  	return lexExpression
  }
docs: // lexNumber scans a number: decimal, octal, hex, float, or imaginary. This
  // isn't a perfect number scanner - for instance it accepts "." and "0x0.2"
  // and "089" - but when it's wrong the input is invalid and the parser (via
  // strconv) will notice.
  //
  // NOTE: borrowed from https://github.com/golang/go/tree/master/src/text/template/parse/lex.go