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