Andrzej Chmielewski
Informacje ogólne > Dydaktyka > Techniki kompilacji > Warunki zaliczenia

Warunki zaliczenia


1. Warunkiem zaliczenia jest oddanie na koniec semestru pełnej wersji kompilatora (5 modułów) wraz z kodami źródłowymi oraz dokumentacji. Terminy oddawania poszczególnych modułów znajdują się w sekcji Terminy.
2. Aplikacja powinna składać się z dwóch niezależnych części. Pierwsza z nich powinna generować kod pośredni dla analizowanego programu. Druga to interpreter kodu pośredniego.
3. Każdy z modułów kompilatora powinien wypisywać błędy oraz wyniki do oddzielnych plików tekstowych. Błędy powinny być raportowane poprzez określenie jego typu (dokładnego opisu) wraz z numerem linii w której wystąpił.
4. Na każdym etapie kompilacji powinna być wykrywana maksymalna liczba błędów.
5. Interfejs aplikacji nie jest oceniany.
6. Język programowania oraz platforma dowolna.


Wymagania szczegółowe dla poszczególnych modułów kompilatora

Analizator leksykalny - wynikiem działania jest lista prawidłowo rozpoznanych leksemów;  Wykrywane błędy: błędnie zapisane liczby naturalne oraz rzeczywiste, niezakończone ciągi znaków, symbole spoza gramatyki.

Analizator składniowy - wynikiem działania jest tzw. drzewo wywodu. Wykrywane błędy: wszystkie błędy składniowe. Do wydobywania się z błędów, sugerowanym rozwiązaniem jest "panic mode" z wykorzystaniem tablic FIRST i FOLLOW (w przypadku wybrania gramatyki na ocenę dostateczną wystarczy tablica FOLLOW).

Analizator semantyczny - wynikiem działania jest tzw. udekorowane drzewo wywodu. Wykrywane błędy: niezgodność typów w instrukcji podstawienia, porównania itd., niezadeklarowana zmienna, redeklaracja zmiennej. W przypadku wybrania gramatyki na ocenę bardzo dobrą należy zaimplementować 4 dowolne operatory konwersji typów, na ocenę dobrą wystarczą dwa operatory, natomiast w przypadku gramatyki na ocenę dostateczną nie wymagane są takie operatory (ścisła kontrola typów).

Kod pośredni - wynikiem działania jest kod pośredni wygenerowany dla analizowanego programu. Sugerowanym rozwiązaniem jest przyjęcie kodu trójadresowego. Kod pośredni nie może być w postaci kodu języków wysokiego poziomu np. C, Pascal, Java itd. Dozwolone natomiast jest wygenerowanie kodu do postaci byte-code Javy. W tym przypadku nie ma konieczności pisania  interpretera (punkty za interpreter są automatycznie zaliczane).

Interpreter - powinien wykrywać błędy typu runtime np. błąd dzielenia przez 0. Znalezienie tego typu błędów powinno skutkować wyjściem z programu.