Синтаксическое дерево в принципе не имеет направления слева-направо или справа-налево.
Это значит, что парсить можно тоже в двух направлениях.

Если сделать допущение, что в текстовом редакторе только одна область текущего редактирования, где синтаксис нарушен,
то можно строить два частичных дерева - с начала и с конца (а в месте ошибок с обоих сторон как раз область редактирования и будет находится).

Соответственно, раскраска будет корректной в начальной области и в конечной области. А в срединной редактируемой области можно применить какую-нибудь другую (упрощённую) раскраску. Например сохранять у фрагментов последний присвоенный цвет.

цитата из 1965, Кнут:
"It is interesting to point out furthermore that nearly every grammar which is known to be unambiguous is either an LR(k) grammar, or (dually) is a right-to-left translatable grammar, or is some grammar which is translated using "both ends toward the middle." Thus, the LR(k) condition may be regarded as the most powerful general test for nonambiguity that is now available."

Отредактировано Лис (2017-11-07 09:01:19)