Podstawy kompilatorów: Różnice pomiędzy wersjami
Linia 7: | Linia 7: | ||
== Sylabus == | == Sylabus == | ||
# Wstęp, organizacja procesu kompilacji | # Wstęp, organizacja procesu kompilacji (zakres przedmiotu, rodzaje translatorów, interpretacja a kompilacja, model kompilatora, podział na fazy) | ||
zakres przedmiotu, rodzaje translatorów, interpretacja a kompilacja, model kompilatora, podział na fazy | # Analiza leksykalna (wprowadzenie do analizy leksykalnej, podstawowe pojęcia, implementacja analizatorów leksykalnych w językach imperatywnych na przykładzie języka C) | ||
# Analiza leksykalna | # Implementacja analizatorów leksykalnych w Lexie (koncepcja i używanie generatora, konwencje notacyjne, wzorce, akcje, retrakcja, konteksty, odrzucenie dopasowania) | ||
wprowadzenie do analizy leksykalnej, podstawowe pojęcia, implementacja analizatorów leksykalnych w językach imperatywnych na przykładzie języka C | # Wstęp do analizy składniowej (podstawowe pojęcia analizy składniowej, klasyfikacja Chomsky'ego a implementacja analizatorów, gramatyki bezkontekstowe) | ||
# Implementacja analizatorów leksykalnych w Lexie | # Analiza metodą zstępującą (koncepcja metody top-down, ograniczenia metody : lewostronna rekurencja, faktoryzacja) | ||
# Implementacja analizatora zstępującego analizatora składniowego w języku imperatywnym (na przykładzie języka C) | |||
koncepcja i używanie generatora, konwencje notacyjne, wzorce, akcje, retrakcja, konteksty, odrzucenie dopasowania | # Analiza metodą wstępującą (koncepcja metody bottom-up, LR-parsery, metody generowania tablic) | ||
# Wstęp do analizy składniowej | |||
podstawowe pojęcia analizy składniowej, klasyfikacja Chomsky'ego a implementacja analizatorów, gramatyki bezkontekstowe | |||
# Analiza metodą zstępującą | |||
koncepcja metody top-down, ograniczenia metody | |||
# Implementacja analizatora zstępującego analizatora składniowego w języku imperatywnym | |||
na przykładzie języka C | |||
# Analiza metodą wstępującą | |||
koncepcja metody bottom-up, LR-parsery, metody generowania tablic | |||
# Podstawy generatora YACC | # Podstawy generatora YACC | ||
# Generator YACC : gramatyki niejednoznaczne, konflikty, rozstrzyganie | # Generator YACC : gramatyki niejednoznaczne, konflikty, rozstrzyganie | ||
# Translacja sterowana składnią w generatorze YACC | # Translacja sterowana składnią w generatorze YACC (atrybuty i implementacja, akcje wielokrotne) | ||
# Zależności kontekstowe (systemy typów, kontrola zgodności typów, konwersje) | |||
atrybuty i implementacja, akcje wielokrotne | # Generacja kodu pośredniego (koncepcja języka pośredniego, typy języków pośrednich, maszyny wirtualne) | ||
# | # Generacja kodu wynikowego (architektury sprzętowe, przydział i wyznaczanie rejestrów, bloki podstawowe, grafy przepływu) | ||
systemy typów, kontrola zgodności typów, konwersje | # Optymalizacja (cele optymalizacja, optymalizacja zależna i niezależna od maszyny docelowej, analiza przepływu sterowania, analiza przepływu danych, optymalizacja a uruchamianie oprogramowania, superkompilatory) | ||
# Generacja kodu pośredniego | # Zarządzanie pamięcią (strategie alokacji, alokacja stosowa, sterta, algorytmy przydziału ze sterty, arbitralne zarządzanie a usuwanie nieużytków, wykrywanie wiszących referencji, scalanie) | ||
koncepcja języka pośredniego, typy języków pośrednich, maszyny wirtualne | # Dostęp do nazw nielokalnych (widzialność, zasięg, zagnieżdżanie bloków, procedur i funkcji, | ||
# Generacja kodu wynikowego | widzialność statyczna, język C a Pascal i Ada, wiązania dostępu, wektory display, widzialność dynamiczna, płytki i głęboki dostęp) | ||
# Obsługa wyjątków, kod wielowątkowy, przekazywanie parametrów (zarządzanie stosem, alokacja ze sterty, tryby i metody przekazywania parametrów) | |||
architektury sprzętowe, przydział i wyznaczanie rejestrów, bloki podstawowe, grafy przepływu | # Systemy rozproszone, zdalne wywoływanie (translatory dla systemów rozproszonych, konwersje reprezentacji) | ||
# Optymalizacja | |||
cele optymalizacja, optymalizacja zależna i niezależna od maszyny docelowej, analiza przepływu sterowania, analiza przepływu danych, optymalizacja a uruchamianie oprogramowania, superkompilatory | |||
# Zarządzanie pamięcią | |||
strategie alokacji, alokacja stosowa, sterta, algorytmy przydziału ze sterty, arbitralne zarządzanie a usuwanie nieużytków, wykrywanie wiszących referencji, scalanie | |||
# Dostęp do nazw nielokalnych | |||
widzialność, zasięg, zagnieżdżanie bloków, procedur i funkcji, | |||
widzialność statyczna | |||
widzialność dynamiczna, płytki i głęboki dostęp | |||
# Obsługa wyjątków, kod wielowątkowy, przekazywanie parametrów | |||
zarządzanie stosem, alokacja ze sterty, tryby i metody przekazywania parametrów | |||
# Systemy rozproszone, zdalne wywoływanie | |||
translatory dla systemów rozproszonych, konwersje reprezentacji | |||
=== Autorzy === | === Autorzy === |
Wersja z 18:12, 11 cze 2006
Opis
Celem przedmiotu jest przedstawienie zasad i technik budowy kompilatorów. W ramach przedmiotu przedstawione zostaną zasady ich implementacji zarówno z wykorzystaniem specjalizowanych narzędzi takich jak LEX i YACC jak i z wykorzystaniem uniwersalnych języków programowania wysokiego poziomu, takich jak język C. Omówione zostaną poszczególne fazy kompilacji poczynając od analizy leksykalnej, poprzez analizę składniową, semantyczną, generację kodu pośredniego i wynikowego po optymalizację kodu. Przedstawione zostaną także zagadnienia dotyczące budowy środowiska wykonawczego.
Oprócz wykładów będą prowadzone ćwiczenia laboratoryjne, w trakcie których rozwiązywane będą zadania ilustrujące zagadnienia omawiane na wykładach.
Sylabus
- Wstęp, organizacja procesu kompilacji (zakres przedmiotu, rodzaje translatorów, interpretacja a kompilacja, model kompilatora, podział na fazy)
- Analiza leksykalna (wprowadzenie do analizy leksykalnej, podstawowe pojęcia, implementacja analizatorów leksykalnych w językach imperatywnych na przykładzie języka C)
- Implementacja analizatorów leksykalnych w Lexie (koncepcja i używanie generatora, konwencje notacyjne, wzorce, akcje, retrakcja, konteksty, odrzucenie dopasowania)
- Wstęp do analizy składniowej (podstawowe pojęcia analizy składniowej, klasyfikacja Chomsky'ego a implementacja analizatorów, gramatyki bezkontekstowe)
- Analiza metodą zstępującą (koncepcja metody top-down, ograniczenia metody : lewostronna rekurencja, faktoryzacja)
- Implementacja analizatora zstępującego analizatora składniowego w języku imperatywnym (na przykładzie języka C)
- Analiza metodą wstępującą (koncepcja metody bottom-up, LR-parsery, metody generowania tablic)
- Podstawy generatora YACC
- Generator YACC : gramatyki niejednoznaczne, konflikty, rozstrzyganie
- Translacja sterowana składnią w generatorze YACC (atrybuty i implementacja, akcje wielokrotne)
- Zależności kontekstowe (systemy typów, kontrola zgodności typów, konwersje)
- Generacja kodu pośredniego (koncepcja języka pośredniego, typy języków pośrednich, maszyny wirtualne)
- Generacja kodu wynikowego (architektury sprzętowe, przydział i wyznaczanie rejestrów, bloki podstawowe, grafy przepływu)
- Optymalizacja (cele optymalizacja, optymalizacja zależna i niezależna od maszyny docelowej, analiza przepływu sterowania, analiza przepływu danych, optymalizacja a uruchamianie oprogramowania, superkompilatory)
- Zarządzanie pamięcią (strategie alokacji, alokacja stosowa, sterta, algorytmy przydziału ze sterty, arbitralne zarządzanie a usuwanie nieużytków, wykrywanie wiszących referencji, scalanie)
- Dostęp do nazw nielokalnych (widzialność, zasięg, zagnieżdżanie bloków, procedur i funkcji,
widzialność statyczna, język C a Pascal i Ada, wiązania dostępu, wektory display, widzialność dynamiczna, płytki i głęboki dostęp)
- Obsługa wyjątków, kod wielowątkowy, przekazywanie parametrów (zarządzanie stosem, alokacja ze sterty, tryby i metody przekazywania parametrów)
- Systemy rozproszone, zdalne wywoływanie (translatory dla systemów rozproszonych, konwersje reprezentacji)
Autorzy
- Wojciech Complak
Wymagania wstępne
- Umiejętność konstruowania algorytmów iteracyjnych i rekurencyjnych
- Umiejętność programowania w imperatywnych językach wysokiego poziomu
- Podstawowa znajomość architektury procesora i języka asemblera