Qual è il personaggio Magic Behind Escape (\)
-
11-07-2019 - |
Domanda
In che modo il compilatore C / C ++ manipola il carattere di escape [" \ "] nel codice sorgente? Come viene scritta la grammatica del compilatore per l'elaborazione di quel personaggio? Cosa fa il compilatore dopo aver incontrato quel personaggio?
Soluzione
La maggior parte dei compilatori sono divisi in parti: il front-end del compilatore è chiamato analizzatore lessicale o uno scanner. Questa parte del compilatore legge i caratteri effettivi e crea token. Ha una macchina a stati che decide, vedendo un carattere di escape, se è autentico (ad esempio quando appare all'interno di una stringa) o modifica il carattere successivo. Il token viene emesso di conseguenza come carattere di escape o qualche altro token (come una scheda o una nuova riga) nella parte successiva del compilatore ( il parser ). La macchina a stati può raggruppare più caratteri in un token.
Altri suggerimenti
Una nota interessante su questo argomento è On Trusting Trust [collegamento PDF] .
L'articolo descrive un modo in cui un compilatore può gestire esattamente questo problema, mostra come il compilatore c-writing-in-c non abbia una traduzione esplicita dei codici in valori ASCII; e come avviare un nuovo codice di escape nel compilatore in modo che sia implicita anche la comprensione del valore ASCII per il nuovo codice.
In genere sfugge al seguente carattere:
- In una stringa letterale o letterale di carattere, significa sfuggire al carattere successivo.
\ a
significa "avviso" (lampeggiamento del terminale, segnale acustico o altro),\ n
significa "avanzamento riga",\ xNUM
indica un numero esadecimale per esempio. - Se appare come l'ultimo carattere visibile prima di una nuova riga, sia all'interno di una stringa o meno (e anche all'interno di un commento a livello di riga!), agisce come una continuazione di riga: il seguente carattere di nuova riga viene ignorato e il carattere la riga successiva viene unita alla riga corrente.
carattere di escape con un carattere seguente (come \ n
) è un singolo carattere per il compilatore C - lo scanner lo presenta al parser come token carattere, quindi non è necessario in regole speciali di sintassi nel parser per carattere di fuga.