Kompilator to program, który czyta program napisany w jednym języku (języku źródłowym) i tłumaczy go na inny równoważny program w innym języku (języku docelowym), głównie języku maszynowym.
Istnieją różne fazy kompilatora, przez które kod języka źródłowego jest skanowany wiersz po wierszu. Istnieje tablica symboli, która śledzi wszystkie słowa kluczowe skanowane w kodzie języka źródłowego.
Faza 1: Analizator leksykalny - odczytuje wszystkie znaki w programie źródłowym i tworzy logiczną separację tokenów (int, char, float, if-else, for, while itp.)
Faza 2: Analizator składni - przeanalizuj strukturę strumienia tokenów. Hierarchiczna analiza wyrażeń, która zawiera postfiks / prefiks itp. (A = b + c * d)
Faza 3: Analizator semantyczny - Sprawdzanie typu tokenów (od liczb całkowitych do rzeczywistych, liczb zmiennoprzecinkowych itp.) I wiele innych rzeczy, takich jak pierwszeństwo operatorów itp
Faza 4: Generator kodów pośrednich - a = b + c * de (temp1 = c * d, temp2 = temp1 + b, temp3 = temp2-e)
Faza 5: Optymalizacja kodu - różne analizy (przepływ sterowania, przepływ danych, transformacje),
które eliminują: kod nadmiarowy, propagowanie stałych, częściowy martwy kod, wspólne podwyrażenie, niezmienny kod pętli
Faza 6: Generowanie kodu - Generowanie kodu docelowego (głównie języka asemblera) wprowadzającego wartości do rejestrów
Wszystkie te fazy to nic innego, jak dobrze napisane programy, w których może być N wad.