2020-10-08
Program czytający kod napisany w języku źródłowym i tłumaczący go na równoważny kod w języku wynikowym.
~w tle: Obsługa błędów oraz Zarządzanie tablicą symboli~
Ciąg znaków składający się na program źródłowy jest przekształcany w ciąg tokenów (symboli leksykalnych).
Grupowanie symboli leksykalnych programu źródłowego w wyrażenia gramatyczne (tworzenia drzewa wyprowadzenia).
Kontrola programu pod względem poprawności semantycznej (np. kontrola typów) i zbierani informacji do generowania kodu.
Zapamiętywanie identyfikatorów używanych w programie źródłowym i zbieranie informacji o różnych atrybutach tych identyfikatorów.
Obsługa błędów taki sposób, aby nie przerywać kompilacji po pierwszym błędzie. Błędy wykrywane są w fazie analizy.
Reprezentacja programu dla pewnej abstrakcyjnej maszyny (łatwa do utworzenia i tłumaczenia na program wynikowy).
Poprawienie kodu pośredniego w taki sposób, aby kod maszynowy działał szybciej.
~ najczęściej w Assemblerze.
Fazy zależne przede wszystkim od języka źródłowego i praktycznie niezależne od języka wynikowego. Zwykle składa się z analizatora leksykalnego, składniowego i semantycznego oraz tablicy symboli, generatora kodu pośredniego i obsługi błędów.
Fazy zależne od maszyny docelowej a niezależne od języka źródłowego. Zwykle składa się z optymalizacji i generowania kodu z tablicą symboli i obsługą błędów.