В обычной ситуации содержимое yytext
обновляется всякий раз, когда
на входе появляется следующая строка (в yytext
всегда находятся символы
распознанной цепочки). Иногда возникает необходимость добавить к текущему
содержимому yytext
следующую распознанную цепочку символов. Для этой
цели используется функция yymore
. Пример использования функции yymore
:
.
.
.
\"[^"]* {
if(yytext[yyleng-1]=='\\') yymore();
else
{/*
* Здесь должна быть часть программы,
* обрабатывающая закрывающую кавычку.
*/}
}
.
.
.
В этом примере распознаются строки симвoлов, взятые в двойные кавычки,
причем символ двойных кавычек внутри этой строки может изображаться
с предшествующей косой чертой. ЛА должен распознавать кавычку, ограничивающую
строку, и кавычку, являющуюся частью строки, когда она изображена
как \"
. Если на вход поступает строка абв\"где"
,
то сначала будет распознана цепочка "абв
и так как последним символом в этой цепочке будет символ \
,
выполнится вызов yymore. В результате к цепочке "абв\
будет добавлено "где
, и в yytext мы получим "абв\"где"
,
что и требовалось.