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?


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.


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.


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.


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ą.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.