Могут ли действия в Lex получить доступ к отдельным группам регулярных выражений?
(ПРИМЕЧАНИЕ. Думаю, что нет, поскольку групповые символы - круглые скобки - соответствуют документации , используемой для изменения приоритета. Но если это так, порекомендуйте ли вы альтернативный генератор сканера C / C ++, который я могу сделать это? Мне не очень нравится писать свой собственный лексический анализатор.)
Пример:
Допустим, у меня есть этот ввод: foo [tagName attribute="value"] bar
, и я хочу извлечь тег с помощью Lex / Flex. Я, конечно, мог бы написать это правило:
\[[a-z]+[[:space:]]+[a-z]+=\"[a-z]+\"\] printf("matched %s", yytext);
Но допустим, я бы хотел получить доступ к определенным частям строки, например, атрибут, но без необходимости повторного анализа yytext (так как строка уже отсканирована, на самом деле нет смысла снова сканировать ее часть). Поэтому что-то вроде этого было бы предпочтительным (группы регулярных выражений):
\[[a-z]+[[:space:]]+[a-z]+=\"([a-z]+)\"\] printf("matched attribute %s", $1);