В книгах по парсерам/лексерам, в той же книге дракона или programming language pragmatics много внимания уделяется восстановлению после сбоев/ошибок. Например, пропустить невнятный токен и пойти дальше. Но мне не понятно зачем так делать, если программист ошибся, то не опасно ли это додумывать за него, типа "ну тут какой-то мусор, пропустим его"? На ум приходит только цель посмотреть дальше, что есть в коде, чтобы сформировать толковое сообщение об ошибке, типа ты написал fe, может хотел fn или у тебя есть функция sum (объявленная ниже), а ты пишешь sub. Что вы думаете по поводу не как восстанавливаться после ошибок, а зачем?