Подсветка синтаксиса — это функция текстовых редакторов , которая используется для языков программирования , сценариев или языков разметки , таких как HTML . Эта функция отображает текст, особенно исходный код , разными цветами и шрифтами в зависимости от категории терминов. [1] Эта функция облегчает запись на структурированном языке, таком как язык программирования или язык разметки, поскольку структуры и синтаксические ошибки визуально различимы. Эта функция также используется во многих контекстах, связанных с программированием (например, в руководствах по программированию), либо в виде красочных книг, либо в виде онлайн-сайтов, чтобы облегчить читателям понимание фрагментов кода. Выделение не влияет на смысл самого текста; он предназначен только для читателей-людей.
Выделение синтаксиса является формой вторичной записи , поскольку выделение не является частью смысла текста, а служит для его закрепления. Некоторые редакторы также интегрируют подсветку синтаксиса с другими функциями, такими как проверка орфографии или свертывание кода , в качестве средств редактирования, которые являются внешними по отношению к языку.
Подсветка синтаксиса — это одна из стратегий улучшения читаемости и контекста текста; особенно для кода, занимающего несколько страниц. Читатель может легко игнорировать большие разделы комментариев или кода, в зависимости от того, что он ищет. Подсветка синтаксиса также помогает программистам находить ошибки в своей программе. Например, большинство редакторов выделяют строковые литералы другим цветом. Следовательно, обнаружить отсутствующий разделитель гораздо проще из-за контрастного цвета текста. Сопоставление скобок — еще одна важная функция многих популярных редакторов. Это позволяет легко увидеть, была ли пропущена фигурная скобка, или найти совпадение с фигурной скобкой, на которой находится курсор, выделив пару другим цветом.
Исследование, опубликованное на конференции PPIG, оценило влияние подсветки синтаксиса на понимание коротких программ и обнаружило, что наличие подсветки синтаксиса значительно сокращает время, необходимое программисту для усвоения семантики программы. [2] Кроме того, данные, собранные с помощью айтрекера в ходе исследования, показали, что подсветка синтаксиса позволяет программистам уделять меньше внимания стандартным синтаксическим компонентам, таким как ключевые слова.
Некоторые текстовые редакторы также могут экспортировать цветную разметку в формат, подходящий для печати или для импорта в текстовый редактор и другие виды программного обеспечения для форматирования текста; например, в виде HTML, цветной версии LaTeX, PostScript или RTF подсветки синтаксиса. Существует несколько библиотек или «движков» подсветки синтаксиса, которые можно использовать в других приложениях, но сами по себе они не являются полноценными программами, например расширение Generic Syntax Highlighter (GeSHi) для PHP .
Для редакторов, поддерживающих более одного языка, пользователь обычно может указать язык текста, например C , LaTeX , HTML , или текстовый редактор может автоматически распознать его на основе расширения файла или путем сканирования содержимого файла. Такое автоматическое определение языка создает потенциальные проблемы. Например, пользователь может захотеть отредактировать документ, содержащий:
В этих случаях непонятно, какой язык использовать, и документ может не подсвечиваться или подсвечиваться неправильно.
Большинство редакторов с подсветкой синтаксиса позволяют присваивать разные цвета и стили текста десяткам различных лексических подэлементов синтаксиса. К ним относятся ключевые слова, комментарии, инструкции потока управления, переменные и другие элементы. Программисты часто сильно настраивают свои настройки, пытаясь показать как можно больше полезной информации, не усложняя чтение кода.
Некоторые редакторы, называемые украшением синтаксиса , также отображают определенные синтаксические элементы более визуально приятными способами, например, заменяя оператор указателя, как ->
в исходном коде, реальным символом стрелки (→) или изменяя подсказки оформления текста , такие как /italics/, *жирный шрифт* или _underline_ в комментариях к исходному коду, выделенные курсивом , жирным шрифтом или подчеркнутым шрифтом.
Ниже приведено сравнение фрагмента кода 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 года. [3] [4] Он предоставлял расширенные, независимые от языка средства завершения кода и, в отличие от современных редакторов с подсветкой синтаксиса, фактически делал невозможным создание синтаксически некорректных программ.
В 1982 году Анита Х. Клок и Ян Б. Чодак подали патент на первую известную систему подсветки синтаксиса, [5] которая использовалась в периферийном устройстве Intellivision Entertainment Computer System (ECS), выпущенном в 1983 году . различные элементы программ на языке 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] и другие.
Цвет в пользовательском интерфейсе менее полезен, если пользователь имеет некоторую степень дальтонизма .