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

редактировать

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

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

СОДЕРЖАНИЕ
  • 1 История
  • 2 синтаксиса
  • 3 Примеры различных стилей Алгола 68
  • 4 Другие языки
  • 5 Современное использование
  • 6 Отключение компилятором
  • 7 Подобные техники
    • 7.1 Соглашения об именах
    • 7.2 Зарезервированные слова
    • 7.3 Изменение имени
    • 7.4 Сигилы
  • 8 параллелей в человеческом языке
  • 9 См. Также
  • 10 заметок
  • 11 Источники
  • 12 Дальнейшее чтение
История

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

Синтаксис

Был использован ряд различных синтаксисов для строппинга:

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

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

  • ТОЧКА для 6-битных (недостаточно символов для строчных букв), как в .FOR- аналогичное соглашение используется в ФОРТРАНЕ 77, где ключевые слова ЛОГИЧЕСКИЕ помечаются как .EQ.и т. Д. (См. Ниже)
  • ВЕРХНИЙ для 7-битного, как в FOR- с нижним регистром, используемым для обычных идентификаторов
  • ЦИТАТА как в АЛГОЛЕ 60, как в 'for'
  • Зарезервированные слова RES, используемые в современных языках - forзарезервированы и недоступны для обычных идентификаторов.

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

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

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

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

Algol68 "строгий", как обычно публикуется Расстановка цитат (например, вики-текст ) Для компилятора 7-битного символьного кода Для компилятора 6-битного символьного кода Algol68 с использованием коррекции резкости (зарезервированное слово)
¢ подчеркнуть или жирный шрифт ¢ режим xint = int ; xint sum sq: = 0; для меня пока сумма кв ≠ 70 × 70 делать сумма 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
Другие языки

По разным причинам, Fortran 77 имеет это "логическое" значение и оператор: .TRUE., .FALSE., .EQ., .NE., .LT., .LE., .GT., .GE., .EQV., .NEQV., .OR., .AND.,.NOT.

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

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

В большинстве современных компьютерных языков строчка не используется, за двумя заметными исключениями:

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

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

Строппинг также можно использовать в языке программирования Nim. В Nim зарезервированное слово можно использовать в качестве идентификатора, заключив его в обратные кавычки.

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

Разрыв компилятором
Дополнительная информация: Интерфейс компилятора

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

Подобные техники

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

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

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

Основная статья: Соглашение об именах (программирование)

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

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

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

Основная статья: Зарезервированное слово

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

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

Сигилы

Основная статья: Sigil (компьютерное программирование)

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

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

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

  • Выделение важных слов полужирным шрифтом, таких как самое первое упоминание о штриховке в начале этой страницы, потому что определение штриховки является самой целью страницы.
  • Форматирование новых слов курсивом при их первом вводе в текст. Это обычно используется в научной фантастике и фэнтези, когда знакомят с изобретенными растениями, едой, существами; в путевых заметках и историографии при описании незнакомых иностранных слов; и так далее. Также используется специальный шрифт, возможно связанный с рассматриваемым языком, например, с использованием готического шрифта для немецких слов.
  • Использование другого языка, как правило, латинского или греческого для обозначения технических терминов. Это похоже на использование зарезервированных слов, но обычно сочетается с курсивом для удобства чтения. Например:
    • Типичная биномиальная номенклатура или «латинские названия» растений и животных помогает читателю понять, что Erithacus rubecula - это специальное техническое название европейской малиновки, в отличие от красногрудого европейского дрозда.
    • многие юридические термины, в которых короткая латинская фраза относится к большому объему законов и прецедентов, например habeas corpus, sub judice, in loco parentis.
    • логические и математические термины, такие как QED, априори, наоборот. ..
  • В письменном японском языке, в дополнение к иероглифам кандзи, используются два разных алфавита (точнее, слоговые алфавиты) - хирагана и катакана, представляющие один и тот же набор звуков, - используются для различения фонетически написанных японских слов от импортированных иностранных слов, соответственно; Катакана также используется для выделения ударения, как курсив в английском языке.
Смотрите также
Примечания
использованная литература
дальнейшее чтение
Последняя правка сделана 2024-01-09 02:55:05
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте