Я получаю следующую ошибку при запуске моего файла 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 будет возвращен. Пожалуйста, прокомментируйте, если мое понимание верно. А также как решить эту проблему.
Если TKN_PRIMARY
а также END
имеют одинаковое значение (или, вообще говоря, если любые два разных токена имеют одинаковое значение), то синтаксический анализатор зубров будет действовать непредсказуемым образом.
Цитируя руководство бизонов:
Однако, как правило, лучше, чтобы Bison выбирал числовые коды для
все типы токенов. Бизон автоматически выберет коды, которые не
конфликтуют друг с другом или с нормальными персонажами.
Я думаю, что это определенно лучший способ решения проблемы.
Других решений пока нет …