Flex Регулярные выражения - PullRequest
0 голосов
/ 15 января 2019

Не могу понять, что означают следующие выражения?

Я знаю основы синтаксиса регулярных выражений в flex и пытался выяснить значение регулярных выражений, но не смог. Я пытался в течение 3 часов.

%%
"/*".*"*/" {int i = 0;
while (yytext[i]!='\0') {
if(yytext[i]=='\n')
{
lineno++;
colno=1;
}
else
colno++;
i++;
}
}
"//".*"\n" { lineno++; colno=1;}
(\"(.)*\") {colno+=strlen(yytext);}
(\'(.)\') {colno+=strlen(yytext);}

Мой вопрос состоит в том, чтобы сказать мне значение этих четырех регулярных выражений в коде

1 Ответ

0 голосов
/ 16 января 2019

.* (или (.)*, что по смыслу идентично) соответствует самой длинной последовательности символов, кроме новой строки. Flex позволяет заключать символы в кавычки, заключая их в двойные кавычки ("//") или используя обратную косую черту (\"). Таким образом, четыре шаблона соответствуют самой длинной последовательности в текущей строке, состоящей из символов

  1. От /* до */

  2. От // до конца строки

  3. От " до "

  4. От ' до `` '`.

Только второй будет работать как задумано. Все остальные совпадут слишком сильно, если на одной строке два совпадения, а первое не будет соответствовать многострочным комментариям.

Существует не так много, чтобы сгибать шаблоны, кроме основ. Все синтаксисы шаблонов описаны в очень короткой главе flex manual .

...