Laboratorium MRJP - projekt zaliczeniowy

Zaliczenie laboratorium odbywa się na podstawie projektu obejmującego implementację kompilatora dla prostego jezyka imperatywnego Latte.

Etapy

Projekt składa się z trzech etapów

  1. Front-end: analiza składniowa i semantyczna. Termin 20 listopada.
  2. Generator kodu dla JVM. Termin 18 grudnia.
  3. Generator kodu dla LLVM albo x86 oraz ewentualne rozszerzenia. Termin 22 stycznia.
Prowadzący grupę może wyznaczyć inne terminy, w szczególności wymagać osobistej prezentacji projektu.

Punktacja

Łącznie do zdobycia jest maksymalnie 30 punktów, które liczą się do ostatecznej oceny z przedmiotu. Dla zaliczenia laboratorium (i dopuszczenia do egzaminu) należy oddać zadowalające implementacje wszystkich etapów i uzyskać łącznie co najmniej 15p.

Punkty mozna uzyskać za:

  1. front-end (5)
  2. back-end JVM (5)
  3. back-end LLVM (8) albo x86 (10)
  4. kod LLVM w postaci SSA - dodatkowo 1p
  5. alokacja rejestrów dla x86 - dodatkowo do 3p
  6. optymalizacje - do 3p
  7. Rozszerzenia (notacja x/y oznacza punkty za backend w wersji odpowiednio LLVM/x86)
    1. tablice (2)
    2. struktury (2)
    3. obiekty (atrybuty, metody, dziedziczenie bez zastępowania metod) - dodatkowo (3/4)
    4. metody wirtualne - dodatkowo (3/4), czyli za obiekty z metodami wirtualnymi mozna uzyskać 8/10 punktów.
    5. odśmiecanie (2)
Szczegółowy opis rozszerzeń zawarty jest w opisie języka.

Uwaga: punktacja trzeciego etapu może ulegać jeszcze korektom do czasu jego rozpoczęcia.

Spóźnienia, termin poprawkowy

Programy oddane po terminie będą obciążane karą 2p za każdy (rozpoczęty) tydzień opóźnienia. Ostatecznym terminem, po którym programy nie będą przyjmowane ("termin poprawkowy") jest 20 lutego.

Zasady

Projekt zaliczeniowy ma być pisany samodzielnie. Wszelkie przejawy niesamodzielności będą karane. W szczególności:

Wymagania techniczne

  1. Projekt powinien być oddany w postaci spakowanego archiwum TAR (.tar.gz lub .tgz)
  2. W korzeniu projektu muszą się znajdować co najmniej:
  3. Program musi się kompilować na students poleceniem make (które oczywiście może wywoływać inne programy).
  4. Wszelkie używane biblioteki (poza biblioteką standardową używanego jezyka programowania) muszą być opisane w README
  5. Kompilator musi akceptować wszystkie programy testowe z katalogu good i odrzucać ze stosownym komunikatem wszystkie programy z katalogu bad. Dla rozszerzeń musi akceptować wszystkie programy z odpowiednich podkatalogów extension. Uruchomienie poprawnego programu testowego ma dawać wyjącie takie jak w oopowiednim pliku .output

Archiwum z programami testowymi:

lattests111218.tgz z 18.12.2011, MD5:8b72621df9f107e2d4c8e2702931b2ae
Zmiany: w extensions/structs/list.lat poprawiona sygnatura funkcji main

lattests111108.tgz z 8.11.2011, MD5:f333600e36cb1a0bdf87ed6206918473
Zmiany: w extensions/structs/list.lat usunięte zbędne nawiasy przy new

lattests111022.tgz z 22.10.2011, MD5:ab2abf8aed5774529f0705d7c7ca07cf