code: func tokenizeExpression(ch rune, tokenType token, check runeCategoryValidator, r *bufio.Reader) (token, string, error) {
  	var data []rune
  	data = append(data, ch)
  
  	for {
  		c, _, err := r.ReadRune()
  
  		if c == zeroRune {
  			break
  		}
  
  		if err != nil {
  			return tokenError, "", err
  		}
  
  		if check(c) {
  			data = append(data, c)
  		} else {
  			err := r.UnreadRune()
  
  			if err != nil {
  				return tokenError, "", err
  			}
  
  			return tokenType, string(data), nil
  		}
  	}
  
  	return tokenType, string(data), nil
  }
docs: // tokenizeExpression aggegates a series of runes matching check predicate into a single
  // string and provides given tokenType as token type