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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top