Il compilatore è un programma che legge un programma scritto in una lingua (la lingua di partenza) e lo traduce in un altro programma equivalente in un'altra lingua (la lingua di destinazione), per lo più linguaggio macchina.
Ci sono diverse fasi del compilatore attraverso le quali il codice della tua lingua sorgente viene scansionato riga per riga. C'è una tabella dei simboli che tiene traccia di tutte le parole chiave che sono state scansionate nel codice della lingua sorgente.
Fase 1: Lexical Analyzer - legge tutto il carattere nel programma sorgente e forma il
separazione logica dei token (int, char, float, if-else, for, while ecc.)
Fase 2: Analizzatore di sintassi: analizza la struttura del flusso di token. Hierarchical
analisi di espressioni che include suffisso / prefisso ecc.
(A = b + c * d)
Fase 3: Semantic Analyzer - Digitare il controllo dei token (da intero a reale, float ecc.) e
molte cose come la precedenza degli operatori ecc.
Fase 4: generatore di codice intermedio -
a = b + c * d-e (temp1 = c * d, temp2 = temp1 + b, temp3 = temp2-e)
Fase 5: Ottimizzazione del codice - Varie analisi (flusso di controllo, flusso di dati, trasformazioni)
che elemina: codice ridondante, propagazione delle costanti, codice morto parziale,
sottoespressione comune, codice invariante di loop
Fase 6: Generazione del codice - Generazione del codice di destinazione (Mostly Assembly Language)
valori nei registri
Tutte queste fasi non sono altro che programmi ben scritti e potrebbe esserci un numero N di difetti in questo ...