code: func (s *Scanner) read() rune {
  	if s.i >= len(s.b) {
  		return eof
  	}
  
  	ch, n := utf8.DecodeRune(s.b[s.i:])
  	s.i += n
  
  	if ch == '\n' {
  		s.pos.LineNo++
  	}
  	return ch
  }
docs: // read reads the next rune and moves the position forward.