Синтаксическая подсветка шаблона дизайна - PullRequest
5 голосов
/ 02 апреля 2009

Я ищу несколько хороших обзоров лучших практик и общих шаблонов для включения подсветки синтаксиса в текстовом поле. Кажется, что это очень распространенное упражнение, почти во всех языках есть элемент управления пользовательского интерфейса, который позволяет подсветку синтаксиса на разных языках. Мне просто любопытно посмотреть, есть ли общий шаблон реализации.

Все ли используют регулярные выражения? Есть ли хранилище для регулярных выражений, которые обычно используются в сценариях подсветки синтаксиса?

Существуют ли альтернативные / лучшие подходы к выделению синтаксиса?

Обновление

Ссылки на соответствующие ресурсы о выполнении подсветки синтаксиса на данном языке или концепции, связанные с подсветкой синтаксиса, были бы хороши. Лексинг (лексический анализ) был приведен в ответе, но без ссылки, чтобы узнать больше. Все, что поможет лучше понять эту обычно решаемую проблему, было бы замечательно.

Лексический анализ в Википедии

1 Ответ

2 голосов
/ 02 апреля 2009

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

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

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

...