ссылок на литературу там нет, потому что Игорь Русских не смотрел никуда когда делал Colorer. Короче, история такая, давным давно, в прошло столетии в редакторе Farа не было подсветки синтаксиса. А очень надо было. Потому Евгений Рошаль просто предоставил соответствующее API писателям расширений, и дальше уже как-то само пошло. Игорь Русских написал свою библиотеку regexp-ов (не особо заморачиваясь детерминированием КА, и работавшими с откатами). К счастью я ему не успел рассказать, что на регулярках не отследить баланс скобок, как он сделал баланс скобок на паре регулярных выражений (начало и конец блока) с переключением в другую схему.
Такой подход, на практике, не сильно отличается от переключения стейта в том же flex-е, но со стеком состояний и вложенными схемами, позволило покрыть большой (очень большой) класс языков.
Да, там регулярки с костылями, но достаточно элегантными костылями.
Понятно, спасибо!
> потому что Игорь Русских не смотрел никуда когда делал Colorer.
Мне, кстати, сперва показалось, что решение чуть ли не "содрано" с vim-а. ;)
Но присмотревшись (и увидев некоторые существенные отличия в деталях), я понял, что, по-видимому (так же, как и Игорь Русских) авторы syntax highlighters, когда решают эту проблему, просто интуитивно (т.к. теории, как и я они не находят — может, её всё-таки, и нет?) реализуют примерно то же самое. А потом "допиливают" по ходу реализации подсветки для конкретных языков, когда становится понятно, что у существующей реализации не хватает "мощности", или становится очевидным, что что-то можно было бы сделать удобнее.
> он сделал баланс скобок на паре регулярных выражений (начало и конец блока) с переключением в другую схему.
И это уже — совсем не регулярки, а что-то другое (и куда мощнее, чем они)!
> но со стеком состояний и вложенными схемами, позволило покрыть большой (очень большой) класс языков.
А вот это, собственно, и есть тот подход, к которому (по мере разработки, видимо) и приходят авторы highligthers, способных покрыть очень большой класс языков. ;)