Re[2]: npg
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 15.04.07 05:24
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Может ли кто-то взять это дело и покумекать как на его базе можно было бы создать колорер (подкрашиватель исходников к фрагментам кода)?


Уже вчера поэкспериментировал с этим. Подсветка получается нормальная, за исключением препроцессора, который пока распознаётся как ошибка. Вообще, лексика препроцессора несколько отличается от лексики обычного кода. Я в таких случаях вижу следующий выход: надо сделать два лексера, первый для кода, второй для пропроцессора. Такая возможность предусмотрена в генераторе, только не доведена доконца. А именно, режимы лексера задаются числами. А это неудобно, нужно бы генерить дополнительный enum (LexerModes), и режимы задавать им.

Так же обнаружился глюк при распознавании ошибок — поле Text у лексем типа Error заполняется неправильно. Буду фиксить.

Есть у колорера и ещё один недостаток — отсутствие обработки табов. Для этого нужно контролировать каждый символ, в какой позиции он находится. Но такой же контроль есть в лексере. Я вот думаю: а что если добавить эту функциональность в сборку Common.dll, чтобы избежать дублирования кода?

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

Есть ещё одно предложение. В качестве теста утилиты хочу сделать полноценный колорер кода на основе синтаксического анализатора. Думаю, работа несложная, т.к. результатом работы парсера будет просто список тех мест, которые нужно ракрасить по-особому. Причём никакого контроля типов и т.д. не будет, а типами будут считаться ключевые слова, которые синтаксически должны быть типами, но необязательно ими являются. Правда, при таком подходе могут быть неоднозначности, но это лучше, чем ничего.

Такая штуковина непригодна для сайта, т.к. запостить можно и кусок кода. Т.е. нужно определить, какой нетерминал находится в корне, а я даже не представляю себе, как такое сделать (может, это вообще нерешаемая задача).
... << RSDN@Home 1.2.0 alpha rev. 672>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.