Il compilatore è un programma che legge un programma scritto in una lingua (la lingua di origine) e lo traduce in un altro programma equivalente in un'altra lingua (la lingua di destinazione), principalmente in linguaggio macchina.
Esistono diverse fasi del compilatore attraverso cui il codice della lingua sorgente viene scansionato riga per riga. C'è una tabella dei simboli che tiene traccia di tutte le parole chiave che vengono scansionate nel codice della lingua sorgente.
Fase 1: Lexical Analyzer: legge tutto il carattere nel programma sorgente e forma la separazione logica dei token (int, char, float, if-else, for, while, ecc.)
Fase 2: Syntax Analyzer: analizza la struttura del flusso di token. Analisi gerarchica di espressioni che include postfisso / prefisso ecc. (A = b + c * d)
Fase 3: Analizzatore semantico - Verifica del tipo di token (intero su reale, float ecc.) E molte cose come la precedenza dell'operatore ecc.
Fase 4: generatore di codice intermedio - a = b + c * de (temp1 = c * d, temp2 = temp1 + b, temp3 = temp2-e)
Fase 5: Ottimizzazione del codice - Varie analisi (flusso di controllo, flusso di dati, trasformazioni)
che emana: codice di ridondanza, propagazione delle costanti, codice morto parziale, sottoespressione comune, codice invariante di loop
Fase 6: generazione di codice - Generazione di codice target (principalmente linguaggio assembly) che inserisce valori nei registri
Tutte queste fasi non sono altro che programmi ben scritti e potrebbe esserci un numero N di difetti in questo ..