Большинство синтаксических хайлайтеров, которых я знаю, не реагируют на синтаксическое дерево, а просто маркируют исходный и цветной текст в соответствии с типами токенов, которые он формирует.Наиболее трудная задача, такая как подсветка, - это распознавание многострочных комментариев (и / или строк, если язык позволяет это);все остальное можно хранить в одной строке исходного кода.
Автоматическая отступа движки более сложны.Теоретически наилучшие результаты могут быть получены при восстановлении полного синтаксического дерева, но это происходит медленно и порождает проблемы обработки ошибок (поскольку большинство программ даже не правильно сформированы во время редактирования).Вместо этого они используют различные виды упрощенного сканирования и эвристики, которым не всегда удается соответствовать истинному синтаксису языка.
( edit: при дальнейшей мысли, что это не совсем верно.Например, Java-редактор Eclipse также изменит цвет идентификаторов в зависимости от того, называют ли они локальные переменные, поля экземпляра или статические переменные / методы.Это происходит в отдельном проходе от базовой лексической подсветки после того, как редактор проанализировал и проверил тип проверки кода.для живых перекрестных ссылок).