stringtranslate.com

Строппинг (синтаксис)

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

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

История

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

Синтаксис

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

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

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

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

Примеры различных стилей АЛГОЛА 68

Обратите внимание на ведущую директиву pr (аббревиатура от pragmat ) , которая сама по себе заключена в стиль POINT или кавычки, а также на for comment (от " ") — подробности см . в разделе ALGOL 68: pr & co: Pragmats and Comments .¢

Другие языки

По разным причинам в Фортране 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 использует квадратные скобки.

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

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

Другие цели

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

Отмена компилятором

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

Подобные методы

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

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

Соглашения об именах

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

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

Зарезервированные слова

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

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

Искажение имени

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

Сигилы

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

Параллели в человеческом языке

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

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

Примечания

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

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

  1. ^ Кинг, Питер Р., изд. (18 июня 1974 г.). "(неизвестный)". Материалы международной конференции по внедрению Алгола 68 . Департамент компьютерных наук, Университет Манитобы, Виннипег: Университет Манитобы, факультет компьютерных наук: 148. ISBN 9780919628113. Более серьезные проблемы создает «обрезание» — метод, используемый для различения текста, выделенного жирным шрифтом, от текста, написанного латиницей. Некоторые реализации требуют апострофов вокруг жирного шрифта (отсюда и сокращение имени); другие требуют возврата и подчеркивания; [...] {{cite journal}}: Cite использует общий заголовок ( справка )
  2. ^ Аб ван Вейнгаарден, Адриан ; Майу, Барри Джеймс ; Пек, Джон Эдвард Ланселот ; Костер, Корнелис Герман Антоний ; Синцов, Мишель [на французском языке] ; Линдси, Чарльз Ходжсон ; Меертенс, Ламбер Гийом Луи Теодор ; Фискер, Ричард Г., ред. (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. ОСЛК  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 г.

дальнейшее чтение