Применимы ли аналогичные причины к лексерам в компиляторах?
Иногда, конечно.Например, рассмотрим правило лексера, которое возвращает токен, указывающий «это имя переменной».Синтаксическому анализатору необходим не только сам токен «имя переменной», но и фактическое имя: бесполезно знать, что это имя, не зная, является ли это имя Фредом, или Вильмой, или Барни, или кем-то еще.
Если оно является именем, то где его хранить?Не могли бы вы предоставить парсеру доступ напрямую к байтовому потоку, содержащему само имя?(Если да, то как долго? Как долго это нужно парсеру?)
Или рассмотреть строковый литерал (с любым синтаксисом, который у них есть).Где хранятся символы, составляющие строку?Можете ли вы предоставить доступ непосредственно к исходному буферу?
Если вы владеете структурами данных, которые предоставляют эти буферы времени сканирования, вы можете предоставить ограниченный доступ к ним и точно знать, что именновремя жизни заимствованных строк может быть.Это может, в зависимости от многих других деталей, позволить вам избежать копирования (по крайней мере, иногда).Если вы используете некоторые предоставляемые библиотекой буферизованные процедуры ввода-вывода, которые обещают доставлять только один символ за раз, вы определенно не сможете предоставить такой доступ.