Autor: Przemysław Kuczyński ([email protected])
$ make$ ./latc_llvm foo/bar/baz.lat- biblioteka runtime.ll ze zmianami
- program bnfc
Rozszerzenia nie zostały jeszcze w pełni zaimplementowane.
- docs - zasoby opisujące zadanie (treść, wymagania, itp.)
- lib - katalog z zewnętrznymi zależnościami
- runtime.ll - biblioteka runtime dostrarczona na zajęciach
- src - katalog z plikami źródłowymi kompilatora
- bnfc - katalog z plikami wygenerowanymi przez program
bnfc - Frontend - pliki źródłowe dla frontendu kompilatora
- Generator - pliki źródłowe dla generatora tekstu programu kompilatora
- bnfc - katalog z plikami wygenerowanymi przez program
- test - katalog z programami testowymi
- bad - testy błędne
- good - testy poprawne
- instester - program testujący
- Projekt powinien być oddany w postaci spakowanego archiwum TAR (.tar.gz lub .tgz)
- W korzeniu projektu muszą się znajdować co najmniej:
- Plik tekstowy README opisujący szczegóły kompilacji i uruchamiania programu, używane narzędzia i biblioteki, zaimplementowane rozszerzenia, strukturę katalogów projektu, ewentualnie odnośniki do bardziej szczegółowej dokumentacji.
- Plik Makefile pozwalający na zbudowanie programu.
- katalog src zawierający wyłącznie pliki źródłowe projektu (plus ewentualnie dostarczony przez nas plik Latte.cf); pliki pomocnicze takie jak biblioteki itp powinny być umieszczone w inych katalogach.
- Program musi się kompilować na students poleceniem make (które oczywiście może wywoływać inne programy).
- Wszelkie używane biblioteki (poza biblioteką standardową używanego jezyka programowania) muszą być opisane w README
- Po zbudowaniu kompilatora, w korzeniu musi się znajdować plik wykonywalny o nazwie latc (może być skryptem uruchamiającym inne programy)
- Kompilator musi akceptować wszystkie programy testowe z katalogu good i odrzucać ze stosownym komunikatem wszystkie programy z katalogu bad. Komunikaty o błędach muszą umnożliwiać lokalizację błędu (przez numer linii lub kontekst). Dla rozszerzeń musi akceptować wszystkie programy z odpowiednich podkatalogów extension. Uruchomienie poprawnego programu testowego ma dawać wyjście takie jak w odpowiednim pliku .output (dla wejścia zawartego w odpowiednim pliku .input, o ile istnieje)
- Gdy kompilator akceptuje program, musi wypisać w pierwszej linii stderr napis OK ("OK\n"). Dalsze linie i stdout - dowolne. Kompilator musi się w takiej sytuacji zakończyć z kodem powrotu 0.
- Gdy kompilator odrzuca program musi wypisać w pierwszej linii stderr napis ERROR ("ERROR\n"). Dalsze linie powinny zawierać stosowne informacje o błędach. Kompilator musi się w takiej sytuacji zakończyć z kodem powrotu różnym od 0.
- Rowiązania wymagające stosowania niestandardowego oprogramowania proszę uzgadniać ze sprawdzającymi. Rozwiązania ściągające w trakcie kompilacji duże ilości danych z sieci nie są mile widziane.
- Po wykonaniu
makew korzeniu projektu ma się znajdować program wykonywalnylatc_llvm - Wykonanie
latc_llvm foo/bar/baz.latdla poprawnego programu wejściowego baz.lat ma stworzyć pliki baz.ll (kod LLVM) oraz baz.bc (bitkod LLVM wykonywalny przy uzyciulli) w katalogu foo/bar. - Ewentualne funkcje biblioteczne (printInt etc.) należy umieścić w pliku runtime.bc w katalogu lib (dodatkowo proszę zamieścić jego źródło)