Для повторного разбора инкрементных изменений вам потребуется API более низкого уровня для вашего анализатора.
У синтаксического анализатора есть состояние, которое изменяется при обработке ввода. Например, сначала синтаксический анализатор может пропускать пробелы, теперь он может считывать число, затем он может создавать абстрактное синтаксическое дерево для выражения. Если бы вы могли сделать снимок всей этой информации о состоянии анализатора в контрольных точках во входных данных, то вы могли бы повторно проанализировать инкрементное изменение, начав с последнего вехового периода перед изменением (и, возможно, остановив его раньше, если состояние идентично на контрольном этапе после этого меняется).
Для простой подсветки синтаксиса, как это делают многие редакторы-программисты, это подход. Подсветка синтаксиса требует чуть больше, чем токенизация, поэтому нет большого состояния для захвата. И многие языки программирования имеют множество возможностей для этапов, например, в начале новой строки. В этих случаях вам может даже не понадобиться фактически сохранять состояние анализатора, поскольку вы можете знать, что оно всегда одинаково в начале строки.
Итак, вам нужен API, например:
parsedString parseIncrementally(parserState, rawString);