От чего же на самом деле спасается экранирующий символ «\»?

13

От чего в действительности уходит обратная косая черта?

Он используется как спасающийся персонаж. Но мне всегда интересно, что сбежало или от чего сбежало.

Я знаю, что "\ n" обозначает новую строку. Но что происходит при побеге? Почему это так называется?

Мистер кодер
источник
15
Это ускользает от моего гнева, когда это портит мои струны.
Джоэл Этертон

Ответы:

37

Обратная косая черта используется как маркерный символ, чтобы сообщить компилятору / интерпретатору, что следующий символ имеет какое-то особое значение. Что означает следующий символ, зависит от реализации. Например, языки стиля C используют \ n для обозначения новой строки и \ t для обозначения табуляции.

Использование слова «escape» действительно означает временное избавление от разбора текста и переход в другой режим, где последующий символ обрабатывается по-разному.

Шон
источник
8
В зависимости от символа, обратная косая черта может сообщать компилятору / интерпретатору, что следующий символ не имеет специального значения. Например, при экранировании кавычек.
Райан Кинал
12
Или уйти от себя.
Малфист
12

:))

Это термин, относящийся к термину escape-последовательности и клавиши Esc (escape).

Сам персонаж не «убегает» от любого другого персонажа. Можно сказать, что символ, следующий за escape-символом (скажем, \ n из вашего примера), избегает участи использования в качестве обычного n в некотором приложении и вместо этого используется в качестве символа новой строки.

ладья
источник
3

Escape-последовательности имеют много общего с концепцией внеполосной связи:

Также иногда используется для описания того, что люди называют символами сдвига, например, ESC, который приводит последовательности управления для многих терминалов, или индикаторы сдвига уровня в старых 5-битных кодах Бодо.

Допустим, вы выполняете передачу файла через последовательный порт и договариваетесь с компьютером на другом конце: «Хорошо, вот идет файл». Поскольку в общем случае все символы могут быть допустимыми символами файла (если это файл ASCII), у вас есть некоторые проблемы:

  • Как вы знаете, где конец потока?
  • Некоторые схемы используют ASCII NUL (ноль) для завершения, как строки в некоторых языках, но тогда вы не можете иметь этот символ в файле. Это недопустимо в некоторых настройках, таких как передача файлов. Ноль может быть действительным персонажем.
  • Вы могли бы сначала отправить ожидаемую длину файла, но что, если вам нужно прервать?

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

В случае буквенных строк в языке программирования это аналогичная проблема. Первая цитата гласит: «Вот строка, начинайте читать, пока не получите другую цитату». Конечно, тогда у вас есть проблема с отправкой символа кавычки, поэтому они придумали escape-последовательность. Если вы видите косую черту, а затем кавычку, то это буквальная кавычка, а не конец строки. К сожалению, вы только что проглотили паука, чтобы съесть муху, потому что теперь вы не можете отправить буквальную комбинацию слеш-кавычка. Таким образом, вы можете избежать косой черты с другой косой чертой. Таким образом, косая черта означает косую черту, косая черта означает цитату. Это позволило им использовать косую черту для других непечатаемых или трудно печатаемых символов, таких как возврат каретки, перевод строки, вкладки и т. Д.

Скотт Уитлок
источник
3

Это выход из контекста синтаксического анализа , требующий (как злодей) nинтерпретировать, а nне как newline.

Самое интересное отличие в этом заключается в том, что escape не переключает контекст синтаксического анализа так, как это делает символ кавычки "(или многие другие символы), требуя другого "(или некоторого другого символа), чтобы вернуться в прежний контекст. Они просто немного отвлекаются, но возвращаются на дорогу как можно скорее.

Тем не менее, никто больше не говорит о синтаксическом анализе контекстов , так же как никто, кажется, больше не пишет парсеры с момента появления xml и json. Некоторые проблемы перестают быть мейнстримом, уходят в нишу, и такие странные нишевые концепции, как эта, остаются вокруг.

Zjr
источник