Возвращается самое длинное совпадение.
С flex & bison, Инструменты для обработки текста :
Как Flex справляется с неоднозначными образцами
Большинство гибких программ довольно неоднозначны, с несколькими шаблонами, которые могут соответствовать
тот же вход. Flex разрешает неоднозначность по двум простым правилам:
- Сопоставлять максимально длинную строку каждый раз, когда сканер сопоставляет ввод.
- В случае ничьей используйте шаблон, который появляется первым в программе.
Вы можете проверить это самостоятельно, конечно:
файл: demo.l
%%
"//"[!/] {printf("FIRST");}
"//"[!/]< {printf("SECOND");}
%%
int main(int argc, char **argv)
{
while(yylex() != 0);
return 0;
}
Обратите внимание, что /
и <
не нужно экранировать, а {1}
является избыточным.
bart@hades:~/Programming/GNU-Flex-Bison/demo$ flex demo.l
bart@hades:~/Programming/GNU-Flex-Bison/demo$ cc lex.yy.c -lfl
bart@hades:~/Programming/GNU-Flex-Bison/demo$ ./a.out < in.txt
SECOND
, где in.txt
содержит //!<
.