Techniki Kompilacji (TKOM)

Tematy Projektów

Opisy są skrótowe - należy je uszczegółowić na konsultacjach.
Propozycje tematów własnych są mile widziane.
Tematy przekreślone są już zarezerwowane.

System zarządzania budowaniem aplikacji

Język deklaratywny opisujący zależności między modułami aplikacji, pozwalający na budowanie bibliotek statycznych i linkowanie ich w wynikową aplikację. Powinien umożliwiać zdefiniowanie odpowiedniej kolejności budowania modułów, nie musi wykrywać czasów modyfikacji etc. Projekt powinien móc się zbudować dzięki własnemu systemowi budowania.

Opis struktur binarnych

Język deklaratywny opisujący struktury binarne (z możliwą dokładnością do pojedynczych bitów). Projekt powinien umożliwiać zakodowanie i zdekodowanie dowolnej opisanej struktury i prezentację jej w wybranym formacie. Powinno być możliwe zdefiniowanie pól zależnych - np. pole Length i Contents.

Leniwy język funkcyjny

Język funkcyjny z leniwą ewaluacją - powinien umożliwiać zdefiniowanie oraz wywoływanie funkcji. Parametry funkcji powinny być ewaluowane dopiero przy pierwszym użyciu.

Język do operacji na walutach

Język umożliwiający podstawowe przetwarzanie zmiennych zawierających wartości liczbowe z jednostkami reprezentującymi waluty. Powinna istnieć możliwość deklaratywnego zdefiniowania relacji pomiędzy walutami (przelicznika), która będzie wykorzystana przy operacji np. dodawania wartości o dwóch różnych walutach.

Język do opisu gier planszowych

Język wspomagający operacje związane z wyznaczaniem wyników bądź symulowaniem rozgrywki w grze planszowej/karcianej/itp. Na przykład - język obsługujący konstrukcje typu '1d20' albo zawierający operacje do wygodnego określania sąsiedztwa na mapie złożonej z heksów.

Język z jednostkami

Język umożliwiający podstawowe przetwarzanie zmiennych zawierających wartości liczbowe z dowolnymi jednostkami (np. SI). Może istnieć możliwość deklaratywnego zdefiniowania znanych jednostek i ich ewentualnych relacji lub te relacje mogą być predefinionwane (ale bardziej złożone). Jednostki powinny być wykorzystywane przy określaniu poprawności operacji.

Język z czasem

Język umożliwiający podstawowe przetwarzanie zmiennych zawierających wartości reprezentujące obiekty związane z czasem: "moment" w czasie (np. "dziś/teraz") i "różnicę" w czasie (np. "12 sekund"). Powinna być możliwość podawania literałów każdego z tych typów bezpośrednio w języku. Kontrola typów powinna pozwalać na rozsądne operacje między tymi typami (wzorowanie się na bibliotece standardowej <chrono> jak najbardziej dopuszczalne).

Język do operacji na listach

Język zorientowany wokół struktur listowych i operacjach na nich, takich jak filtrowanie, złączenia, dostęp do podlist etc.

Interpreter prostego języka

Język powinien wspierać użycie zmiennych, funkcji, warunków i pętli. Zmienne powinny mieć zasięg. Język powinien mieć co najmniej jeden specjalny typ danych, np. liczby zespolone.

Język do generowania wizualizacji

Program powinien przyjmować dane w określonym formacie (np. JSON) i wizualizować je zgodne z definiowalnymi szablonami - np. plików HTML.

Dokumentacja wstępna

W dokumentacji wstępnej powinny znaleźć się następujące elementy:
  1. Opis funcjonalny - do czego język ma służyć, co umożliwiać, co ułatwiać etc.
    Koniecznie z przykładami jak projektowany jezyk mógłby wyglądać (może być wiele przykładów pokazujących różne konstrukcje języka, może być kilka dłuższych pokazujących jak język działa jako "całość")
  2. Formalny opis gramatyki - pasujący do przykładów z poprzedniego punktu formalny opis gramatyki (np. w EBNF), z wyszczególnionymi symbolami terminalnymi.
    Porada: warto zacząć od "ładnych" przykładów i próbować dla nich robić gramatykę, ew. modyfikując przykłady - zaczynanie od formalnej gramatyki jest raczej trudniejsze.
  3. Opis techniczny realizacji - wybrany język, biblioteki, narzędzia etc., ale też definicja produktu końcowego - jak program będzie wywoływany, co będzie jego wejściem a co wyjściem etc.
Język zaprezentowany w dokumentacji powinien zawierać następujące elementy (w formie adekwatnej dla proponowanej dziedziny języka): Wystarczy po jednym elemencie z grupy instrukcji warunkowych i pętli - np. robienie zarówno while jak i for nie zwiększa jakościowo trudności projektu, tylko ilościowo.

Materiały


Strona główna