Podstawy kompilatorów: Różnice pomiędzy wersjami
Linia 7: | Linia 7: | ||
== Sylabus == | == Sylabus == | ||
# 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 | 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 #1/2 | |||
# Implementacja analizatorów leksykalnych w Lexie #2/2 | |||
koncepcja i używanie generatora, konwencje notacyjne, wzorce, akcje, retrakcja, konteksty, odrzucenie dopasowania, | 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, | 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) | 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 | na przykładzie języka C | ||
# Analiza metodą wstępującą #1/2 | |||
# Analiza metodą wstępującą #2/2 | |||
koncepcja metody bottom-up, LR-parsery, metody generowania tablic | 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 #1/2 | |||
# Translacja sterowana składnią w generatorze YACC #2/2 | |||
atrybuty i implementacja, akcje wielokrotne | atrybuty i implementacja, akcje wielokrotne | ||
# Zaleźności kontekstowe | |||
systemy typów, kontrola zgodności typów, konwersje | 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, | koncepcja języka pośredniego, typy języków pośrednich, maszyny wirtualne, | ||
# Generacja kodu wynikowego #1/2 | |||
# Generacja kodu wynikowego #2/3 | |||
architektury sprzętowe, przydział i wyznaczanie rejestrów, bloki podstawowe, grafy przepływu, | architektury sprzętowe, przydział i wyznaczanie rejestrów, bloki podstawowe, grafy przepływu, | ||
# Optymalizacja #1/2 | |||
# Optymalizacja #2/2 | |||
cele optymalizacja, optymalizacja zależna i niezależna od maszyny docelowej, analiza przepływu sterowania, analiza przepływu danych, optymalizacja a uruchamianie oprogramowania, superkompilatory | 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ą #1/2 | |||
# Zarządzanie pamięcią #2/2 | |||
strategie alokacji, alokacja stosowa, sterta, algorytmy przydziału ze sterty, arbitralne zarządzanie a usuwanie nieużytków, wykrywanie wiszących referencji, scalanie | 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ść, zasięg, zagnieżdżanie bloków, procedur i funkcji, | ||
widzialność statyczna (język C vs Pascal i Ada), wiązania dostępu, wektory display, | widzialność statyczna (język C vs Pascal i Ada), wiązania dostępu, wektory display, | ||
widzialność dynamiczna, płytki i głęboki dostęp | 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 | zarządzanie stosem, alokacja ze sterty, tryby i metody przekazywania parametrów | ||
# Systemy rozproszone, zdalne wywoływanie | |||
translatory dla systemów rozproszonych, konwersje reprezentacji | translatory dla systemów rozproszonych, konwersje reprezentacji | ||
Wersja z 18:09, 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 #1/2
- Implementacja analizatorów leksykalnych w Lexie #2/2
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ą #1/2
- Analiza metodą wstępującą #2/2
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 #1/2
- Translacja sterowana składnią w generatorze YACC #2/2
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 #1/2
- Generacja kodu wynikowego #2/3
architektury sprzętowe, przydział i wyznaczanie rejestrów, bloki podstawowe, grafy przepływu,
- Optymalizacja #1/2
- Optymalizacja #2/2
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ą #1/2
- Zarządzanie pamięcią #2/2
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 vs 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