Podstawy kompilatorów: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Complak (dyskusja | edycje)
Complak (dyskusja | edycje)
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 #1/2
# Analiza metodą zstępującą (koncepcja metody top-down, ograniczenia metody : lewostronna rekurencja, faktoryzacja)
# Implementacja analizatorów leksykalnych w Lexie #2/2
# 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 (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
# Podstawy generatora YACC
# Generator YACC : gramatyki niejednoznaczne, konflikty, rozstrzyganie
# Generator YACC : gramatyki niejednoznaczne, konflikty, rozstrzyganie
# Translacja sterowana składnią w generatorze YACC #1/2
# Translacja sterowana składnią w generatorze YACC (atrybuty i implementacja, akcje wielokrotne)
# Translacja sterowana składnią w generatorze YACC #2/2
# 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)
# Zaleźności kontekstowe
# 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 #1/2
widzialność statyczna, język C a Pascal i Ada, wiązania dostępu, wektory display, widzialność dynamiczna, płytki i głęboki dostęp)
# Generacja kodu wynikowego #2/3
# 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 #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 ===
=== 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

  1. Wstęp, organizacja procesu kompilacji (zakres przedmiotu, rodzaje translatorów, interpretacja a kompilacja, model kompilatora, podział na fazy)
  2. Analiza leksykalna (wprowadzenie do analizy leksykalnej, podstawowe pojęcia, implementacja analizatorów leksykalnych w językach imperatywnych na przykładzie języka C)
  3. Implementacja analizatorów leksykalnych w Lexie (koncepcja i używanie generatora, konwencje notacyjne, wzorce, akcje, retrakcja, konteksty, odrzucenie dopasowania)
  4. Wstęp do analizy składniowej (podstawowe pojęcia analizy składniowej, klasyfikacja Chomsky'ego a implementacja analizatorów, gramatyki bezkontekstowe)
  5. Analiza metodą zstępującą (koncepcja metody top-down, ograniczenia metody : lewostronna rekurencja, faktoryzacja)
  6. Implementacja analizatora zstępującego analizatora składniowego w języku imperatywnym (na przykładzie języka C)
  7. Analiza metodą wstępującą (koncepcja metody bottom-up, LR-parsery, metody generowania tablic)
  8. Podstawy generatora YACC
  9. Generator YACC : gramatyki niejednoznaczne, konflikty, rozstrzyganie
  10. Translacja sterowana składnią w generatorze YACC (atrybuty i implementacja, akcje wielokrotne)
  11. Zależności kontekstowe (systemy typów, kontrola zgodności typów, konwersje)
  12. Generacja kodu pośredniego (koncepcja języka pośredniego, typy języków pośrednich, maszyny wirtualne)
  13. Generacja kodu wynikowego (architektury sprzętowe, przydział i wyznaczanie rejestrów, bloki podstawowe, grafy przepływu)
  14. 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)
  15. 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)
  16. 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)

  1. Obsługa wyjątków, kod wielowątkowy, przekazywanie parametrów (zarządzanie stosem, alokacja ze sterty, tryby i metody przekazywania parametrów)
  2. 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