Re[13]: Хочется странного
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.01.25 07:43
Оценка:
Здравствуйте, Sinclair, Вы писали:

M>>Сейчас просто синтаксис раскрашиваю, тоже нужная мне штука. Без особых проблем можно настроить под любой язык. Для PHP/Perl, и прочих, где есть такие штуки, как Document Here, надо немного доделать, но пока не нужно было

S>Лексером? Мало какой язык можно раскрасить лексером.

Я плюсики раскрашиваю вроде норм.

Отвечая также на соседнее сообщение, скажу, что у меня наверное не совсем честный лексер. Так, у меня строковые символьные литералы парсятся отдельным классом, который надо "проинсталлить" в лексер. проблема с PHP/PERL в общем-то только с тем, что для DOCUMENT HERE надо написать отдельный парсер этого литерала, мне пока не до этого.

Далее, выхлоп токенизера отправляется в пользовательский обработчик, завернутый в std::function. Потом мне показалось этого мало, и я сделал возможность добавлять "фильтры" на выхлоп. Сильно переделывать уже не хотелось, и у меня немножко странно получилось — фильтры устанавливаются в голову, и получается, что раньше отрабатывают фильтры, установленные позже.

Ф фильтрах я при необходимости делаю небольшие автоматики, которые делают что-то полезное. Так, например, для числовых литералов, если за ними сразу, без каких-либо пробелов и чего-то другого, следует идентификатор — я это склеиваю, и получаю новомодные плюсовые пользовательские литерали, или как оно там называется. Или препроцессор. Сначала было всё в конечном обработчике, потом сделал фильтр, который умеет посылать токены PP_START/PP_END, по которым я устанавливаю другой цвет фонта при раскраске.

Вот так у меня выглядит создание токенизатора: http://files.rsdn.org/2511/cpp.html
А так — использование: http://files.rsdn.org/2511/tokenizer_test_011.html

Эти файлы раскрашены этим тестом


S>Регекспы там затем, что они работают быстрее, чем обращение по протоколу LSP.


Ну, вот тут не уверен, что это всегда так. В любом случае, мой токенизер гораздо быстрее работает.


M>>Номер строки пересчитывать не слишком быстро, это надо с начала файла бежать каждый раз

S>Так никто не делает. При работе в IDE файл хранится в виде дерева строк, по нему преобразование — O(logN) в любую сторону.

Я пока с IDE не работаю, у меня текст в одной строке, и все ссылки на исходный текст идут как индекс в этой строке


ЗЫ Заметил баг — съедает закрывающий символ "*/" в многострочных коментариях
Маньяк Робокряк колесит по городу
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.