Jump to content

Обвязка (синтаксис)

В компьютерного языка разработке строппинг — это метод явной маркировки последовательностей букв как обладающих особым свойством, например, ключевым словом или определенным типом переменной или местом хранения, и, таким образом, находящимися в пространстве имен, отличном от обычных имен («идентификаторов»). , чтобы избежать столкновений. Строппинг не используется в большинстве современных языков — вместо этого ключевые слова являются зарезервированными и не могут использоваться в качестве идентификаторов. Строппинг позволяет использовать одну и ту же последовательность букв как в качестве ключевого слова, так и в качестве идентификатора , и в этом случае упрощает синтаксический анализ — например, позволяя использовать переменную с именем if без конфликта с ключевым словом if .

Строппинг в первую очередь ассоциируется с АЛГОЛом и родственными языками 1960-х годов. Хотя он находит современное применение , его легко спутать с другими похожими методами , которые внешне похожи.

История [ править ]

Метод строповки и термин «строппинг» возникли при разработке АЛГОЛА в 1960-х годах, где он использовался для обозначения типографских различий (жирный шрифт и подчеркивание), обнаруженных в языке публикации, которые не могли быть непосредственно представлены на аппаратном языке - На пишущей машинке могли быть жирные символы, но при кодировании на перфокартах жирных символов не было. Термин «стропинг» возник в Алголе 60 от слова « апостроф », поскольку в некоторых реализациях Алгола 60 апострофы использовались вокруг текста для обозначения жирного шрифта. [1] такой как 'if' для представления ключевого слова if . Строппинг также важен в АЛГОЛе 68 , где используются несколько методов стропинга, известные как «режимы стропинга»; оригинальные совпадающие апострофы из АЛГОЛа 60 не получили широкого распространения, чаще использовалась начальная точка или прописные буквы, [2] как в .IF или IF и ко всему этому применялся термин «строппинг».

Синтаксис [ править ]

Для обрезки использовался ряд различных синтаксисов:

  • В АЛГОЛе 60 обычно использовалось только соглашение об одинарных кавычках вокруг слова, обычно в виде апострофов, отсюда и название «строппинг» (например, 'BEGIN').
  • АЛГОЛ 68 [3] [2] в некоторых реализациях последовательность букв с префиксом одинарной кавычки ' рассматривается как ключевые слова (например, 'BEGIN) [4]

На самом деле часто в одном языке могло использоваться несколько соглашений о стропинге. Например, в АЛГОЛе 68 выбор соглашения об ограничении может быть определен директивой компилятора ( в терминологии АЛГОЛА « прагматом »), а именно POINT, UPPER, QUOTE или RES:

  • ТОЧКА для 6-битного формата (недостаточно символов для нижнего регистра), как в .FOR – аналогичное соглашение используется в FORTRAN 77, где ключевые слова LOGICAL обрезаются как .EQ. и т. д. (см. ниже)
  • UPPER для 7-битного режима, например FOR – для обычных идентификаторов используется нижний регистр
  • ЦИТАТА как в АЛГОЛе 60, как в 'for'
  • Зарезервированные слова RES, используемые в современных языках – for зарезервировано и недоступно для обычных идентификаторов

Различные режимы правил представляют собой лексическую спецификацию сокращенных символов, хотя в некоторых случаях они имеют простую интерпретацию: в режимах с одним апострофом и точкой первый символ функционирует как escape-символ , тогда как в режиме совмещенных апострофов апострофы функционируют как разделители , как в строковых литералах .

Другие примеры:

  • У Atlas Autocode было три варианта: ключевые слова могли быть underlined используя клавишу Backspace и Overstrike на клавиатуре Flexowriter , их можно ввести с помощью %percent %symbol, или их можно ввести UPPER CASE без символа-разделителя (режим «разделители в верхнем регистре», в этом случае все переменные должны быть в нижнем регистре).
  • В АЛГОЛе 60 на компьютерах Elliott 803 и Elliott 503 использовалось подчеркивание. У флексорайтеров (производящих перфоленту) была неподвижная клавиша (подчеркивание _), так что ввод _b_e_g_i_n вызывал начало , которое было очень читабельным. Вертикальная полоса | также была клавишей, не позволяющей перемещаться, поэтому ввод |= давал хорошее приближение к ≠.
  • Компилятор Kidsgrove для ALGOL 60 на English Electric KDF9, судя по всему, использовал по крайней мере два других соглашения о сокращении в дополнение к кавычкам: восклицательные знаки и символы процента .
  • В программах АЛГОЛ 68RS допускается использование нескольких вариантов корректировки даже в рамках одного языкового процессора.
  • Эдинбургский IMP унаследовал автокод Атласа. %percent %symbol соглашение о префиксах, но не другие параметры ограничения

