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;
}
Другие вопросы по тегам