Come vengono effettivamente archiviate e recuperate le associazioni di codici ASCII?

1

Leggevo dei compilatori e mi è stato fornito un esempio di creazione di un compilatore di base che riconosce le sequenze di escape senza fare riferimento a ASCII.

Qualcuno ha suggerito che una volta che ho compilato un pezzo di codice con numeri ASCII, posso quindi ricompilare un frammento di codice diverso senza un riferimento effettivo al Numero ASCII, e può invece usare esplicitamente il carattere di escape.

Sono confuso su come puoi ottenere dal numero ASCII, in una vera sequenza di escape, sembra esserci un passaggio mancante da qualche parte nella spiegazione.

    
posta justthom8 15.02.2015 - 21:38
fonte

2 risposte

7

Il puzzle diventa un po 'più semplice una volta che hai compreso una verità fondamentale sull'archiviazione dei dati nei computer. La verità è questa:

I caratteri non esistono.

I computer non possono gestire i personaggi. Driver di stampa, output video, teletype, ecc. Possono generare forme di lettere e quindi fornire l'illusione necessaria che qualcuno stia scrivendo qualcosa per voi da leggere, ma è comunque un'illusione. Fondamentalmente, i computer memorizzano numeri e nient'altro. Per gestire lettere, parole e testi, una comune codifica deve essere concordata da tutti gli utenti, ed è questa codifica dei caratteri che associa, ad esempio, A con 65 .

Ne consegue che la codifica deve essere scelta, implementata e rispettata molto prima di scrivere un compilatore. Ogni programma che deve stampare l'output leggibile dall'utente deve essere in grado di memorizzare un 65 e fare affidamento sulla convenzione che gli O.S. il driver del display mostrerà una "A" al suo posto, ecc. In altre parole, qualunque sistema operativo si scriva su un compilatore già ha una convenzione per associare numeri con caratteri, e il compilatore nuovo-scritto usa semplicemente la stessa convenzione di tutti i programmi esistenti.

Nel caso delle sequenze di escape, è spesso qualcosa come "un \n dovrebbe corrispondere a un carattere di nuova riga, un \r a un carattere di ritorno a capo". Questi due caratteri sono - dalla convenzione già esistente - 10 e 13, quindi è sufficiente inserire semplicemente quelle costanti per fare la cosa giusta. Il compilatore non conosce questi valori più di quanto faccia un editor di testo. Un editor accetta il numero 65 (come inviato dal driver della tastiera quando si preme "A") e lo memorizza su disco, quindi lo recupera dal disco e il driver dello schermo simula una "A" sullo schermo al suo posto. Funziona perché il driver della tastiera e il driver del display sono d'accordo su come interpretare i numeri nel tuo file di testo.

È lo stesso con un compilatore e il runtime della lingua. La programmazione con caratteri funziona perché il compilatore accetta il codice sorgente e il runtime e l'hardware I / O che esegue l'eseguibile concordano su come mappare i caratteri ai numeri e viceversa. Se si porta un compilatore su una piattaforma diversa con una codifica di caratteri diversa (cosa rara oggi ma un'attività comune quando i compilatori sono stati inventati), ciò comporterà sempre almeno alcuni hackery per adattare questa mappatura. (Questa è una delle volte in cui ti rendi conto quanto siamo < felici che tali questioni fondamentali siano state ampiamente standardizzate e la nostra generazione di solito le dimentichi - ma i problemi sono ancora lì, e le scritture del compilatore necessitano per capirle.)

    
risposta data 15.02.2015 - 22:00
fonte
0

Come menzionato sopra, i computer memorizzano solo i numeri. L'associazione di un numero a 8 bit con un carattere stampabile è completamente arbitraria.

ASCII in realtà precede i computer e ha iniziato come standard per le macchine telescrivente / telex. Il suo uso nei computer è diventato comune perché era facile collegare un lettore di nastro di carta teletype a un computer.

L'altra codifica comunemente usata è EBCDIC che ha le sue origini in lettori di schede perforate e stampanti associate, questi erano calcolatori davvero sofisticati e programmi pre-impostati con i computer del modello Von Nueman.

Non usato così tanto in questi giorni, ma in passato era comune il codeset a sei bit di Fielddata usato nelle prime macchine Burroughs / UNIVAC. (Utilizzato per amare questo come l'unico carattere non stampabile è lo SPAZIO: il codice esegue il dump di un file binario direttamente nella stampante e ne dà un senso!).

    
risposta data 16.02.2015 - 04:17
fonte

Leggi altre domande sui tag