Nazwa przedmiotu:
Techniki kompilacji
Koordynator przedmiotu:
Rajmund Kożuszek
Status przedmiotu:
Fakultatywny ograniczonego wyboru
Poziom kształcenia:
Studia I stopnia
Program:
Informatyka
Grupa przedmiotów:
Inżynieria oprogramowania
Kod przedmiotu:
TKOM
Semestr nominalny:
6 / rok ak. 2021/2022
Liczba punktów ECTS:
4
Liczba godzin pracy studenta związanych z osiągnięciem efektów uczenia się:
1. liczba godzin kontaktowych – 40 godz., w tym  obecność na wykładach: 30 godz.,  obecność na egzaminie: 3 godz.,  udział w konsultacjach związanych z realizacją wykładu: 2 godz.,  zajęcia projektowe: konsultowanie i weryfikacja etapów realizacji projektu: 5 godz. 2. praca własna studenta – 70 godz., w tym  analiza literatury i materiałów wykładowych związana z przygotowaniem do kolejnych wykładów: 30 godz.,  realizacja projektu: 30 godz.,  przygotowanie do kolokwiów i egzaminu: 10 godz. Łączny nakład pracy studenta wynosi 110 godz., co odpowiada 4pkt. ECTS.
Liczba punktów ECTS na zajęciach wymagających bezpośredniego udziału nauczycieli akademickich:
1,5 pkt. ECTS, co odpowiada 40 godz. kontaktowym
Język prowadzenia zajęć:
polski
Liczba punktów ECTS, którą student uzyskuje w ramach zajęć o charakterze praktycznym:
1 pkt. ECTS, co odpowiada 30 godz. realizacji projektu
Formy zajęć i ich wymiar w semestrze:
  • Wykład30h
  • Ćwiczenia0h
  • Laboratorium0h
  • Projekt30h
  • Lekcje komputerowe0h
