Подсветка синтаксиса
![](http://upload.wikimedia.org/wikipedia/commons/thumb/a/a6/HTML_source_code_example.svg/315px-HTML_source_code_example.svg.png)
Подсветка синтаксиса — это функция текстовых редакторов , которая используется для языков программирования , сценариев или языков разметки , таких как HTML . Эта функция отображает текст, особенно исходный код , разными цветами и шрифтами в зависимости от категории терминов. [1] Эта функция облегчает написание на структурированном языке, таком как язык программирования или язык разметки, поскольку структуры и синтаксические ошибки визуально различимы. Эта функция также используется во многих контекстах, связанных с программированием (например, в руководствах по программированию), либо в виде красочных книг, либо в виде онлайн-сайтов, чтобы облегчить читателям понимание фрагментов кода. Выделение не влияет на смысл самого текста; он предназначен только для читателей-людей.
Выделение синтаксиса является формой вторичной записи , поскольку выделение не является частью смысла текста, а служит для его закрепления. Некоторые редакторы также объединяют подсветку синтаксиса с другими функциями, такими как проверка орфографии или свертывание кода , в качестве средств редактирования, которые являются внешними по отношению к языку.
Практическая польза
![](http://upload.wikimedia.org/wikipedia/commons/thumb/6/60/Syntax-highlighting-javascript.gif/312px-Syntax-highlighting-javascript.gif)
Подсветка синтаксиса — это одна из стратегий улучшения читаемости и контекста текста; особенно для кода, занимающего несколько страниц. Читатель может легко игнорировать большие разделы комментариев или кода, в зависимости от того, что он ищет. Подсветка синтаксиса также помогает программистам находить ошибки в своей программе. Например, большинство редакторов выделяют строковые литералы другим цветом. Следовательно, обнаружить отсутствующий разделитель гораздо проще из-за контрастного цвета текста. Сопоставление скобок — еще одна важная функция многих популярных редакторов. Это позволяет легко увидеть, была ли пропущена фигурная скобка, или найти совпадение с фигурной скобкой, на которой находится курсор, выделив пару другим цветом.
Исследование, опубликованное на конференции PPIG, оценивало влияние подсветки синтаксиса на понимание коротких программ и обнаружило, что наличие подсветки синтаксиса значительно сокращает время, необходимое программисту для усвоения семантики программы. [2] Кроме того, данные, собранные с помощью айтрекера во время исследования, показали, что подсветка синтаксиса позволяет программистам уделять меньше внимания стандартным синтаксическим компонентам, таким как ключевые слова.
Поддержка в текстовых редакторах [ править ]
![](http://upload.wikimedia.org/wikipedia/commons/thumb/b/b6/Gedit_3.32_screenshot.png/311px-Gedit_3.32_screenshot.png)
Некоторые текстовые редакторы также могут экспортировать цветную разметку в формат, подходящий для печати или для импорта в текстовые редакторы и другие виды программного обеспечения для форматирования текста; например, в виде HTML, цветной версии LaTeX, PostScript или RTF подсветки синтаксиса. Существует несколько библиотек или «движков» подсветки синтаксиса, которые можно использовать в других приложениях, но сами по себе они не являются полноценными программами, например расширение Generic Syntax Highlighter (GeSHi) для PHP .
Для редакторов, поддерживающих более одного языка, пользователь обычно может указать язык текста, например C , LaTeX , HTML , или текстовый редактор может автоматически распознать его на основе расширения файла или путем сканирования содержимого файла. Такое автоматическое определение языка создает потенциальные проблемы. Например, пользователь может захотеть отредактировать документ, содержащий:
- более одного языка (например, при редактировании HTML- файла, содержащего встроенный код JavaScript ),
- язык, который не распознается (например, при редактировании исходного кода малоизвестного или относительно нового языка программирования),
- язык, который отличается от типа файла (например, при редактировании исходного кода в файле без расширения в редакторе, который использует расширения файлов для определения языка).
В этих случаях непонятно, какой язык использовать, и документ может не подсвечиваться или подсвечиваться неправильно.
Элементы синтаксиса [ править ]
Большинство редакторов с подсветкой синтаксиса позволяют присваивать разные цвета и стили текста десяткам различных лексических подэлементов синтаксиса. К ним относятся ключевые слова, комментарии, инструкции потока управления, переменные и другие элементы. Программисты часто сильно настраивают свои настройки, пытаясь показать как можно больше полезной информации, не усложняя при этом чтение кода.
Некоторые редакторы, называемые украшением синтаксиса , также отображают определенные синтаксические элементы более визуально приятными способами, например, заменяя оператор указателя, например ->
в исходном коде с помощью фактического символа стрелки (→) или изменения подсказок оформления текста , таких как /italics/, *boldface* или _underline_ в комментариях исходного кода, с помощью фактического курсива , жирного шрифта или подчеркнутого представления.
Примеры [ править ]
Ниже приведено сравнение фрагмента кода C :
Стандартный рендеринг | Подсветка синтаксиса |
---|---|
/* Привет, мир */
#include <stdlib.h>
#include <stdio.h>
интервал основной()
{
printf("Привет, мир\n");
вернуть 0;
}
|
/* Привет, мир */
#include <stdlib.h>
#include <stdio.h>
int main ()
{
printf ( «Hello World \n » );
вернуть 0 ;
}
|
Ниже приведен еще один фрагмент выделенного синтаксиса C++ кода :
// Создаем объекты Window_count:
const auto window_count = int { 10 };
auto windows = std :: array < std :: shared_ptr , <Window> max_window_count { ; > }
for ( auto i = int {0} = ; i < window_count ; ++ i ) {
windows [ i ] :: std make_shared ; < Window > ()
}
В примере C++ редактор распознал ключевые слова const
, auto
, int
, и for
. Комментарий . в начале также особым образом выделен, чтобы отличить его от рабочего кода
История и ограничения [ править ]
Идеи подсветки синтаксиса во многом совпадают с идеями синтаксически управляемых редакторов . Одним из первых таких редакторов кода была Эмили, редактор кода Уилфреда Хансена 1969 года. [3] [4] Он предоставлял расширенные, независимые от языка средства завершения кода и, в отличие от современных редакторов с подсветкой синтаксиса, фактически делал невозможным создание синтаксически неверных программ.
В 1982 году Анита Х. Клок и Ян Б. Чодак подали патент на первую известную систему подсветки синтаксиса. [5] который использовался в периферийном устройстве Intellivision Entertainment Computer System (ECS), выпущенном в 1983 году. [6] В нем подчеркивались различные элементы программ на языке BASIC, и он был реализован с целью облегчить новичкам, особенно детям, начало написания кода. [7] Позже Live Parsing Editor ( LEXX ), написанный для операционной системы VM для компьютеризации Оксфордского словаря английского языка в 1985 году, был одним из первых, кто использовал цветовую подсветку синтаксиса. Его возможность живого анализа позволяла добавлять в редактор пользовательские анализаторы для текста, программ, файлов данных и т. Д. [8] На микрокомпьютерах MacPascal 1.0 (10 октября 1985 г.) распознавал синтаксис Pascal при его вводе и использовал изменения шрифта (например, выделение жирным шрифтом для ключевых слов) для выделения синтаксиса на монохромном компактном Macintosh и автоматически делал отступы в коде в соответствии с его структурой. [9]
Некоторые текстовые редакторы и инструменты форматирования кода выполняют подсветку синтаксиса, используя сопоставления с образцом эвристику (например, регулярные выражения ), а не реализуют синтаксический анализатор для каждого возможного языка. [10] Это может привести к тому, что система рендеринга текста будет отображать несколько неточную подсветку синтаксиса и в некоторых случаях работать медленно. Решение, используемое текстовыми редакторами для решения этой проблемы, заключается не всегда в анализе всего файла, а только в видимой области, иногда в обратном сканировании текста до ограниченного количества строк для «синхронизации».
С другой стороны, редактор часто отображает код во время его создания, хотя он является неполным или неверным, а строгие парсеры (например, используемые в компиляторах) большую часть времени не смогут разобрать код.
, ориентированные на конкретный язык Некоторые современные IDE (в отличие от текстовых редакторов), выполняют полный анализ языка, что приводит к очень точному пониманию кода. Расширение подсветки синтаксиса было названо «семантической подсветкой». Дэвидом Нолденом в 2009 году [11] для C++ IDE с открытым исходным кодом KDevelop . Например, семантическая подсветка может придать локальным переменным уникальные цвета, чтобы улучшить понятность кода. В 2014 году идея цветных локальных переменных получила дальнейшее распространение благодаря сообщению в блоге Эвана Брукса: [12] и после этого идея была перенесена в другие популярные IDE, такие как Visual Studio , [13] Xcode , [14] и другие.
Цвет в пользовательском интерфейсе менее полезен, если пользователь имеет некоторую степень дальтонизма .
См. также [ править ]
- Особенности программирования в Сравнении текстовых редакторов
- Стиль отступа
- Вторичные обозначения
- Редактор структуры
- Разбор
- Соляризованный (цветовая гамма)
Ссылки [ править ]
- ^ Джим Д'Анжу; Шерри Шейвор; Скотт Фэйрбразер; Дэн Кен; Джон Келлерман; Пэт Маккарти (2005). Руководство Java-разработчика по Eclipse (2-е изд.). Бостон: Аддисон-Уэсли. ISBN 978-0-321-30502-2 .
- ^ Саркар, Адвайт (2015). «Влияние окраски синтаксиса на понимание программы» . Материалы 26-й ежегодной конференции группы по психологии программирования : 49–58. Архивировано из оригинала 24 сентября 2015 года . Проверено 27 сентября 2023 г.
- ^ Хансен, Уилфред Дж. (1971). «Принципы пользовательской разработки интерактивных систем». Материалы осенней совместной компьютерной конференции FJCC 39 . АФИПС. стр. 5623–532.
- ^ Хансен, Уилфред. «Эмили — редактор структурированного текста» . Проверено 17 июня 2013 г.
- ^ Метод и устройство исправления синтаксических ошибок , 29 октября 1982 г. , получено 12 апреля 2018 г.
- ^ Mattel Intellivision: Руководство пользователя компьютерного модуля Intellivision (1983) (Mattel) (США) . 1983.
- ^ «Классическая система видеоигр Intellivision/компьютерная система развлечений» . www.intellivisionlives.com . Архивировано из оригинала 17 июля 2018 г. Проверено 12 апреля 2018 г.
- ^ Коулишоу, МФ (1987). «LEXX – Программируемый структурированный редактор» (PDF) . Журнал исследований и разработок IBM, том 31, № 1, номер заказа на перепечатку IBM G322-0151 . ИБМ.
- ^ Аллен, Дэн (10 октября 2011 г.). «Трио исторических воспоминаний» . mpw-dev (список рассылки). Архивировано из оригинала 21 августа 2017 г. Проверено 12 сентября 2019 г.
- ^ «Файлы определения языка KEDIT» . Кедит . Mansfield Software Group, Inc. , 2012 г. Проверено 7 апреля 2016 г.
- ^ «Сообщение в блоге 2009 года о семантическом выделении, представленное в KDevelop Дэвидом Нолденом» . 8 января 2009 г.
- ^ «Сообщение в блоге Эвана Брукса о семантическом выделении, 2014 г.» . 17 апреля 2017 г.
- ^ «Статья журнала Visual Studio Magazine о семантическом выделении» .
- ^ «Страница Github плагина, который реализует семантическую подсветку для Xcode» . Гитхаб . 14 сентября 2022 г.