1. DEF: Kompilator
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.
Program zˊroˊdłowy→Komunikaty o błędach↓Kompilator→Program wynikowy
2. Kompilacja typu analiza-synteza
- Analiza — rozłożenie programu na części składowe i stworzenie jego pośredniej reprezentacji.
- Synteza — przekształcenie reprezentacji pośredniej na program wynikowy.
2.1. Narzędzia dokonujące analizy
- edytory strukturalne
- formatory kody programu
- kontrolery statyczne
- interpretery
2.2. Programy przypominające kompilatory
- formatory tekstu
- kompilatory do układów scalonych
3. Kontekst kompilatora
- Szkieletowy program źródłowy
- Preprocesor
- Program źródłowy
- Kompilator
- Program w asemblerze
- Assembler
- Przemieszczalny kod maszynowy
- Konsolidator ← Biblioteki
- Bezwzględny kod maszynowy
4. Fazy kompilatora
- Program źródłowy
- Analizator leksykalny
- Analizator składniowy
- Analizator semantyczny
- Generator kodu pośredniego
- Optymalizacja kodu
- Generator kodu
- Program wynikowy
~w tle: Obsługa błędów oraz Zarządzanie tablicą symboli~
4.1. Analiza leksykalna
Ciąg znaków składający się na program źródłowy jest przekształcany w ciąg tokenów (symboli leksykalnych).
4.2. Analiza Składniowa
Grupowanie symboli leksykalnych programu źródłowego w wyrażenia gramatyczne (tworzenia drzewa wyprowadzenia).
4.3. Analiza semantyczna
Kontrola programu pod względem poprawności semantycznej (np. kontrola typów) i zbierani informacji do generowania kodu.
4.4. Zarządzanie tablicą symboli
Zapamiętywanie identyfikatorów używanych w programie źródłowym i zbieranie informacji o różnych atrybutach tych identyfikatorów.
4.5. Wykrywanie i zgłaszanie błędów
Obsługa błędów taki sposób, aby nie przerywać kompilacji po pierwszym błędzie. Błędy wykrywane są w fazie analizy.
4.6. Generowanie kodu pośredniego
Reprezentacja programu dla pewnej abstrakcyjnej maszyny (łatwa do utworzenia i tłumaczenia na program wynikowy).
4.7. Optymalizacja kodu
Poprawienie kodu pośredniego w taki sposób, aby kod maszynowy działał szybciej.
4.8. Generowanie kodu wynikowego
~ najczęściej w Assemblerze.
5. Grupowanie faz
5.1. Przód kompilatora
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.
5.2. Tył kompilatora
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.