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 ==
1) 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
2) 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
3) Implementacja analizatorów leksykalnych w Lexie #1/2
# Implementacja analizatorów leksykalnych w Lexie #2/2
4) 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
5) 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ą
6) 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
7) 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
8) Analiza metodą wstępującą #1/2
# Analiza metodą wstępującą #2/2
9) 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
10) Podstawy generatora YACC
# Generator YACC : gramatyki niejednoznaczne, konflikty, rozstrzyganie
 
# Translacja sterowana składnią w generatorze YACC #1/2
11) Generator YACC : gramatyki niejednoznaczne, konflikty, rozstrzyganie
# Translacja sterowana składnią w generatorze YACC #2/2
 
12) Translacja sterowana składnią w generatorze YACC #1/2
13) Translacja sterowana składnią w generatorze YACC #2/2
atrybuty i implementacja, akcje wielokrotne
atrybuty i implementacja, akcje wielokrotne
 
# Zaleźności kontekstowe
14) 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
15) 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
16) Generacja kodu wynikowego #1/2
# Generacja kodu wynikowego #2/3
17) 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
18) Optymalizacja #1/2
# Optymalizacja #2/2
19) 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
20) Zarządzanie pamięcią #1/2
# Zarządzanie pamięcią #2/2
21) 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
22) 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
23) 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
24) 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

  1. Wstęp, organizacja procesu kompilacji

zakres przedmiotu, rodzaje translatorów, interpretacja a kompilacja, model kompilatora, podział na fazy

  1. Analiza leksykalna

wprowadzenie do analizy leksykalnej, podstawowe pojęcia, implementacja analizatorów leksykalnych w językach imperatywnych na przykładzie języka C

  1. Implementacja analizatorów leksykalnych w Lexie #1/2
  2. Implementacja analizatorów leksykalnych w Lexie #2/2

koncepcja i używanie generatora, konwencje notacyjne, wzorce, akcje, retrakcja, konteksty, odrzucenie dopasowania,

  1. Wstęp do analizy składniowej

podstawowe pojęcia analizy składniowej, klasyfikacja Chomsky'ego a implementacja analizatorów, gramatyki bezkontekstowe,

  1. Analiza metodą zstępującą

koncepcja metody top-down, ograniczenia metody (lewostronna rekurencja, faktoryzacja)

  1. Implementacja analizatora zstępującego analizatora składniowego w języku imperatywnym

na przykładzie języka C

  1. Analiza metodą wstępującą #1/2
  2. Analiza metodą wstępującą #2/2

koncepcja metody bottom-up, LR-parsery, metody generowania tablic

  1. Podstawy generatora YACC
  2. Generator YACC : gramatyki niejednoznaczne, konflikty, rozstrzyganie
  3. Translacja sterowana składnią w generatorze YACC #1/2
  4. Translacja sterowana składnią w generatorze YACC #2/2

atrybuty i implementacja, akcje wielokrotne

  1. Zaleźności kontekstowe

systemy typów, kontrola zgodności typów, konwersje

  1. Generacja kodu pośredniego

koncepcja języka pośredniego, typy języków pośrednich, maszyny wirtualne,

  1. Generacja kodu wynikowego #1/2
  2. Generacja kodu wynikowego #2/3

architektury sprzętowe, przydział i wyznaczanie rejestrów, bloki podstawowe, grafy przepływu,

  1. Optymalizacja #1/2
  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

  1. Zarządzanie pamięcią #1/2
  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

  1. 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

  1. Obsługa wyjątków, kod wielowątkowy, przekazywanie parametrów

zarządzanie stosem, alokacja ze sterty, tryby i metody przekazywania parametrów

  1. 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