next up previous contents
Next: input(). Up: Структура файла lex.yy.c Previous: yymore().   Contents

yyless(n).

В некоторых случаях возникает необходимость использовать не все символы распознанной цепочки в yytext, а только необходимое число. Для этой цели используется функция yyless(n), где n указывает, что в данный момент необходимо только n символов строки из yytext. Остальные найденные символы будут возвращены во входной поток. Пример использования функции yyless:

. . . =-[A-ZА-Яa-zа-я] { printf("Oператор (=-) двусмысленный.\n"); yyless(yyleng-2); /* * Здесь необходимо записать действия для * случая "=-" */ } . . . В этом примере разрешается двусмысленность выражения =- буква в языке Си. Это выражение можно рассматривать как =- буква или как = -буква. Предположим, что эту ситуацию нужно рассматривать как = -буква и выводить предупреждение. В примере правило распознает эту ситуацию, выводит предупреждение и затем, после вызова yyless(yyleng - 2); два символа -буква будут возвращены во входной поток, а знак = останется в yytext для обработки, как и в нормальной ситуации. Таким образом, при продолжении чтения входного потока уже будет обрабатываться цепочка -буква, что и требовалось.



2004-06-22