|
kierunek: informatyka, sem. V-VI |
Wykład (sem. V) - zima 2004/2005
Prowadzący: Michał Śmiałek
Przedmiot zajmuje się teoretycznymi i praktycznymi podstawami konstrukcji kompilatorów. W jego skład wchodzą następujące tematy:
Tematy dotyczące języka UML służą zdefiniowaniu metody projektowania kompilatorów (metody obiektowej) używanej podczas wykładu.
Literatura
1. A. V. Aho, R. Sethi, J. D. Ullman -
Compilers: Principles, Techniques and Tools, Addison-Wesley, 1986
powyższa książka jest również dostępna w
wersji polskiej (Kompilatory,
WNT, 2002), recenzja
2. W. M. Waite, G. Goos - Konstrukcja kompilatorów, WNT, 1989
3. Michał Śmiałek - Zrozumieć UML 2.0. Metody modelowania obiektowego, Helion, Gliwice, 2005
Slajdy z wykładów
|
|
|||
|
|
|
Przykładowe zadania
|
|
|
Regulamin
1. Zaliczenie wykładu
następuje na podstawie oceny pracy semestralnej oraz egzaminu.
2. W trakcie semestru
można zebrać maksimum 25 punktów. Na tę sumę składają się oceny wykonania zadań
wykładowych.
3. Zadania wykładowe
wykonywane w są grupach dwuosobowych tylko podczas wykładu (na drugiej godzinie
zajęć).
4. Osoby, które uzyskają
najlepsze wyniki z zadań wykładowych - zostaną zwolnione z egzaminu.
5. Za egzamin można
otrzymać maksimum 75 punktów.
6. Warunkiem zaliczenia
przedmiotu jest uzyskanie w sumie, co najmniej 51 pkt.
7. Ocena końcowa zależna
jest od uzyskanej sumarycznej liczby punktów: 51-60 pkt. = 3,0; 61-70 pkt. =
3,5; 71-80 pkt. = 4,0; 81-90 pkt. = 4,5; 91-100 pkt. = 5,0.
Laboratorium (sem. VI) - lato 2005
Prowadzący: Michał Śmiałek, Bartosz Sawicki, Bartosz
Świderski.
Podstawowym celem laboratorium jest
poznanie metod realizacji systemów kompilatorów przy pomocy generatorów typu
lex/yacc i języka obiektowego.
Uwaga: opis zamieszczony poniżej jest nieaktualny! Aktualny opis znajduje się na stronie Zakładu: http://www.iem.pw.edu.pl/zetiis/.
Regulamin
1. Do wykonania są dwa
zadania. Pierwsze zadanie jest zadaniem indywidualnym. Drugie zadanie
realizowane jest w grupach dwuosobowych. Obydwa zadania polegają na opracowaniu
języka oraz zaprojektowaniu i napisaniu aplikacji zawierającej kompilator
realizujący ten język. Aplikacje powinny być zaprojektowane przy wykorzystaniu
diagramów w języku UML oraz zaimplementowane przy wykorzystaniu języka
obiektowego (C++ lub Java).
2. Za wykonanie dwóch
zadań można otrzymać maksimum 100 punktów. Na tę sumę składa się po 50 pkt. za
każde zadanie.
3. Zadanie pierwsze: Kompilator
powinnien być napisany w języku C++ a analiza leksykalna i składniowa zrobiona
z pomocą kodu generowanego przez programy Flex i GNU Bison (kompatybilne z
lex/yacc). Do tworzenia grafiki należy użyć biblioteki GD. Obowiązującym
środowiskiem programistycznym jest LOP, max.iem.pw.edu.pl. Odnośniki: GNU
Flex/Bison -- http://www.gnu.org/software/flex/,
Biblioteka GD -- http://www.boutell.com/gd/, LOP -- http://max.iem.pw.edu.pl/.
4. Harmonogram
zadania pierwszego: zajęcia 1 - organizacja; 2 - konsultacje; 3 -
uruchomiony lex/yacc + gramatyka (7 pkt.); 4 - konsultacje; 5 - uruchomiona
biblioteka graficzna + diagramy UML (8 pkt.); 6 - konsultacje; 7 - obrona
projektu (15 pkt.) + dokumentacja końcowa (20 pkt.).
5. Zadanie drugie: Kompilator powinien być napisany w języku C++ lub
Java, a analiza leksykalna i składniowa zrobiona przy pomocy własnych klas o
strukturze zgodnej ze strukturą kompilatorów LL przedstawioną na wykładzie.
Obowiązującym środowiskiem jest LOP (j.w.).
6. Harmonogram zadania
drugiego: zajęcia 1 - organizacja i konsultacje, 2 - konsultacje, 3 -
diagramy UML + gramatyka (7 pkt.), 4 - konsultacje, 5 – uruchomione klasy
kompilatora (8 pkt.), 6 - konsultacje, 7 - obrona projektu (15 pkt.) +
dokumentacja końcowa (20 pkt.).
7. Dokumentacja
końcowa powinna zawierać: a) przedstawienie zadania, b) opis języka, c)
opis interfejsu użytkownika – instrukcję obsługi, d) definicję gramatyki
bezkontekstowej, e) projekt obiektowy (diagramy klas i sekwencji), f) opis
najistotniejszych fragmentów kodu źródłowego wraz z opisem implementacji.
8. Przekroczenie terminu
oddania wyników pośrednich oraz aplikacji wraz z dokumentacją oznacza obniżenie
oceny za dane zadanie o 20% przy spóźnieniu do jednego tygodnia i o 100% przy
spóźnieniu powyżej jednego tygodnia
9. Warunkiem zaliczenia jest uzyskanie w sumie co najmniej 51 pkt.
10. Ocena końcowa zależna jest od uzyskanej sumarycznej liczby punktów: 51-60
pkt. = 3,0; 61-70 pkt. = 3,5; 71-80 pkt. = 4,0; 81-90 pkt. = 4,5; 91-100 pkt. =
5,0.
Ważne ustalenia dodatkowe dotyczące zaliczenia:
11. Wszystkie projekty będą oceniane na podstawie obrony i dokumentacji końcowej. Na ocenę z obrony składają się: funkcjonalność i możliwości aplikacji (5 pkt.), jakość kodu i jego znajomość (5 pkt.), podział na pliki i Makefile (5 pkt.). Na ocenę dokumentacji składają się: podręcznik użytkownika (5 pkt.), opis języka (5 pkt.), udokumentowanie obiektowości - UML (5 pkt.), dokumentacja kodu i opis ważniejszych elementów (5 pkt.). Całe sprawozdanie końcowe musi się zmieścić na 5 kartkach papieru - włącznie z wydrukiem kodu (czcionka o min. rozmiarze 8).
12. Wszystkie projekty będą sprawdzane automatycznie pod kątem podobieństwa. Warunkiem zaliczenia jest umieszczenie w katalogu ~/jfik1 (dla zadania 1) oraz ~/jfik2 (dla zadania 2) wszystkich plików źródłowych (szczegóły na stronie http://lop.iem.pw.edu.pl).
Treść zadań
Zadanie pierwsze. Zaprojektować i napisać kompilator języka do nauki programowania opartego na zasadzie „grafiki żółwia” (podobnego do języka LOGO). Język powinien posiadać polecenia do przesuwania żółwia po ekranie (w przód, w tył, obrót), rysowania, zmiany koloru itp. itd. Oprócz poleceń graficznych, język powinien posiadać możliwość definiowania procedur i funkcji.
Zadanie drugie. Zaprojektować i napisać kompilator języka do definiowania i rozgrywania gier komnatowych. Język powinien umożliwiać definiowanie komnat oraz składanie ze zdefiniowanych komnat - obszaru gry. Komnaty powinny być zapisywane jako procedury z parametrami, gdzie parametry definiują np. rozmiary komnaty lub stan przejść. Druga część języka powinna umożliwiać pisanie „programów przejść” dla zdefiniowanego wcześniej obszaru gry. Taki „program przejść” powinien posiadać polecenia przechodzenia w różnych kierunkach, polecenia sprawdzania stanu drzwi, polecenia otwierania drzwi oraz instrukcję warunkową (dotyczącą np. stanu drzwi). Efektem wykonania programu w zdefiniowanym języku powinien być obrazek z narysowanym obszarem gry i szlakiem przejść przez ten obszar.