Подсветка синтаксиса — это функция текстовых редакторов , которая используется для программирования , написания сценариев или языков разметки , таких как HTML . Функция отображает текст, особенно исходный код , разными цветами и шрифтами в зависимости от категории терминов. [1] Эта функция облегчает написание на структурированном языке, таком как язык программирования или язык разметки, поскольку и структуры, и синтаксические ошибки визуально различимы. Эта функция также используется во многих контекстах, связанных с программированием (например, руководства по программированию), либо в форме красочных книг, либо на веб-сайтах, чтобы облегчить читателям понимание фрагментов кода. Подсветка не влияет на смысл самого текста; она предназначена только для людей.
Подсветка синтаксиса является формой вторичной нотации , поскольку подсветка не является частью смысла текста, но служит для его усиления. Некоторые редакторы также интегрируют подсветку синтаксиса с другими функциями, такими как проверка орфографии или сворачивание кода , в качестве вспомогательных средств для редактирования, которые являются внешними по отношению к языку.
Подсветка синтаксиса — это одна из стратегий улучшения читаемости и контекста текста, особенно для кода, занимающего несколько страниц. Читатель может легко игнорировать большие разделы комментариев или кода, в зависимости от того, что он ищет. Подсветка синтаксиса также помогает программистам находить ошибки в своей программе. Например, большинство редакторов выделяют строковые литералы другим цветом. Следовательно, обнаружить отсутствующий разделитель намного проще из-за контрастного цвета текста. Сопоставление фигурных скобок — еще одна важная функция многих популярных редакторов. Это позволяет легко увидеть, была ли пропущена фигурная скобка, или найти соответствие фигурной скобке, на которой находится курсор, выделив пару другим цветом.
Исследование, опубликованное на конференции PPIG, оценило влияние подсветки синтаксиса на понимание коротких программ и обнаружило, что наличие подсветки синтаксиса значительно сокращает время, необходимое программисту для усвоения семантики программы. [2] Кроме того, данные, полученные с помощью устройства отслеживания движений глаз во время исследования, показали, что подсветка синтаксиса позволяет программистам уделять меньше внимания стандартным синтаксическим компонентам, таким как ключевые слова.
Некоторые текстовые редакторы также могут экспортировать цветную разметку в формате, который подходит для печати или импорта в текстовые процессоры и другие виды программного обеспечения для форматирования текста; например, как HTML, цветную версию LaTeX, PostScript или RTF для подсветки синтаксиса. Существует несколько библиотек или "движков" подсветки синтаксиса, которые могут использоваться в других приложениях, но сами по себе не являются полноценными программами, например, расширение Generic Syntax Highlighter (GeSHi) для PHP .
Для редакторов, которые поддерживают более одного языка, пользователь обычно может указать язык текста, например C , LaTeX , HTML , или текстовый редактор может автоматически распознать его на основе расширения файла или путем сканирования содержимого файла. Это автоматическое определение языка представляет потенциальные проблемы. Например, пользователь может захотеть редактировать документ, содержащий:
В этих случаях неясно, какой язык использовать, и документ может не быть выделен или выделен неправильно.
Большинство редакторов с подсветкой синтаксиса позволяют назначать различные цвета и стили текста десяткам различных лексических подэлементов синтаксиса. К ним относятся ключевые слова, комментарии, операторы потока управления, переменные и другие элементы. Программисты часто сильно настраивают свои параметры, пытаясь показать как можно больше полезной информации, не делая код сложным для чтения.
Некоторые редакторы также отображают определенные синтаксические элементы более визуально привлекательным образом, например, заменяя оператор указателя, как ->
в исходном коде, на настоящий символ стрелки (→) или изменяя подсказки по оформлению текста, такие как /курсив/, *жирный шрифт* или _подчеркивание_ в комментариях исходного кода, на настоящий курсив , полужирный шрифт или подчеркивание .
Ниже приведено сравнение фрагмента кода на языке C :
Ниже приведен еще один фрагмент кода 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 года, Emily. [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++ с открытым исходным кодом KDevelop . Например, семантическая подсветка может придавать локальным переменным уникальные отдельные цвета для улучшения понятности кода. В 2014 году идея цветных локальных переменных получила дальнейшую популяризацию благодаря сообщению в блоге Эвана Брукса [12], а после этого идея была перенесена в другие популярные среды разработки, такие как Visual Studio [13] , Xcode [14] и другие.
Цвет в пользовательском интерфейсе менее полезен, если у пользователя имеется некоторая степень дальтонизма .