Примеры различных стилей ALGOL 68 [ править ]

Обратите внимание на ведущую pr (аббревиатура от pragmat ) директиву , которая сама по себе заключена в стиль POINT или кавычку, а также ¢ за комментарий (от " ") - см. в разделе АЛГОЛ 68: pr & co: Прагматы и комментарии подробности .

Алгол68 "строгий"
как обычно публикуется
Обрезание цитат
(например, викитекст )
Для 7-битного персонажа
компилятор кода
Для 6-битного персонажа
компилятор кода
Algol68 с использованием res-обвязки
(зарезервированное слово)
¢ underline or
   bold typeface ¢
 mode xint = int;
 xint sum sq:=0;
 for i while
   sum sq≠70×70
 do
   sum sq+:=i↑2
 od
'pr' quote 'pr'
'mode' 'xint' = 'int';
'xint' sum sq:=0;
'for' i 'while'
  sum sq≠70×70
'do'
  sum sq+:=i↑2
'od'
.PR UPPER .PR
MODE XINT = INT;
XINT sum sq:=0;
FOR i WHILE
  sum sq/=70*70
DO
  sum sq+:=i**2
OD
.PR POINT .PR
.MODE .XINT = .INT;
.XINT SUM SQ:=0;
.FOR I .WHILE
  SUM SQ .NE 70*70
.DO
  SUM SQ .PLUSAB I .UP 2
.OD
.PR RES .PR
mode .xint = int;
.xint sum sq:=0;
for i while
  sum sq≠70×70
do
  sum sq+:=i↑2
od

Другие языки [ править ]

По разным причинам в Фортране 77 есть эти «логические» значения и операторы: .TRUE., .FALSE., .EQ., .NE., .LT., .LE., .GT., .GE., .EQV., .NEQV., .OR., .AND., .NOT.[5]

.AND., .OR. и .XOR. также используются в комбинированных тестах в IF и IFF операторы в пакетных файлах, выполняемые под управлением JP Software процессоров командной строки , таких как 4DOS , [6] 4OS2 и 4NT/Take Command .


Современное использование [ править ]

Для указания идентификаторов [ править ]

Большинство современных компьютерных языков не используют строппинг. Однако некоторые языки поддерживают необязательное ограничение для указания идентификаторов, которые в противном случае могли бы конфликтовать с зарезервированными словами или содержать небуквенно-цифровые символы.

Например, использование многих языков в .NET инфраструктуре общего языка (CLI) Microsoft требует способа использования переменных на другом языке, которые могут быть ключевыми словами на вызывающем языке. Иногда это делается с помощью префиксов, таких как @ в C# или заключив идентификатор в скобки в Visual Basic.NET .

Второй важный пример — многие реализации языка структурированных запросов . В этих языках зарезервированные слова могут использоваться в качестве имен столбцов, таблиц или переменных путем их лексического разграничения. Стандарт определяет заключение зарезервированных слов в двойные кавычки, но на практике точный механизм зависит от реализации; MySQL , например, позволяет использовать зарезервированные слова в других контекстах, заключая их в обратные кавычки, а Microsoft SQL Server использует квадратные скобки.

На нескольких языках, включая Ним , Р , [7] и Скала , [8] зарезервированное слово или небуквенно-цифровое имя можно использовать в качестве идентификатора, заключив его в обратные кавычки .

Есть и другие, более мелкие примеры. Например, Web IDL использует начальное подчеркивание. _ для ограничения идентификаторов, которые в противном случае конфликтуют с зарезервированными словами: значение идентификатора удаляет это ведущее подчеркивание, создавая такое сокращение, а не соглашение об именах. [9]

