Literatura: - [BPV] beleske sa predavanja i vezbi - [ASU] Aho, Sethi, Ullman: Compilers, principles, techniques and tools - [App] Appel: Modern Compiler Implementation in C - [Aik] Alex Aiken: Compilers (https://class.coursera.org/compilers/lecture) - [RTRK] Zoran Jovanovic: LLVM backend Osnovna pitanja: - Kratak opis svih faza kompilacije (prikaz kroz primer) - Stabla apstraktne sintakse (reprezentacija u C-u i C++-u, kreiranje tokom parsiranja, atributi cvorova) - Semanticka analiza (zadaci, staticki i dinamicki tipovi, reprezentacija tipova, provera tipova) - Tabele simbola (uloga i nacini implementacije) - Asemblerski i masinski jezici (registri, organizacija memorije, instrukcije, odnos RISC/CISC) - Generisanje koda za stek masinu i stek masinu sa akumulatorom - Aktivacioni slogovi (stek okviri i njihov sadrzaj, konvencije pozivanja funkcija) - Medjujezici i medjukod (troadresni kod, nacini reprezentacije, generisanje troadresnog medjukoda, logicki izrazi) - Osnovni blokovi i graf kontrole toka (odredjivanje, primeri) - Analiza toka podataka (primeri, jednacine - in, out, kill, gen, vazece definicije, use-def/def-use lanci) - Zivost promenljivih (definicija, algoritam odredjivanja zivih promenljivih) - Oblik staticke jedinstvene dodele (SSA) - Lokalna optimizacija koda (definicija, najcesci oblici optimizacije) - Globalna optimizacija koda (definicija, primer - globalna propagacija konstanti) - Alokacija i dodela registara (graf zavisnosti, heuristike bojenja, prosipanje promenljivih u memoriju) - Izbor instrukcija (zadatak, sabloni, prekrivanje, pregled algoritama) - Rasporedjivanje instrukcija (zadatak, pregled algoritama) Dodatna pitanja za popravak ocene: - Pravila tipova, okruzenja tipova, podtipovi -- [Aik], 09-06, 09-07 - Jednostavan algoritam generisanja koda -- [ASU], 535-541 - Optimizacija petlji (invarijantna izracunavanja, premestanje koda, indukcione promenljive) -- [ASU], 638-648 - DAG reprezentacija osnovnih blokova (konstrukcija, primene, heuristicko rasporedjivanje) -- [ASU], 546-561 - Optimalno rasporedjivanje instrukcija i generisanje koda za drvo izraza -- [ASU], 561-565 - Generisanje koda dinamickim programiranjem -- [ASU], 567-572 - Operaciona semantika -- [Aik], 13-01, 13-02 - MIPS i MicroMIPS arhitekture -- [RTRK] - Objektno-orijentisani jezici -- [App, 299-311] - Funkcionalni jezici -- [App, 315-341]