Wymagania wstępne:
Programowanie obiektowe Algorytmy i struktury danych Architektura komputerów Systemy operacyjne Sztuka wytwarzania oprogramowania
Limit liczby studentów:
60
Cel przedmiotu:
Celem przedmiotu jest zapoznanie studentów z głównymi pojęciami, metodami i algorytmami związanymi z transformacją tekstów oraz podstawami budowy kompilatorów i stosowanych w nich metodach i algorytmach. W szczególności, studenci zapoznają się/pogłębiają wiedzę i umiejętności praktyczne w zakresie wyrażeń regularnych (aspektów użytkowych jak i samego sposobu realizacji mechanizmu wyrażeń regularnych – automaty niedeterministyczne i deterministyczne), gramatyki i języki (metody specyfikacji, różne klasy gramatyk – metody weryfikacji przynależności do danej klasy, przekształcanie gramatyk), gramatyki bezkontekstowe, teoretyczne i praktyczne aspekty analizy leksykalnej, składniowej, semantycznej, interpretacja i generacja kodu. W sposób praktyczny student zdobywa i weryfikuje swoją wiedzę i umiejętności poprzez realizację, w ramach zajęć projektowych, np. interpretera własnego języka programowania czy fragmentu kompilatora.
Treści kształcenia:
1. Wykład: Wprowadzenie (1h): Ogólnie o problemie kompilacji / interpretacji; wprowadzenie do budowy kompilatorów i procesu kompilacji; składniki zależne od języka źródłowego (front end) i od platformy docelowej. Potrzebne techniki i narzędzia (również teoretyczne); Języki regularne i analiza leksykalna (5h): Reprezentacje języków regularnych, formalizm wyrażeń regularnych (WR), gramatyki regularne; automaty niedeterministyczne (AN) i deterministyczne (AD). Konwersja wyrażeń regularnych na automaty, algorytm Thompsona, konwersja AN na AD (algorytm podzbiorowy), bezpośrednia konwersja WR na AD. Właściwości klasy języków regularnych. Zastosowania do wyszukiwania wzorców i analizy leksykalnej. Przykład implementacji analizatora leksykalnego i obsługi źródeł. Generatory analizatorów leksykalnych. Makrogeneracja – parametryczne przetwarzanie tekstów (3h): Typy substytucji tekstowych, rozpoznawanie makrodefinicji i makrowywołań, organizacja biblioteki makrodefinicji, reguły przesłaniania i dostępności; mechanizmy wiązania parametrów. Przykłady makrogeneratorów. Podstawy teoretyczne – języki i gramatyki (3h): Języki i gramatyki; style definiowania języka; konwencje notacyjne; przegląd metanotacji (BNF, EBNF, ISO-14977, ABNF, diagramy składniowe); Gramatyki generacyjne; Hierarchia języków wg Chomskiego, formy kanoniczne gramatyk (CNF, GNF, KNF); Twierdzenie o pompowaniu dla gramatyk bezkontekstowych; Drzewa wyprowadzeń dla gramatyk bezkontekstowych. Niejednoznaczność w gramatykach bezkontekstowych - przykłady. Języki bezkontekstowe i ich rozbiór (2h): Reprezentacje języków bezkontekstowych; właściwości gramatyk bezkontekstowych. Przekształcanie gramatyk (substytucja, usuwanie symboli niedostępnych, usuwanie produkcji pustych i jednostkowych); Usuwanie rekursji lewostronnej, faktoryzacja lewostronna. Zbiory FIRST i FOLLOW; Rozbiór rekursywnie zstępujący (5h). Schematy translacji. Schemat translacji wyrażeń arytmetycznych. Rozbiór rekursywnie zstępujący sterowany składnią (RD); Rekursywnie zstępujący analizator składniowy – przykłady praktyczne; struktury pomocnicze w analizie składniowej; Współpraca analizator składniowy – analizator leksykalny; Obsługa błędów; Rozbiór sterowany tablicą - parser LL(1); Analizatory składniowe wstępujące (5h): Schemat ogólny metod wstępujących; LR-formy; Automat LR(0) i sterownik parsera LR(0), rozbiór wyrażeń wg LR(0). Konflikty w tabelach LR(0), rozbiór SLR(1), konflikty w SLR(1). Rozbiór LR(1), LR1-formy, wyznaczanie tabeli dla parsera LR(1), redukcja LR(1) - LALR(1). Porównanie parserów. Własności i problemy decyzyjne języków bezkontekstowych. Gramatyki z atrybutami i operatorowe (2h) Gramatyki operatorowe; Rozbiór wyrażeń w gramatykach operatorowych; przykład translacji wyrażeń do Odwrotnej Notacji Polskiej (ONP); Gramatyki z atrybutami i ich wykorzystanie w generatorach parserów; Akcje semantyczne parsera. Analiza semantyczna (2h): Struktury danych i schematy programistyczne w kompilatorze; Atrybuty identyfikatorów, organizacja tabel symboli; organizacja rekursji i zmiennych lokalnych na przykładzie interpreterów. Generacja kodu i techniki optymalizacyjne (2h): Komunikacja analizatora z generatorem, alokacja pamięci w strukturach blokowych, generacja kodu dla wyrażeń i struktur sterowania; przejście z konwencji maszyny stosowej do konwencji procesora docelowego. Elementy optymalizacji kodu, optymalizacje lokalne i globalne; algorytm optymalizacji wyrażeń. 2. Projekt Zakres projektu Celem projektu jest zapoznanie się z metodami wytwarzania i budową kompilatorów. W szczególności, opanowanie przez studenta praktycznych umiejętności realizacji przetwarzania sterowanego składnią w odniesieniu do różnych typów zastosowań wykorzystujących notację sformalizowaną (symulacja, przetwarzanie i rozpoznawanie tekstu, interpretacja prostych języków). Wymagane jest przygotowanie projektu (w szczególności: zebranie i wyspecyfikowanie wymagań w toku dyskusji z prowadzącym projekt, opracowanie gramatyki własnego języka, koncepcji rozwiązania) oraz dokumentacji końcowej.
Metody oceny:
Realizacja przedmiotu obejmuje następujące formy zajęć: • wykład prowadzony w wymiarze 2 godz. tygodniowo (30 godzin); w wybranych zagadnieniach przewidziana jest aktywizacja studentów na wykładzie; • zajęcia projektowe (30 godzin); w ramach tych zajęć student, w oparciu o ustalane z prowadzącym wymagania funkcjonalne, opracowuje składnię i semantykę własnego języka a następnie realizuje kompilator, interpreter lub inny procesor tekstu. Przygotowuje projekt wstępny (zawierający zebrane wymagania, projekt rozwiązania i przypadki testowe), który po akceptacji prowadzącego jest implementowany w uzgodnionym z prowadzącym języku programowania i testowany. Efekty pracy student demonstruje w laboratorium. Po prezentacji programu student opracowuje dokumentacje końcową i przedstawia ją prowadzącemu. Student może ponadto uczestniczyć w prowadzonych co tydzień w wymiarze 2 godz. konsultacjach. Sprawdzanie założonych efektów kształcenia realizowane jest przez: • ocenę wiedzy i umiejętności związanych z realizacją tematów projektowych; • formatywną ocenę związaną z rozwiązaniem zadań przedkolokwialnych, a także z interaktywną forma prowadzenia wykładu oraz z ćwiczeniami; • ocenę wiedzy i umiejętności wykazanych na kolokwiach (na kolokwiach student może korzystać z wybranych materiałów dydaktycznych oraz książek); • ocenę wiedzy i umiejętności wykazanych na egzaminie (student może korzystać z wybranych materiałów dydaktycznych oraz książek).
Egzamin:
tak
Literatura:
• Aho A.V., Lam M., Sethi R., Ullman J.D.: “Compilers: Principles, Techniques & Tools”, 2nd edition, Pearson, Addison-Wesley, 2013; • Aho A.V., Sethi R., Ullman J.D.: Kompilatory: reguły, metody i narzędzia, WNT 2006; • Bennet J.P.: “Introduction to Compiling Techniques: A First Course Using ANSI C, Lex, and Yacc”, 2nd edition, Mc Graw Hill, 1996; • Grune D., van Reeuwijk K., Bal H. E., Jacobs C. J. H., Langendoen K.: “Modern Compiler Design”, Springer, 2016 • Reinhard W.: “Compiler Design”, Springer-Verlag Berlin and Heidelberg, 2013; • K.D. Cooper, L.Torcon: “Engineering a Compiler”, 2nd edition, Elsevier, 2011; • Mak R.:“Writing Compilers and Interpreters: A Modern Software Engineering Approach Using Java”, 2014; • Galles D.: “Modern Compiler Design”, Addison-Wesley, 2004; • Aho A.V., Sethi R., Ullman J.D., Lam J.D.: „21st Century Compilers”, Addison-Wesley, 2006; • M. T. Aegidius: “Introduction to Compiler Design”, Springer, 2011; • Pająk A., Wigura A.: Makrogeneratory, asemblery i konsolidatory, PWN, 1983; • Strona domowa i dokumentacja projektu ANTLR - https://www.antlr.org ; • Materiały elektroniczne na stronie przedmiotu
Witryna www przedmiotu:
https://usosweb.usos.pw.edu.pl/kontroler.php?_action=katalog2/przedmioty/pokazPrzedmiot&prz_kod=103D-INIOP-ISP-TKOM
Uwagi:
(-)