Другие цели [ править ]

В Haskell окружение имени функции обратными кавычками приводит к ее анализу как инфиксному оператору .

Распаковка компилятором [ править ]

Во внешнем интерфейсе компилятора отмена первоначально происходила на этапе начальной реконструкции строки , что также устраняло пробелы. Затем последовал анализ без сканирования (без токенизации); это было стандартом в 1960-х годах, особенно для АЛГОЛА. В современном использовании разблокировка обычно выполняется как часть лексического анализа . Это станет ясно, если разделить лексер на две фазы: сканер и вычислитель: сканер относит сокращенную последовательность к правильной категории, а затем вычислитель снимает ограничение при вычислении значения. Например, в языке, где начальное подчеркивание используется для ограничения идентификаторов во избежание конфликтов с зарезервированными словами, последовательность _if будет классифицирован как идентификатор (а не как зарезервированное слово if) сканером, а затем оценщик присвоит этому значение if, уступая (Identifier, if) как тип и значение токена.

Подобные методы [ править ]

Существует ряд подобных методов, обычно с добавлением префикса или суффикса к идентификатору для обозначения другого обращения, но семантика различна. Строго говоря, строппинг состоит из разных представлений одного и того же имени (значения) в разных пространствах имен и происходит на этапе токенизации. Например, в АЛГОЛе 60 с согласованной обрезкой апострофов: 'if' обозначается как (Ключевое слово, if), а if токенизируется как (Идентификатор, if) – одно и то же значение в разных классах токенов.

Использование прописных букв для ключевых слов по-прежнему используется в качестве соглашения о написании грамматик для лексического и синтаксического анализа – токенизации зарезервированного слова. if как класс токена IF, а затем представляя предложение if-then-else фразой IF Expression THEN Statement ELSE Statement где термины, записанные заглавными буквами, являются ключевыми словами, а термины, написанные с заглавной буквы, являются нетерминальными символами в производственном правиле ( терминальные символы обозначаются терминами в нижнем регистре, например identifier или integer, для целочисленного литерала ).

Соглашения об именах [ править ]

Проще говоря, можно использовать соглашения об именах , чтобы избежать конфликтов, обычно добавляя префикс или суффикс подчеркивания, как в if_ или _then. Ведущее подчеркивание часто используется для обозначения частных членов в объектно-ориентированном программировании.

Эти имена могут интерпретироваться компилятором и иметь некоторый эффект, хотя обычно это делается на этапе семантического анализа, а не на этапе токенизации. Например, в Python одно ведущее подчеркивание является слабым частным индикатором и влияет на то, какие идентификаторы импортируются при импорте модуля, тогда как двойное ведущее подчеркивание (и не более одного завершающего подчеркивания) в атрибуте класса вызывает искажение имени . [10]

Зарезервированные слова [ править ]

В то время как современные языки обычно используют зарезервированные слова, а не пытаются отличить ключевые слова от идентификаторов, например, делая if зарезервировано - они также часто резервируют синтаксический класс идентификаторов в качестве ключевых слов, создавая представления, которые можно интерпретировать как режим ограничения, но вместо этого имеют семантику зарезервированных слов.

Это особенно заметно в C, где идентификаторы, начинающиеся с подчеркивания, зарезервированы, хотя точные сведения о том, какие идентификаторы зарезервированы и в какой области задействованы, а ведущие двойные подчеркивания зарезервированы для любого использования; [11] аналогично в C++ любой идентификатор, содержащий двойное подчеркивание, зарезервирован для любого использования, а идентификатор, начинающийся с подчеркивания, зарезервирован в глобальном пространстве. [номер 1] Таким образом, можно добавить новое ключевое слово foo используя зарезервированное слово __foo. Хотя на первый взгляд это похоже на строппинг, семантика другая. В качестве зарезервированного слова строка __foo представляет идентификатор __foo в пространстве имен общего идентификатора. При строппинге (путем добавления к ключевым словам префикса __), строка __foo представляет ключевое слово foo в отдельном пространстве имен ключевых слов. Таким образом, используя зарезервированные слова, токены для __foo и foo являются (идентификатор, __foo) и (идентификатор, foo) — разные значения в одной категории — при ограничении токенов для __foo и foo are (ключевое слово, foo) и (идентификатор, foo) – одни и те же значения в разных категориях. Они решают одну и ту же проблему конфликтов пространств имен одинаковым для программиста способом, но различаются с точки зрения формальной грамматики и реализации.

