Co tak naprawdę ucieka odwrotny ukośnik „\”?

13

Co naprawdę unika odwrotnego ukośnika?

Jest używany jako postać uciekająca. Ale zawsze zastanawiam się, przed czym ucieka lub przed czym ucieka.

Wiem, że „\ n” oznacza nową linię. Ale co się dzieje z ucieczką? Dlaczego to się tak nazywa?

Pan Coder
źródło
15
Ucieka mi przed gniewem, kiedy psuje mi sznurki.
Joel Etherton,

Odpowiedzi:

37

Ukośnik odwrotny jest używany jako znak znacznika, aby poinformować kompilator / tłumacz, że następny znak ma jakieś specjalne znaczenie. To, co oznacza ta następna postać, zależy od implementacji. Na przykład języki w stylu C używają \ n, aby oznaczać znak nowej linii, a \ t, aby oznaczać tabulatorem.

Użycie słowa „ucieczka” naprawdę oznacza tymczasowe wyjście z parsowania tekstu i przejście do innego trybu, w którym kolejny znak jest traktowany inaczej.

Sean
źródło
8
W zależności od znaku odwrotny ukośnik może informować kompilator / tłumacz, że następujący znak nie ma specjalnego znaczenia. Na przykład podczas ucieczki znaków cudzysłowu.
Ryan Kinal
12
Lub uciekając.
Malfist
12

:))

Jest to termin związany z sekwencją Escape i klawiszem Esc (Escape).

Sama postać nie „ucieka” od żadnej innej postaci. Można powiedzieć, że znak następujący po znaku zmiany znaczenia (powiedzmy \ n z twojego przykładu) ucieka losowi, że jest używany jako zwykły n w niektórych aplikacjach i zamiast tego jest używany jako nowy wiersz.

Wieża
źródło
3

Sekwencje specjalne mają wiele wspólnego z koncepcją komunikacji pozapasmowej :

Czasami również używany do opisania tego, co ludzie nazywają znakami shift, na przykład ESC, który prowadzi sekwencje kontrolne dla wielu terminali, lub wskaźników przesunięcia poziomu w starych 5-bitowych kodach Baudot.

Powiedzmy, że przesyłasz plik przez port szeregowy i negocjujesz z komputerem na drugim końcu: „OK, nadchodzi plik”. Ponieważ w ogólnym przypadku wszystkie znaki mogą być poprawnymi znakami pliku (jeśli jest to plik ASCII), masz pewne problemy:

  • Skąd wiesz, gdzie jest koniec strumienia?
  • Niektóre schematy używają ASCII NUL (zero) do zakończenia, jak ciągi znaków w niektórych językach, ale wtedy nie możesz mieć tego znaku w pliku. Jest to niedozwolone w niektórych ustawieniach, takich jak przesyłanie plików. Zero może być prawidłową postacią.
  • Możesz najpierw wysłać oczekiwaną długość pliku, ale co jeśli musisz przerwać?

Różne osoby w całej historii komputerów wprowadziły wiele różnych metod obejścia tego problemu.

W przypadku ciągów literalnych w języku programowania jest to podobny problem. Pierwszy cytat mówi „oto ciąg znaków - zacznij czytać, aż pojawi się kolejny cytat”. Oczywiście wtedy masz problem z wysłaniem znaku cytatu, więc wymyślili sekwencję ucieczki ukośnika. Jeśli widzisz ukośnik, a następnie cytat, to jest to dosłowny cytat, a nie koniec łańcucha. Niestety właśnie połknąłeś pająka, aby zjeść muchę, ponieważ teraz nie możesz wysłać dosłownej kombinacji slash-quote. Więc możesz uciec przed cięciem innym cięciem. Więc slash-slash oznacza slash, slash-quote oznacza cytat. Dzięki temu mogli używać ukośnika w przypadku innych niedrukowalnych lub trudnych do wydrukowania znaków, takich jak znaki powrotu karetki, przesunięcia wiersza, tabulatory itp.

Scott Whitlock
źródło
3

Jest to ucieczka od kontekstu analizowania , który wymaga (co za złoczyńca) ninterpretacji jako nzamiast newline.

Najciekawsze rozróżnienie polega na tym, że klawisz ucieczki nie przełącza parsowania kontekstu tak, jak "zrobiłby to znak cytatu (lub wiele innych symboli), wymagając od innego "(lub innego symbolu) powrotu do poprzedniego kontekstu. Po prostu odwracają uwagę, ale wracają jak najszybciej.

Jednak nikt już nie mówi o parsowaniu kontekstów , tak jak nikt nie wydaje się pisać parserów, odkąd pojawił się xml i json. Niektóre problemy przestają być głównym nurtem, przechodzą w niszę, a dziwne niszowe koncepcje pozostają.

ZJR
źródło