Efekty uczenia się

Profil ogólnoakademicki - wiedza

Charakterystyka W01
zna metody opisu języków formalnych
Weryfikacja: kolokwia, egzamin, projekt
Powiązane charakterystyki kierunkowe: W05
Powiązane charakterystyki obszarowe: P6U_W, I.P6S_WG.o
Charakterystyka W02
zna hierarchię języków wg Chomskiego i ich modeli generacyjnych / obliczeniowych
Weryfikacja: kolokwia, egzamin, projekt
Powiązane charakterystyki kierunkowe: W05
Powiązane charakterystyki obszarowe: P6U_W, I.P6S_WG.o
Charakterystyka W03
zna mechanizmy makrogeneracji i ich dostępność w środowiskach programistycznych
Weryfikacja: kolokwia, egzamin, projekt
Powiązane charakterystyki kierunkowe: W08
Powiązane charakterystyki obszarowe: I.P6S_WG.o, III.P6S_WG, P6U_W
Charakterystyka W04
zna metody reprezentacji i przetwarzania języków regularnych
Weryfikacja: kolokwia, egzamin, projekt
Powiązane charakterystyki kierunkowe: W05
Powiązane charakterystyki obszarowe: P6U_W, I.P6S_WG.o
Charakterystyka W05
zna metody analizy jednoznacznych języków bezkontekstowych (parser rekursywnie zstępujący, rozbiór wstępujący)
Weryfikacja: kolokwia, egzamin, projekt
Powiązane charakterystyki kierunkowe: W05
Powiązane charakterystyki obszarowe: P6U_W, I.P6S_WG.o
Charakterystyka W06
zna podstawowe metody uwzględniania semantyki języka i generowania kodu wynikowego
Weryfikacja: kolokwia, egzamin, projekt
Powiązane charakterystyki kierunkowe: W08, W09
Powiązane charakterystyki obszarowe: P6U_W, I.P6S_WG.o, III.P6S_WG
Charakterystyka W07
zna metody rozstrzygalności głównych problemów decyzyjnych w klasach języków regularnych i bezkontekstowych
Weryfikacja: kolokwia, egzamin, projekt
Powiązane charakterystyki kierunkowe: W05
Powiązane charakterystyki obszarowe: P6U_W, I.P6S_WG.o
Charakterystyka W08
zna zasady działania kompilatorów i interpreterów
Weryfikacja: kolokwia, egzamin, projekt
Powiązane charakterystyki kierunkowe: W08, W09
Powiązane charakterystyki obszarowe: P6U_W, I.P6S_WG.o, III.P6S_WG
Charakterystyka W09
zna metody i rozumie potrzebę modularyzacji przetwarzania danych
Weryfikacja: kolokwia, egzamin, projekt
Powiązane charakterystyki kierunkowe: W08, W09
Powiązane charakterystyki obszarowe: P6U_W, I.P6S_WG.o, III.P6S_WG
Charakterystyka W10
rozumie niebezpieczeństwa i wady nieodpowiedniego przetwarzania danych wejściowych w programach
Weryfikacja: kolokwia, egzamin, projekt
Powiązane charakterystyki kierunkowe: W08, W10
Powiązane charakterystyki obszarowe: III.P6S_WG, P6U_W, I.P6S_WG.o
Charakterystyka W11
rozumie wady i zalety stosowania wyrażeń regularnych oraz ich implementację w dostępnych bibliotekach i językach
Weryfikacja: kolokwia, egzamin, projekt
Powiązane charakterystyki kierunkowe: W05, W08
Powiązane charakterystyki obszarowe: P6U_W, I.P6S_WG.o, III.P6S_WG

