Kompilacja i analiza
19 pojęć w 8 podgrupach, z prostymi definicjami i źródłami.
Analizy statyczne · 3
- 01analiza przepływu danychStatyczne wyznaczanie faktów o wartościach i zmiennych w punktach programu przez propagację informacji po grafie przepływu sterowania.
- 02blok podstawowyMaksymalny ciąg kolejnych instrukcji, do którego sterowanie wchodzi tylko na początku i opuszcza tylko na końcu, bez rozgałęzień wewnątrz.
- 03graf przepływu sterowaniaCFG (control-flow graph)Graf skierowany, którego węzły to bloki podstawowe, a krawędzie reprezentują możliwe przejścia sterowania między nimi podczas wykonania.
Back end · 3
- 01alokacja rejestrówPrzydzielanie zmiennych programu do skończonej liczby rejestrów procesora, często modelowane jako kolorowanie grafu kolizji.
- 02generacja koduKońcowa faza kompilatora tłumacząca reprezentację pośrednią na kod docelowy maszyny, wybierając instrukcje i przydzielając zasoby.
- 03optymalizacja koduPrzekształcanie programu zachowujące jego semantykę, mające poprawić wydajność (szybkość, rozmiar, zużycie zasobów) wynikowego kodu.
Fazy front endu · 3
- 01analiza leksykalnaskanerPierwsza faza kompilatora dzieląca strumień znaków kodu źródłowego na ciąg tokenów (leksemów) o ustalonych kategoriach.
- 02analiza semantycznaFaza sprawdzająca znaczeniową poprawność programu (zgodność typów, zasięg, deklaracje) na podstawie drzewa składni i tablicy symboli.
- 03analiza składniowaparsingFaza budująca z ciągu tokenów drzewo wyprowadzenia zgodne z gramatyką języka, sprawdzając poprawność strukturalną programu.
Model kompilacji · 3
- 01interpretacjaBezpośrednie wykonywanie instrukcji programu źródłowego na podawanych danych bez wcześniejszej translacji do kodu maszynowego.
- 02kompilacjaTłumaczenie programu z języka źródłowego na równoważny program w języku docelowym (np. kod maszynowy lub kod pośredni) wykonywane przez kompilator przed uruchomieniem.
- 03kompilacja JITJIT (just-in-time)Tłumaczenie kodu pośredniego na kod maszynowy w trakcie wykonania programu, łączące przenośność interpretacji z szybkością kodu natywnego.
Podstawy formalne · 1
- 01gramatyka bezkontekstowaCFGFormalna gramatyka, w której każda produkcja zastępuje pojedynczy symbol nieterminalny ciągiem symboli, używana do opisu składni języków.
Reprezentacje pośrednie · 3
- 01ASTdrzewo składni abstrakcyjnejDrzewiasta reprezentacja struktury składniowej programu pomijająca szczegóły konkretnej składni, z węzłami odpowiadającymi konstrukcjom języka.
- 02kod pośredniIR (intermediate representation)Reprezentacja programu niezależna od maszyny, generowana między front-endem a back-endem w celu uproszczenia translacji i optymalizacji.
- 03kod trójadresowyLiniowa forma kodu pośredniego, w której każda instrukcja ma co najwyżej trzy operandy i odpowiada jednej operacji elementarnej.
Struktury kompilatora · 1
- 01tablica symboliStruktura danych kompilatora przechowująca informacje o identyfikatorach programu (typ, zasięg, lokalizacja) i wspierająca ich wyszukiwanie.
System typow · 2
- 01sprawdzanie typówWeryfikacja, że operacje w programie są stosowane do argumentów zgodnych z regułami systemu typów, zwykle w czasie kompilacji.
- 02unifikacjaWyznaczanie podstawienia zmiennych czyniącego dwa wyrażenia (termy lub typy) syntaktycznie identycznymi, kluczowe dla inferencji typów.
Pozostałe grupy — Języki i teoria typów
- SłownikKonstrukcje jezykowe
- SłownikParadygmaty programowania
- SłownikSemantyka i ewaluacja
- SłownikTeoria typow
- SłownikZarzadzanie pamiecia i wykonanie