Еще раз вычислить длину для UTF-8 это O(N) задача, если она не закеширована, а если стоки мутабельны то это практически всегда и гарантированно придется делать. Что бы достать n-й символ из UTF-8 нужно его декодировать - это довольно недешевая операция. Для UCS-2 это O(1) и никакой амортизации при доставании символа соответственно)
А зачем lexer-у, и впоследствии тому, что будет обрабатывать лексемы, доставать n-й символ из UTF-8, и вычислять его длину?