Для отката обычно делают так, делаешь у парсера поле в которое сохраняешь позицию файла, потом если неверно пошло, устанавливаешь позицию лексера в него и идёшь по другой ветке
У меня лексический и синтаксический анализ независимы.
Результатом лексического анализа является последовательность токенов.
Ссылка на эту последовательность передаётся синтаксическому анализатору, который по ней перемещается и строит AST.
Я не представляю как в моём случае использовать подход о котором вы пишете.
я уже пробовал использовать LR(1), в моём случае сложность возрастает минимум на порядок. Возможно потому что у меня PEG.