синтаксическая ошибка, неожиданный токен, ожидающий конец файла

Я получаю следующую ошибку при запуске моего файла Parser (двоичный файл, полученный после компиляции файлов Flex / Bison).
error: syntax error, unexpected TKN_PRIMARY, expecting end of file

Вот правило, определенное в гибком коде:

<PRIMARY_MME_STATE>{number} {
lexVal = YYText();
std::cout<<"PRIMARY MME -->  "<<lexVal<<std::endl;
yylval->strVal = new std::string(lexVal);
return token::TKN_PRIMARYMME;
}

И я понимаю, что, поскольку значение TKN_PRIMARY равно нулю (это значение, определенное для END% токена END 0 «конец файла»), вместо возврата TKN_PRIMARY, он ожидает, что токен END будет возвращен. Пожалуйста, прокомментируйте, если мое понимание верно. А также как решить эту проблему.

-1

Решение

Если TKN_PRIMARY а также END имеют одинаковое значение (или, вообще говоря, если любые два разных токена имеют одинаковое значение), то синтаксический анализатор зубров будет действовать непредсказуемым образом.

Цитируя руководство бизонов:

Однако, как правило, лучше, чтобы Bison выбирал числовые коды для
все типы токенов. Бизон автоматически выберет коды, которые не
конфликтуют друг с другом или с нормальными персонажами.

Я думаю, что это определенно лучший способ решения проблемы.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]