stringtranslate.com

Подсветка синтаксиса

Подсветка синтаксиса HTML

Подсветка синтаксиса — это функция текстовых редакторов , которая используется для языков программирования , сценариев или языков разметки , таких как HTML . Эта функция отображает текст, особенно исходный код , разными цветами и шрифтами в зависимости от категории терминов. [1] Эта функция облегчает запись на структурированном языке, таком как язык программирования или язык разметки, поскольку структуры и синтаксические ошибки визуально различимы. Эта функция также используется во многих контекстах, связанных с программированием (например, в руководствах по программированию), либо в виде красочных книг, либо в виде онлайн-сайтов, чтобы облегчить читателям понимание фрагментов кода. Выделение не влияет на смысл самого текста; он предназначен только для читателей-людей.

Выделение синтаксиса является формой вторичной записи , поскольку выделение не является частью смысла текста, а служит для его закрепления. Некоторые редакторы также интегрируют подсветку синтаксиса с другими функциями, такими как проверка орфографии или свертывание кода , в качестве средств редактирования, которые являются внешними по отношению к языку.

Практическая польза

Выделение эффекта отсутствия разделителя (после watch='false ) в JavaScript

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

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

Поддержка в текстовых редакторах

gedit поддерживает подсветку синтаксиса

Некоторые текстовые редакторы также могут экспортировать цветную разметку в формат, подходящий для печати или для импорта в текстовый редактор и другие виды программного обеспечения для форматирования текста; например, в виде 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] и другие.

Цвет в пользовательском интерфейсе менее полезен, если пользователь имеет некоторую степень дальтонизма .

Смотрите также

Рекомендации

  1. ^ Джим Д'Анжу; Шерри Шейвор; Скотт Фэйрбразер; Дэн Кен; Джон Келлерман; Пэт Маккарти (2005). Руководство Java-разработчика по Eclipse (2-е изд.). Бостон: Аддисон-Уэсли. ISBN 978-0-321-30502-2.
  2. ^ Саркар, Адвайт (2015). «Влияние окраски синтаксиса на понимание программы». Материалы 26-й ежегодной конференции группы по психологии программирования : 49–58. Архивировано из оригинала 24 сентября 2015 года . Проверено 27 сентября 2023 г.
  3. ^ Хансен, Уилфред Дж. (1971). «Принципы пользовательской разработки интерактивных систем». Материалы осенней совместной компьютерной конференции FJCC 39 . АФИПС. стр. 5623–532.
  4. ^ Хансен, Уилфред. «Эмили — редактор структурированного текста» . Проверено 17 июня 2013 г.
  5. ^ Метод и устройство исправления синтаксических ошибок, 29 октября 1982 г. , получено 12 апреля 2018 г.
  6. ^ Mattel Intellivision: Руководство пользователя компьютерного модуля Intellivision (1983) (Mattel) (США). 1983.
  7. ^ «Классическая система видеоигр Intellivision / развлекательная компьютерная система» . www.intellivisionlives.com . Архивировано из оригинала 17 июля 2018 г. Проверено 12 апреля 2018 г.
  8. ^ Коулишоу, МФ (1987). «LEXX – Программируемый структурированный редактор» (PDF) . Журнал исследований и разработок IBM, том 31, № 1, номер заказа на перепечатку IBM G322-0151 . ИБМ.
  9. ^ Аллен, Дэн (10 октября 2011 г.). «Трио исторических воспоминаний». mpw-dev (список рассылки). Архивировано из оригинала 21 августа 2017 г. Проверено 12 сентября 2019 г.
  10. ^ «Файлы определения языка KEDIT» . Кедит . Mansfield Software Group, Inc. , 2012 г. Проверено 7 апреля 2016 г.
  11. ^ «Сообщение в блоге 2009 года о семантическом выделении, представленное Дэвидом Нолденом в KDevelop» . 8 января 2009 г.
  12. ^ «Сообщение в блоге Эвана Брукса о семантическом выделении, 2014 г.» . 17 апреля 2017 г.
  13. ^ «Статья журнала Visual Studio Magazine о семантическом выделении» .
  14. ^ «Страница Github плагина, который реализует семантическую подсветку для Xcode» . Гитхаб . 14 сентября 2022 г.