Spisak tema za seminarske radove (jos nepotpun) - Kompilator za fragment jezika Pascal (3 studenta) - Ulaz: kod na fragmentu jezika Pascal opisanom u prilogu - Faze: Leksicka, sintaksna, semanticka analiza jednostavan algoritam generisanja koda (ASU, str ...) - Izlaz: program na 32-bitnom 80x86 asembleru - Kompilator za fragment jezika Haskell (3 studenta) - Globalna registarska alokacija (2 studenta) - Ulaz: troadresni kod u formatu opisanom u prilogu, broj raspolozivih registara Izlaz: troadresni kod u tom formatu u kome su unete oznake konkretnih registara - Lokalna optimizacija (2 studenta) - Ulaz: troadresni kod u formatu opisanom u prilogu, - Izlaz: optimizovan kod koriscenjem 4-5 najznacajnijih tehnika lokalne optimizacije - Semanticka analiza Java programa (2 studenta) - Ulaz: sintaksno ispravan kod na fragmentu jezika Java opisanom u prilogu Izlaz: sve poruke o semantickim greskama ili informacija da je kod semanticki ispravan - Konstruisanje DAG-a za troadresni kod i njegova vizualizacija (1 student) - Ulaz: troadresni kod u formatu opisanom u prilogu, - Izlaz: DAG kojim je predstavljen taj kod i njegova vizualizacija (koriscenjem gotovih programa poput graphviz) - Heuristicko rasporedjivanje instrukcija za troadresni DAG (2 studenta) - Ulaz: troadresni kod u formatu opisanom u prilogu - Izlaz: raspored instrukcija odredjen heuristikom iz ASU, str ... - Optimalno rasporedjivanje instrukcija za troadresno drvo (2 studenta) - Ulaz: troadresni kod u formatu opisanom u prilogu ciji je DAG drvo - Izlaz: raspored instrukcija odredjen algoritmom iz ASU, str ... - use-def i def-use liste (1 studenta) - Ulaz: troadresni kod u formatu opisanom u prilogu, lokacija neke definicije - Izlaz: oznake lokacija na kojima se ta definicija upotrebljava - zivost promenljivih (1 student) - Ulaz: troadresni kod u formatu opisanom u prilogu, - Izlaz: skupovi zivih promenljivih na kraju svakog osnovnog bloka - Prevodjenje fragmenta Pascal-a na LLVM (1 student) - Ulaz: kod na fragmentu Pascal-a opisanom u prilogu - Izlaz: LLVM reprezentacija tog koda - Prevodjenje fragmenta Haskell na LLVM (1 student) - Ulaz: kod na fragmentu Haskell-a opisanom u prilogu - Izlaz: LLVM reprezentacija tog koda - Statistike C koda uz pomoc Clang-a (2 studenta) - Ulaz: kod na C-u - Izlaz: razne statistike ovog koda (npr. broj pojavljivanja za svaku naredbu, broj lokalnih promenljivih za svaku funkciju, broj globalnih promenljivih, broj definisanih funkcija, broj rekurzivnih funkcija, ...) - Transformacija petlji uz pomoc Clang-a (2 studenta) - Ulaz: kod na C-u, informacija o zeljenoj vrsti petlji - Izlaz: program u kome se koristi samo zeljena vrsta petlji (ostale se svode na taj tip) - Transformacija grananja uz pomoc Clang-a (2 studenta) - Ulaz: kod na C-u - Izlaz: program u kome je svaki switch preveden na if-else - Eliminisanje repne rekurzije uz pomoc Clang-a (2 studenta) - Ulaz: kod na C-u - Izlaz: kod u kome je svaka repna rekurzija automatski prevedena u iteraciju - Prevodjenje petlji u rekurzivne funkcije uz pomoc Clang-a (3 studenta) - Ulaz: kod na C-u - Izlaz: kod u kome je svaka petlja predstavljena posebnom rekurzivnom funkcijom