Искажение имени [ править ]

Искажение имен также устраняет конфликты имен путем переименования идентификаторов, но это происходит гораздо позже при компиляции, во время семантического анализа, а не во время токенизации. Это заключается в создании имен, включающих информацию об области действия и типе, в первую очередь для использования компоновщиками, чтобы избежать конфликтов и включить необходимую семантическую информацию в само имя. В этих случаях исходные идентификаторы могут быть идентичными, но контекст различен, как в функциях foo(int x) против foo(char x), в обоих случаях имеющих одинаковый идентификатор foo, но другая подпись. Эти имена могут быть искажены foo_i и foo_c, например, чтобы включить информацию о типе.

Сигилы [ править ]

Синтаксически похожее, но семантически разное явление — это сигилы , которые вместо этого указывают свойства переменных. Они распространены в BASIC , Perl , Ruby и различных других языках для определения характеристик переменных/констант: BASIC и Perl для обозначения типа переменной, Ruby для различения переменных от констант и для указания области действия. Обратите внимание, что это влияет на семантику переменной, а не на синтаксис того, является ли она идентификатором или ключевым словом.

Параллели в человеческом языке [ править ]

Строппинг используется в языках программирования, чтобы облегчить работу компилятора (или, точнее, синтаксического анализатора ), то есть в пределах возможностей относительно небольших и медленных компьютеров, доступных на заре вычислительной техники в 20 веке. Однако подобные методы широко используются и для улучшения понимания прочитанного людьми. Некоторые примеры:

  • Выделяя важные слова жирным шрифтом , [12] например, самое первое упоминание об ограничении в начале этой страницы, поскольку определение ограничения является самой целью страницы.
  • Форматирование новых слов курсивом [13] когда они впервые появляются в тексте. Это обычно используется в научной фантастике и фэнтези при представлении изобретенных растений, продуктов питания и существ; в травелогах и исторических трудах при описании незнакомых иностранных слов; и так далее. Также используется специальный шрифт, возможно, связанный с рассматриваемым языком, например, готический. [14] шрифт для немецких слов.
  • Использование другого языка, обычно латинского или греческого, для обозначения технических терминов. Это похоже на использование зарезервированных слов, но обычно оно сочетается с курсивом для удобства чтения. Например:
  • В письменном японском языке , помимо символов кандзи , есть два отдельных алфавита (точнее, слоговые письма ) хирагана. [17] [18] и Катакана , [19] оба представляют один и тот же набор звуков и используются для различения фонетически написанных японских слов от импортированных иностранных слов соответственно; Катакана также используется для выделения, подобно курсиву в английском языке.

См. также [ править ]

Примечания [ править ]

  1. ^ Существуют и другие ограничения, например идентификатор, начинающийся с подчеркивания, за которым следует заглавная буква.

