Вы действительно пытаетесь использовать странный инструмент для этого.Это можно сделать, но на самом деле это не очень хорошее решение для построения грамматики для этого.Я бы посоветовал вам использовать существующее выражение получения имени пользователя и просто заменить не-азные символы, используя код в действии файла лексера.
Этот код удаляет все из yytext
, чтописьмо.yytext
является изменяемым буфером, поэтому подобные вещи разрешены, если вы не удлиняете буфер.
char* r = yylex;
for (char *p = yylex; *p; ++p) {
if ((*p >= 'a' && *p < 'z') || (*p >= 'A' && *p < 'Z')) {
*r++ = *p;
}
}
*r = 0;
Это приведет к alice
из заданной вами строки примера, еслииметь все до знака @
, используя правило лексера, которое вы уже дали.