Подсветка синтаксиса - это функция текстовых редакторов , которые используются для языков программирования , сценариев или разметки , таких как HTML . Эта функция отображает текст, особенно исходный код , разными цветами и шрифтами в соответствии с категорией терминов. [1] Эта функция упрощает написание на структурированном языке, таком как язык программирования или язык разметки, как структурных, так и синтаксических ошибок.визуально различимы. Эта функция также используется во многих контекстах, связанных с программированием (например, в руководствах по программированию), либо в форме красочных книг или онлайн-сайтов, чтобы облегчить понимание фрагментов кода для читателей. Выделение не влияет на смысл самого текста; он предназначен только для читателей.
Выделение синтаксиса - это форма вторичной нотации , поскольку выделение не является частью значения текста, а служит его усилению. Некоторые редакторы также интегрируют выделение синтаксиса с другими функциями, такими как проверка орфографии или сворачивание кода , в качестве вспомогательных средств редактирования, внешних по отношению к языку.
Практическая польза
Подсветка синтаксиса - одна из стратегий улучшения читабельности и контекста текста; особенно для кода, который занимает несколько страниц. Читатель может легко игнорировать большие разделы комментариев или кода, в зависимости от того, что они ищут. Подсветка синтаксиса также помогает программистам находить ошибки в своей программе. Например, большинство редакторов выделяют строковые литералы другим цветом. Следовательно, обнаружить отсутствующий разделитель намного проще из-за контрастного цвета текста. Сопоставление скобок - еще одна важная функция многих популярных редакторов. Это позволяет легко увидеть, не пропущена ли скобка, или найти совпадение скобки, на которой находится курсор, выделив пару другим цветом.
В исследовании, опубликованном на конференции PPIG, оценивалось влияние подсветки синтаксиса на понимание коротких программ, и было обнаружено, что наличие подсветки синтаксиса значительно сокращает время, необходимое программисту для усвоения семантики программы. [2] Кроме того, данные, собранные с помощью айтрекера во время исследования, показали, что подсветка синтаксиса позволяет программистам уделять меньше внимания стандартным синтаксическим компонентам, таким как ключевые слова.
Поддержка в текстовых редакторах
Некоторые текстовые редакторы также могут экспортировать цветную разметку в формате, подходящем для печати или для импорта в текстовый редактор и другие виды программного обеспечения для форматирования текста; например, как HTML, раскрашенная версия LaTeX, PostScript или RTF подсветки синтаксиса. Существует несколько библиотек или «движков» подсветки синтаксиса, которые могут использоваться в других приложениях, но сами по себе не являются законченными программами, например, расширение Generic Syntax Highlighter ( GeSHi ) для PHP .
Для редакторов, которые поддерживают более одного языка, пользователь обычно может указать язык текста, такой как C , LaTeX , HTML , или текстовый редактор может автоматически распознать его на основе расширения файла или путем сканирования содержимого файла. Это автоматическое определение языка представляет потенциальные проблемы. Например, пользователь может захотеть отредактировать документ, содержащий:
- более одного языка (например, при редактировании файла HTML , содержащего встроенный код JavaScript ),
- язык, который не распознается (например, при редактировании исходного кода малоизвестного или относительно нового языка программирования),
- язык, который отличается от типа файла (например, при редактировании исходного кода в файле без расширений в редакторе, который использует расширения файлов для определения языка).
В этих случаях неясно, какой язык использовать, и документ может не выделяться или выделяться неправильно.
Элементы синтаксиса
Большинство редакторов с подсветкой синтаксиса позволяют назначать разные цвета и стили текста десяткам различных лексических подэлементов синтаксиса. К ним относятся ключевые слова, комментарии, операторы потока управления, переменные и другие элементы. Программисты часто сильно настраивают свои параметры, пытаясь показать как можно больше полезной информации, не затрудняя чтение кода.
Некоторые редакторы, называемые синтаксическим оформлением , также отображают определенные синтаксические элементы более визуально приятным образом, например, путем замены оператора указателя, как ->
в исходном коде, фактическим символом стрелки (→) или изменения подсказок оформления текста, таких как / курсив /, * жирный шрифт *, или _подчеркнутый_ в комментариях к исходному коду фактическим курсивом , жирным шрифтом или подчеркнутой презентацией.
Примеры
Ниже приводится сравнение с фрагментом из C кода:
Стандартный рендеринг | Подсветка синтаксиса |
---|---|
/* Привет мир */#include | / * Привет, мир * / #include |
Ниже приведен еще один фрагмент выделенного синтаксиса кода 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) признал синтаксис Паскаля , как он был напечатан и используемый шрифт изменения (например, жирный шрифт для ключевых слов) для выделения синтаксиса на монохромном компактном 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 . Проверено 5 сентября 2015 года .
- ^ Хансен, Уилфред Дж. (1971). «Принципы пользовательской инженерии интерактивных систем». Труды осенней совместной компьютерной конференции FJCC 39 . AFIPS. С. 5623–532.
- ^ Хансен, Уилфред. «Эмили - редактор структурированного текста» . Проверено 17 июня 2013 года .
- ^ Метод и устройство исправления синтаксических ошибок , 1982-10-29 , получено 2018-04-12
- ^ Mattel Intellivision: Руководство пользователя компьютерного модуля Intellivision (1983) (Mattel) (США) . 1983 г.
- ^ "Классическая игровая система / развлекательная компьютерная система Intellivision" . www.intellivisionlives.com . Проверено 12 апреля 2018 .
- ^ Cowlishaw, MF (1987). «LEXX - Программируемый структурированный редактор» (PDF) . Журнал исследований и разработок IBM, Том 31, № 1, номер заказа на переиздание IBM G322-0151 . IBM.
- ^ Аллен, Дэн (10.10.2011). «Трио исторических воспоминаний» . mpw-dev (список рассылки). Архивировано из оригинала на 2017-08-21 . Проверено 12 сентября 2019 .
- ^ «Файлы определения языка KEDIT» . Кедит . Mansfield Software Group, Inc. 2012 . Проверено 7 апреля 2016 .
- ^ «Сообщение в блоге 2009 года о семантическом выделении, представленное в KDevelop Дэвидом Нолденом» .
- ^ «Сообщение в блоге Эвана Брукса о семантическом выделении, 2014 г.» .
- ^ «Статья журнала Visual Studio Magazine о семантическом выделении» .
- ^ «Страница Github плагина, который реализует семантическую подсветку для Xcode» .