Profil ogólnoakademicki - umiejętności

Charakterystyka U01
potrafi zdefiniować formalnie składnię języka w metanotacji EBNF (lub podobnej)
Weryfikacja: kolokwia, egzamin, projekt
Powiązane charakterystyki kierunkowe: U01, U04, U09
Powiązane charakterystyki obszarowe: P6U_U, I.P6S_UW.o, III.P6S_UW.o, I.P6S_UK
Charakterystyka U02
potrafi przekształcić gramatykę języka wg zadanych kryteriów (sprawdzić kryteria LL(1), usunąć produkcje jednostkowe, sprowadzić do postaci normalnej Chomskiego)
Weryfikacja: kolokwia, egzamin, projekt
Powiązane charakterystyki kierunkowe: U04, U07
Powiązane charakterystyki obszarowe: P6U_U, I.P6S_UW.o, III.P6S_UW.o
Charakterystyka U03
potrafi przekształcać dowolnie reprezentację języka regularnego (wyrażenia regularne, automaty skończone, gramatyki regularne)
Weryfikacja: kolokwia, egzamin, projekt
Powiązane charakterystyki kierunkowe: U07
Powiązane charakterystyki obszarowe: P6U_U, I.P6S_UW.o, III.P6S_UW.o
Charakterystyka U04
potrafi zrealizować analizator leksykalny i parser rekursywnie zstępujący wg zadanej gramatyki
Weryfikacja: kolokwia, egzamin, projekt
Powiązane charakterystyki kierunkowe: U04
Powiązane charakterystyki obszarowe: III.P6S_UW.o, P6U_U, I.P6S_UW.o
Charakterystyka U05
potrafi zastosować model przetwarzania sterowanego składnią (schemat translacji) do prostych problemów obliczeniowych
Weryfikacja: kolokwia, egzamin, projekt
Powiązane charakterystyki kierunkowe: U04, U08, U10
Powiązane charakterystyki obszarowe: P6U_U, I.P6S_UW.o, III.P6S_UW.o, I.P6S_UO, I.P6S_UK
Charakterystyka U06
potrafi zaprojektować środowisko programowe do osadzenia akcji semantycznych dla prostego języka bezkontekstowego
Weryfikacja: kolokwia, egzamin, projekt
Powiązane charakterystyki kierunkowe: U01
Powiązane charakterystyki obszarowe: P6U_U, I.P6S_UW.o, III.P6S_UW.o
Charakterystyka U07
potrafi wykorzystywać generatory analizatorów leksykalnych i składniowych oraz integrować je we własnym programie
Weryfikacja: kolokwia, egzamin, projekt
Powiązane charakterystyki kierunkowe: U04, U10
Powiązane charakterystyki obszarowe: P6U_U, I.P6S_UW.o, III.P6S_UW.o, I.P6S_UK
Charakterystyka U08
potrafi odpowiednio ustrukturalizować kod programu i schemat przetwarzania
Weryfikacja: kolokwia, egzamin, projekt
Powiązane charakterystyki kierunkowe: U02, U06
Powiązane charakterystyki obszarowe: P6U_U, I.P6S_UW.o, III.P6S_UW.o
Charakterystyka U09
potrafi stosować dobre wzorce programowania do przetwarzania tekstu
Weryfikacja: kolokwia, egzamin, projekt
Powiązane charakterystyki kierunkowe: U10, U02
Powiązane charakterystyki obszarowe: I.P6S_UK, III.P6S_UW.o, P6U_U, I.P6S_UW.o
Charakterystyka U10
potrafi w sposób bezpieczny implementować strumieniowe przetwarzanie żądań, tekstu itp.
Weryfikacja: kolokwia, egzamin, projekt
Powiązane charakterystyki kierunkowe: U02, U06, U10
Powiązane charakterystyki obszarowe: P6U_U, I.P6S_UW.o, III.P6S_UW.o, I.P6S_UK
Charakterystyka U11
potrafi sprawnie posługiwać się wyrażeniami regularnymi
Weryfikacja: kolokwia, egzamin, projekt
Powiązane charakterystyki kierunkowe: U02, U06
Powiązane charakterystyki obszarowe: P6U_U, I.P6S_UW.o, III.P6S_UW.o