Ссылки [ править ]

  1. ^ Кинг, Питер Р., изд. (18 июня 1974 г.). "(неизвестный)" . Материалы международной конференции по внедрению Алгола 68 . Факультет компьютерных наук, Университет Манитобы, Виннипег: Университет Манитобы, факультет компьютерных наук: 148. ISBN  9780919628113 . Более серьезные проблемы создает «обрезание» — метод, используемый для различения текста, выделенного жирным шрифтом, от текста, написанного латиницей. Некоторые реализации требуют апострофов вокруг жирного шрифта (отсюда и сокращение имени); другие требуют возврата и подчеркивания; [...] {{cite journal}}: Cite использует общий заголовок ( справка )
  2. ^ Jump up to: а б ван Вейнгаарден, Адриан ; Майу, Барри Джеймс ; Пек, Джон Эдвард Ланселот ; Костер, Корнелис Герман Антоний ; Синцов, Мишель [на французском языке] ; Линдси, Чарльз Ходжсон ; Меертенс, Ламбер Гийом Луи Теодор ; Фискер, Ричард Г., ред. (1976). «Раздел 9.3 Заверения» (PDF) . Пересмотренный отчет об алгоритмическом языке АЛГОЛ 68 . Спрингер Верлаг . стр. 94, 123. ISBN  978-0-387-07592-1 . OCLC   1991170 . Архивировано (PDF) из оригинала 19 апреля 2019 г. Проверено 11 мая 2019 г.
  3. ^ http://www.fh-jena.de/~kleine/history/languages/Algol68-RR-HardwareRepresentation.pdf [ мертвая ссылка ]
  4. ^ Линдси, Чарльз Ходжсон ; ван дер Мейлен, Ситсе Г. (1977). Неофициальное введение в АЛГОЛ 68 . Северная Голландия. стр. 348–349. ISBN  978-0-7204-0726-6 . OCLC   230034877 .
  5. ^ «Логические структуры» .
  6. ^ Братья Хардин; Роусон, Том ; Конн, Рекс К .; Пол, Матиас Р.; Дай, Чарльз Э.; Георгиев, Лучезар И. (27 февраля 2002 г.). Онлайн-справка по 4DOS 8.00 .
  7. ^ Основная команда R, Котировки: Котировки , Фонд R для статистических вычислений.
  8. ^ Одерски, Мартин (24 мая 2011 г.), Спецификация языка Scala, версия 2.9
  9. ^ Web IDL , « 3.1. Имена ». [...] Для всех этих конструкций идентификатор представляет собой значение токена идентификатора с удаленным любым ведущим символом U+005F LOW LINE («_») (подчеркивание). [...] Примечание [...] Ведущий «_» используется для того, чтобы идентификатор не выглядел как зарезервированное слово, чтобы, например, можно было определить интерфейс с именем «интерфейс». Ведущий "_" опускается, чтобы отменить экранирование идентификатора. [...]
  10. ^ PEP 008 : Описательное: стили именования
  11. ^ C99 , 7.1.3 Зарезервированные идентификаторы Стандарт
  12. ^ Твайман, Майкл. «Смелая идея: использование смелых шрифтов в девятнадцатом веке». Журнал Полиграфического исторического общества . 22 (107–143).
  13. ^ Трасс, Линн (2004), Ест, стреляет и уходит: подход нулевой терпимости к пунктуации , Нью-Йорк: Gotham Books, стр. 146, ISBN  978-1-59240-087-4
  14. ^ «Стили почерка» . Ригсаркивет . Датский национальный архив . Проверено 26 марта 2017 г.
  15. ^ «Как писать научные названия организмов» (PDF) , Competition Science Vision , получено 20 июня 2011 г.
  16. ^ Подборка юридических принципов, классифицированных и проиллюстрированных в Google Книгах.
  17. ^ Двойной Дайджирин
    «Хира» означает «обычный» или «легкий» и означает, что это была система письма, широко использовавшаяся в то время. Кандзи — общедоступный иероглиф, используемый для написания писем и важных текстов, тогда как хирагана — личный иероглиф, используемый людьми, мало знающими кандзи.
    Перевод: 平 [часть «хира» в слове «хирагана»] означает «обычный» или «простой», поскольку в то время [когда было дано это имя] это была система письма для повседневного использования. В то время как кандзи было официальной системой, используемой для написания писем и важных текстов, хирагана предназначалась для личного использования людьми, которые имели ограниченные знания кандзи.
  18. ^ «Японская каллиграфия» . Британская энциклопедия . Проверено 22 июня 2017 г.
  19. ^ «Хирагана, Катакана и Кандзи» . Символы японского слова. 08.09.2010 . Проверено 15 октября 2011 г.

Дальнейшее чтение [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 01c1cae8a8b564d20c1a33bb296a776c__1712577060
URL1:https://arc.ask3.ru/arc/aa/01/6c/01c1cae8a8b564d20c1a33bb296a776c.html
Заголовок, (Title) документа по адресу, URL1:
Stropping (syntax) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)