Lex - распознавание неоднозначных токенов
Все,
В моем файле Lex мы опознаем некоторые операторы как токены, некоторые из этих операторов
":p"
and
":"
проблема в том, что любое слово ведьма начинается с: ":presentation"
не признается как
':' word /*grammar*/
и ошибка разбора срабатывает из-за возвращенного значения lex ":p"
как следующий токен
как я могу решить эту двусмысленность?
1 ответ
Решение
Вместо этого вы должны определить правило лексера, чтобы оно соответствовало всему токену "символа", т.е.
:[a-zA-Z_][a-zA-Z0-9_]* { yylval.symbol = strdup(yytext + 1); return SYMBOL; }
Если вам нужно, вы можете сделать проверку в этом правиле для :p
и особый случай, например:
:[a-zA-Z_][a-zA-Z0-9_]* {
if (strcmp(yytext, ":p") == 0) {
return OP_P;
}
yylval.symbol = strdup(yytext + 1);
return SYMBOL;
}