Profil ogólnoakademicki - kompetencje społeczne

Charakterystyka K01
rozumie potrzebę stałego aktualizowania i wzbogacania posiadanej wiedzy
Weryfikacja: kolokwia, egzamin, projekt
Powiązane charakterystyki kierunkowe: K01, K03
Powiązane charakterystyki obszarowe: P6U_K, I.P6S_KK, I.P6S_KR
Charakterystyka K02
ma świadomość konieczności komunikowania się z otoczeniem, także pozazawodowym, w sposób zrozumiały dla odbiorcy
Weryfikacja: kolokwia, egzamin, projekt
Powiązane charakterystyki kierunkowe: K05
Powiązane charakterystyki obszarowe: P6U_K, I.P6S_KO
Charakterystyka K03
potrafi planować działania projektowe wg wymaganego terminu
Weryfikacja: kolokwia, egzamin, projekt
Powiązane charakterystyki kierunkowe: K03
Powiązane charakterystyki obszarowe: P6U_K, I.P6S_KK, I.P6S_KR
Charakterystyka K04
potrafi samodzielnie pozyskiwać poszerzające informacje o rozwiązywanym problemie i dostępnych narzędziach programowych
Weryfikacja: kolokwia, egzamin, projekt
Powiązane charakterystyki kierunkowe: K01, K03
Powiązane charakterystyki obszarowe: I.P6S_KK, P6U_K, I.P6S_KR