In che modo il carattere escape \ "backslash" sfugge davvero?

12

A cosa serve davvero il backslash?

È usato come personaggio in fuga. Ma mi chiedo sempre che cosa stia sfuggendo o da cosa sia sfuggito.

So che \ n "indica una nuova linea. Ma da dove viene la fuga? Perché si chiama così?

    
posta Mr Coder 06.10.2011 - 13:04
fonte

4 risposte

30

Il backslash viene usato come carattere marker per dire al compilatore / interprete che il prossimo personaggio ha un significato speciale. Che cosa significa il prossimo personaggio è fino all'implementazione. Ad esempio, le lingue in stile C usano \ n per significare newline e \ t per significare tab.

L'uso della parola "escape" significa davvero uscire temporaneamente dall'analisi del testo e in un'altra modalità in cui il carattere successivo viene trattato in modo diverso.

    
risposta data 06.10.2011 - 13:23
fonte
12

:))

È un termine correlato a quello di una sequenza di escape e una chiave Esc (escape).

Il personaggio non sta "scappando" da nessun altro personaggio. Si potrebbe dire che il carattere che segue il carattere di escape (ad esempio, \ n dal tuo esempio) fugge il destino di essere usato come un normale n in qualche applicazione, e viene usata come una nuova riga.

    
risposta data 06.10.2011 - 13:23
fonte
2

È una via di fuga dal contesto di analisi , che è esigente (che cattivo) n da interpretare come n anziché come newline .

The most interesting distinction about it is that an escape doesn't switch parsing context the way a quote character " (or many other symbols) would do , requiring another " (or some other symbol) to get back to the former context. They just take a little diversion but get back on the road ASAP.

Sì, nessuno parla più di analizzare i contesti , tanto quanto nessuno sembra scrivere più parser , dal momento che l'avvento xml. Alcuni problemi smettono di essere mainstream, entrare in una nicchia e concetti di nicchia bizzarri come quelli che restano intorno.

    
risposta data 06.10.2011 - 18:42
fonte
2

Le sequenze di escape hanno molto in comune con il concetto di out-of-band comunicazione:

Also sometimes used to describe what communications people call shift characters, such as the ESC that leads control sequences for many terminals, or the level shift indicators in the old 5-bit Baudot codes.

Diciamo che stai facendo un trasferimento di file su una porta seriale e negozi con il computer all'altra estremità: "OK, ecco il file". Poiché nel caso generale tutti i caratteri potrebbero essere caratteri di file validi (se si tratta di un file ASCII) si riscontrano alcuni problemi:

  • Come fai a sapere dove si trova la fine dello stream?
  • Alcuni schemi usano ASCII NUL (zero) per terminare, come le stringhe in alcune lingue, ma non puoi avere quel carattere nel file. Ciò non è consentito in alcune impostazioni, come i trasferimenti di file. Zero potrebbe essere un carattere valido.
  • È possibile inviare prima la lunghezza prevista del file, ma cosa succede se è necessario interrompere?

Diverse persone nel corso della storia dell'informatica hanno implementato molti metodi diversi per ovviare a questo problema.

Nel caso di stringhe letterali in un linguaggio di programmazione, è un problema simile. La prima citazione dice "ecco che arriva la stringa - inizia a leggere finché non ottieni un altro preventivo". Ovviamente, hai il problema di inviare un carattere di citazione, quindi hanno inventato la sequenza di escape della barra. Se vedi una barra e poi una citazione, allora quella è una citazione letterale, non la fine della stringa. Sfortunatamente hai appena ingoiato un ragno per mangiare una mosca, perché ora non puoi inviare la combinazione letterale di virgolette. Quindi, puoi sfuggire a una barra con un'altra barra. Quindi slash-slash significa "slash", "slash-quote" significa "preventivo". Ciò ha permesso loro di utilizzare la barra per altri caratteri non stampabili o difficili da stampare come ritorni a capo, avanzamenti di riga, schede ecc.

    
risposta data 06.10.2011 - 20:39
fonte

Leggi altre domande sui tag