Я использую лексер C, сгенерированный Flex, и синтаксический анализатор C ++, сгенерированный Bison. Я изменил синтаксический анализатор, чтобы принимать только строковый ввод.
Я вызываю функцию парсера yyparse()
в цикле и читаю построчно вводимые пользователем данные. Я останавливаю цикл, если вход «выход».
Проблема, с которой я сталкиваюсь, заключается в том, что когда ввод не соответствует ни одному правилу, то синтаксический анализатор внезапно останавливается и при следующей итерации запускается в том же состоянии, ожидая, что правило, которое было остановлено (из-за синтаксической ошибки), завершится.
Работает нормально, если ввод действителен и соответствует правилу парсера.
При синтаксической ошибке я переопределил функцию yyerror()
, которая отображает простое сообщение об ошибке.
Как очистить состояние анализатора, когда входные данные не соответствуют ни одному правилу синтаксического анализатора, чтобы на следующей итерации анализатор запускался заново?