WikiDer > Диграфы и триграфы
эта статья нужны дополнительные цитаты для проверка. (Сентябрь 2008 г.) (Узнайте, как и когда удалить этот шаблон сообщения) |
В компьютерное программирование, диграфы и триграфы представляют собой последовательности из двух и трех символысоответственно, которые появляются в исходный код и, согласно язык программированияспецификацию, следует рассматривать как одиночные символы.
Существуют разные причины для использования орграфов и триграфов: на клавиатуре могут не быть ключей, чтобы покрыть все набор символов языка ввод специальных символов может быть затруднен, текстовые редакторы может зарезервировать некоторые символы для специального использования и так далее. Триграфы могут также использоваться для некоторых EBCDIC кодовые страницы в которых отсутствуют такие персонажи, как {
и }
.
История
Базовый набор символов Язык программирования C является подмножеством ASCII набор символов, который включает девять символов, лежащих за пределами ISO 646 инвариантный набор символов. Это может создать проблемы для записи исходный код когда кодирование (и, возможно, клавиатура) не поддерживает ни один из этих девяти символов. В ANSI C комитет изобрел триграфы как способ ввода исходного кода с помощью клавиатуры, поддерживающей любую версию набора символов ISO 646.
Реализации
Триграфы не часто встречаются снаружи компилятор наборы тестов.[1] Некоторые компиляторы поддерживают возможность отключения распознавания триграфов или отключения триграфов по умолчанию и требуют включения их. Некоторые могут выдавать предупреждения при обнаружении триграфов в исходных файлах. Borland поставляется отдельная программа препроцессор триграфа (TRIGRAPH.EXE
), который будет использоваться только тогда, когда требуется обработка триграфа (цель заключалась в максимальном увеличении скорости компиляции).
Языковая поддержка
В разных системах определены разные наборы орграфов и триграфов, как описано ниже.
АЛГОЛ
Ранние версии АЛГОЛ предшествовали стандартизированным наборам символов ASCII и EBCDIC и обычно реализовывались с использованием специфических для производителя шестибитный код символа. Отсутствовал ряд операций АЛГОЛА. кодовые точки в доступном наборе символов или не поддерживались периферийными устройствами, что привело к ряду замен, включая :=
за ←
(назначение) и >=
за ≥
(больше или равно).
Паскаль
В Паскаль язык программирования поддерживает орграфы (.
, .)
, (*
и *)
за [
, ]
, {
и }
соответственно. В отличие от всех других случаев, упомянутых здесь, (*
и *)
были и остаются в употреблении. Однако многие компиляторы рассматривают их как другой тип блока комментариев, а не как фактические орграфы, то есть комментарий, начинающийся с (*
не может быть закрыто с }
и наоборот.
J
В Язык программирования J является потомком APL но использует набор символов ASCII, а не Символы APL. Поскольку печатаемый диапазон ASCII меньше, чем специальный набор символов APL, .
(точка) и :
(двоеточие) символы используются для преобразования символов ASCII, эффективно интерпретируя униграфы, орграфы или, в редких случаях, триграфы как отдельные «символы».[2]
В отличие от использования орграфов и триграфов в C и C ++, односимвольных эквивалентов им в J.
C
В Препроцессор C заменяет все вхождения следующих девяти последовательностей триграфов их односимвольными эквивалентами перед любой другой обработкой.[3][4]
Триграф | Эквивалент |
---|---|
??= | # |
??/ | \ |
??' | ^ |
??( | [ |
??) | ] |
??! | | |
??< | { |
??> | } |
??- | ~ |
Программист может захотеть поставить два вопросительных знака вместе, но не заставить компилятор рассматривать их как вводящие триграфик. Грамматика C не допускает двух последовательных ?
токены, поэтому единственные места в файле C, где могут использоваться два вопросительных знака подряд, - это многосимвольные константы, строковые литералы, и комментарии. Это особенно проблема для классическая Mac OS, где постоянная '????'
может использоваться как тип файла или создатель. Чтобы безопасно разместить два последовательных вопросительных знака в строковом литерале, программист может использовать конкатенацию строк. "...?""?..."
или escape-последовательность "...?\?..."
.
???
сам по себе не является триграфической последовательностью, но когда за ним следует такой символ, как -
это будет интерпретироваться как ?
+ ??-
, как в примере ниже, в котором 16 ?
с до /
.
В ??/
триграф может использоваться для введения экранированного символа новой строки для сращивания строк; это необходимо учитывать для правильной и эффективной обработки триграфов в препроцессоре. Это также может вызвать сюрпризы, особенно в комментариях. Например:
// Будет ли выполнена следующая строка ???????????????? / a ++;
которая представляет собой одну строку логического комментария (используется в C ++ и C99), и
/??/ * Комментарий *??/ /
который представляет собой правильно сформированный комментарий блока. Эту концепцию можно использовать для проверки триграфов, как в следующем примере C99, где будет выполняться только один оператор возврата.
int trigraphsavailable () // возвращает 0 или 1; стандарт языка C99 или новее {// доступны ли триграфы ?? / return 0; return 1;}
Диграф | Эквивалент |
---|---|
<: | [ |
:> | ] |
<% | { |
%> | } |
%: | # |
%:%: | ## |
В 1994 году была внесена нормативная поправка к стандарту C,[указывать] Включенный в C99, предоставляет орграфы в качестве более удобочитаемой альтернативы пяти триграфам. Они перечислены в таблице справа.
В отличие от триграфов, орграфы обрабатываются во время токенизация, и любой орграф должен всегда представлять собой полный токен или составлять токен %:%:
замена токена конкатенации препроцессора ##
. Если последовательность орграфа встречается внутри другого токена, например строки в кавычках или символьной константы, она не будет заменена.
C ++
Токен | Эквивалент |
---|---|
компл | ~ |
нет | ! |
битанд | & |
кусачий | | |
и | && |
или | || |
xor | ^ |
and_eq | &= |
or_eq | |= |
xor_eq | ^= |
not_eq | != |
C ++ (через C ++ 14, увидеть ниже) ведет себя как C, включая дополнения C99, но с дополнительными токенами, перечисленными в таблице.[5]
В качестве примечания, %:%:
рассматривается как один токен, а не как два вхождения %:
.
В стандарте C ++ есть такой комментарий относительно термина «орграф»:[6]
Термин «орграф» (токен, состоящий из двух символов) не совсем описательный, поскольку один из альтернативных токенов предварительной обработки -
%:%:
и, конечно, несколько основных токенов содержат два символа. Тем не менее, те альтернативные токены, которые не являются лексическими ключевыми словами, в просторечии известны как «диграфы».
Триграфы были предложены для прекращения поддержки в C ++ 0x, который был выпущен как C ++ 11.[7] Против этого выступили IBM, выступая от своего имени и от имени других пользователей C ++,[8] и в результате триграфы были сохранены в C ++ 11. Затем триграфы были снова предложены для удаления (не только для устаревания) в C ++ 17.[9] Это прошло голосование комитета, и триграфы (но не дополнительные токены) были удалены из C ++ 17, несмотря на возражение со стороны IBM.[10] Существующий код, использующий триграфы, может поддерживаться переводом из исходных файлов (синтаксический анализ триграфов) в базовый исходный набор символов, который не включает триграфы.[9]
РПЛ
Hewlett Packard калькуляторы, поддерживающие РПЛ язык и метод ввода обеспечивают поддержку большого количества триграфов (также называемых Коды TIO) для надежной транскрипции не семибитных символов ASCII расширенный набор символов калькуляторов[11][12][13] на зарубежных платформах, а также для облегчения ввода с клавиатуры без использования СИМВОЛЫ применение.[14][15][12][13] Первый символ всех кодов TIO - это \
, за которыми следуют два других символа ASCII, отдаленно напоминающих заменяемый глиф.[14][15][12][13][16] Все остальные символы можно вводить с помощью специального nnn
Синтаксис кода TIO с трехзначным nnn. десятичное число (с участием ведущие нули при необходимости) соответствующего кодовая точка (тем самым формально представляя тетраграф).[14][12][13]
Поддержка приложения
Vim
В Vim текстовый редактор поддерживает диграфы для фактического ввода текстовых символов, следующих RFC 1345. Запись орграфов связанный к Ctrl+K по умолчанию.[17] Список всех возможных орграфов в Vim можно отобразить, набрав :копать землю.
Экран GNU
Экран GNU имеет команду орграфа, привязанную к Ctrl+А Ctrl+V по умолчанию.[18]
Лотос
Лотос 1-2-3 за ДОС использует Alt+F1 так как составить ключ чтобы упростить ввод многих специальных символов Набор символов Lotus International (LICS)[19] и Набор многобайтовых символов Lotus (LMBCS).
Смотрите также
- Составить ключ
- Ссылка на сущность символа
- Последовательность выхода
- Escape-последовательности в C
- Альтернативные токены C
Рекомендации
- ^ Джонс, Дерек М. «Приговор 117». Новый стандарт C: экономический и культурный комментарий.
- ^ Хуэй, Роджер. "Словарный запас". jsoftware.com. Архивировано из оригинал на 2019-04-02. Получено 2015-04-16.
- ^ Британский институт стандартов (2003). Стандарт C - включая TC1 - BS ISO / IEC 9899: 1999. Джон Уайли и сыновья. ISBN 0-470-84573-2.
- ^ «Обоснование международного стандарта - языки программирования - C» (PDF). 5.10. Апрель 2003 г. В архиве (PDF) из оригинала от 06.06.2016. Получено 2010-10-17.
- ^ Страуструп, Бьярне (1994-03-29). Дизайн и развитие C ++ (1-е изд.). Издательство Эддисон-Уэсли. ISBN 0-201-54330-3.
- ^ Du Toit, Stefanus, ed. (2012-01-16). «Рабочий проект стандарта языка программирования C ++» (PDF). N3337. В архиве (PDF) из оригинала на 2019-05-08. Получено 2019-05-08.
- ^ "C ++ 0X, CD 1, Комментарии национального органа" (PDF). 2009-01-30. SC22 / WG21 N2837 комментарий UK 11. В архиве (PDF) из оригинала на 2017-08-01. Получено 2019-05-12.
- ^ Вонг, Майкл; Тонг, Хуберт; Кларер, Роберт; Макинтош, Ян; Мак, Раймонд; Кембли, Кристофер; Лабонте, Ален (19.06.2009). "Комментарий к предлагаемому прекращению поддержки триграфа" (PDF). N2910. В архиве (PDF) из оригинала на 2017-08-01. Получено 2019-05-12.
- ^ а б Смит, Ричард (2014-05-06). "Удаление триграфов ??!". N3981. В архиве из оригинала 2018-07-09. Получено 2019-05-12.
- ^ Вонг, Майкл; Тонг, Хуберт; Бхакта, Раджан; Инглис, Дерек (10.10.2014). "Комментарий IBM о подготовке к будущему, неблагоприятному для Триграфа в C ++ 17" (PDF). Бумага IBM N4210. В архиве (PDF) из оригинала на 2018-09-11. Получено 2019-05-12.
- ^ Инфракрасный принтер HP 82240B (1-е изд.). Корваллис, штат Орегон, США: Hewlett Packard. Август 1989 г. Номер повторного заказа HP 82240-90014. Архивировано из оригинал на 2016-08-14. Получено 2016-08-01.
- ^ а б c d HP серии 48G - Руководство пользователя (UG) (8-е изд.). Hewlett Packard. Декабрь 1994 [1993]. С. 2–5, 27–16. HP 00048-90126, (00048-90104). В архиве из оригинала на 2016-08-06. Получено 2015-09-06. [1]
- ^ а б c d Справочное руководство для продвинутых пользователей графического калькулятора HP 50g / 49g + / 48gII (AUR) (2-е изд.). Hewlett Packard. 2009-07-14 [2005]. стр. J-1, J-2. HP F2228-90010. В архиве из оригинала на 2018-07-08. Получено 2015-10-10. PDF с возможностью поиска
- ^ а б c «Таблица HP RPL TIO». Holyjoe.org. В архиве из оригинала от 23.05.2016. Получено 2015-01-23.
- ^ а б Хайнц-старший, Майкл В. (2005). «HP-ASCII и триграфы». В архиве из оригинала от 02.08.2016. Получено 2016-08-02.
- ^ Финсет, Крейг А. (25 февраля 2012 г.). "символы". В архиве из оригинала от 21.12.2017. Получено 2017-12-21.
- ^ "Документация Vim: * digraphs-default *". 2011-01-15. В архиве с оригинала на 20.12.2018. Получено 2019-05-12.
- ^ «Диграф - Руководство пользователя экрана». В архиве из оригинала 31.12.2018. Получено 2019-05-12.
- ^ «Приложение F». Руководство пользователя HP 95LX (PDF) (2-е изд.). Корваллис, штат Орегон, США: Компания Hewlett-Packard, Подразделение Корваллис. Июнь 1991 г. [март 1991 г.]. F0001-90003. В архиве (PDF) из оригинала от 28.11.2016. Получено 2016-11-27.