Re: Алгоритм подсветки синтаксиса
От: comer США http://getboost.codeplex.com/
Дата: 20.01.03 21:27
Оценка: 2 (1)
Здравствуйте, ukman, Вы писали:

U>Кто знает, каким образом работают всякие там редакторы с подсветкой синтаксиса? Понятно, что просто разобраться, что есть что в тексте- не проблема, но как это сделать во время редактирования текста, ведь юзер может обрабатывать огромный файл и анализировать его после каждого нажатия на кнопку не оправдано загружать проц.


Тут были отзывы по поводу разбора только одной строки, по моему, это не верно. Можно так: первый раз Вы полностью разпознаете текст. и у Вас есть информация, с какого по какой символ текста какой токен. Например:

int main
^ ^^
| |keyword
| white space
keyword

Потом, что такое процесс, редактирования? Минимальная операция: замена одного куска текста на другой (не строки и ничего такого подобного, и именно тескта, ведь я могу просто вставить текст, или пометив, удалить его).

Обычно лексические анализаторы распознают токены в порядке следования их в тексте. После одной минимальной операции редактирования можно запустить парсер от первого токена который был изменен, и до, тех пор пока парсер либо не выйдем на токен который не менялся либо не достигнем конца файла (если кому то хочеться привязываться к экрану, то можно до конца экрана, а при прокрутке вниз, считать добавлением текста). Понятно, что дальше текст распознавать не имеет смысла. Легко видеть, что при элементарных операциях редактирования, распознаваться будут обычно 1-2 токена. При многострочном комментировании/раскомментировании парсер будет работать чуть дольше (тут никуда не денешься).
getboost.codeplex.com
citylizard.codeplex.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.