История изменений
Исправление
object,
(текущая версия)
:
Лексер вполне себе может, и в современых языках является, контекстно-зависимым. Иначе ты просто не разобьешь на лексемы синтаксисы современных языков.
Для подсветки синтаксиса достаточно только потока токенов, а ast дерево, являющееся продуктом работы парсера нужно для всех прочих фич - таких как автодополнение, семантический анализ кода и прочее.
Инкрементальность же лексера нужна для того, чтобы не производить разбор всего исходного кода при каждом изменении, а инкрементально вносить правки, благодаря кешированию всех промежуточных состояний работы лексера.
Большинство редакторов кода избегают использование/разработку инкрементальных лексеров, а просто прибегают к различным хакам.
Исходная версия
object,
:
Лексер вполне себе может, и в современых языках является, контекстно-зависимым. Иначе ты просто не разобьешь на лексемы синтаксисы современных языков.
Для подсветки синтаксиса достаточно только потока токенов, а ast дерево, являющееся продуктом работы парсера нужно для всех прочих фич - таких как автодополнение, семантический анализ кода и прочее.
Инкрементальность же лексера нужна для того, чтобы не производить разбор всего исходного кода при каждом изменении, а инкрементально вносить правки, благодаря кешированию всех промежуточных состояний работы лексера.
Большинство релакторов кода избегают использование инкрементальных лексеров, а просто прибегают к различным хакам.