Стандартный трюк - это исправление ошибок с помощью механизма синтаксического анализа, помогающего делать прогнозы.
Для синтаксических анализаторов на основе таблиц (таких как LALR или GLR), когда возникает синтаксическая ошибка, анализатор недавно находился в каком-то состоянии, в котором ошибка еще не произошла. Можно записать стек анализа, чтобы запомнить это перед каждой сменой (или, альтернативно, записать сокращения до ошибки). Учитывая, что возникла ошибка, можно проверить состояние анализа сохраненного стека, чтобы определить, какие токены могут быть следующими (это также как выполнить кодовое завершение с точки зрения синтаксических токенов). Более сложный метод может придумать наименьшую возможную последовательность токенов, которая допускает сдвиг на токен ошибки, или наименьшее возможное дерево, которое может заменить токен ошибки и разрешить переход на следующий.
Это не так просто с парсерами рекурсивного спуска, потому что там не так много информации, которая делает предикаты. Для исправления ошибок хитрый трюк - определить точки восстановления после ошибок (например, где может быть принята «stmt») и продолжить сканирование до «;» найден и принят и "ошибка stmt". Это не поможет, если вы хотите завершить код.