Interpretacija programa

Obavijesti

O kolegiju (iz akademske godine 2018/19.)

Nastavni materijali

Zadaci za vježbu

FAQ

Zašto Interpretacija programa ne koristi generatore lexera i parsera (flex, bison, ...)?
Jer je Python bolji jezik za opisivanje algoritama nego bilo koji od tih jezika. Implementirajući lexer i parser naučit ćete kako lexer i parser funkcioniraju. Programirajući bison naučit ćete kako programirati bison, ali reduce/reduce conflict će vam i dalje biti misterija. Neki ljudi s puno iskustva u dizajnu programskih jezika se slažu sa mnom.
Zašto ne koristimo error recovery nego prekinemo obradu nakon prve greške?
Zato što je ponovo pokretanje kompajlera (ili bilo kakvog analizatora) nakon ispravljanja pojedine greške najčešće brži način rada. U samom početku rada s npr. gccom studenti brzo nauče da gledaju samo prvu poruku o grešci, a ostale zanemare. (U davna vremena batch kompajliranja bez interakcije s korisnikom, nije bilo tako. Ali ta vremena su daleko iza nas.)
Zašto Token nije/jest hashable?
(U novijim verzijama biblioteke jest, ali ostatak odgovora i dalje vrijedi.) Jer najčešće kad mislite da želite Token koristiti kao ključ u rječnicima, zapravo želite koristiti njegovu vrijednost. Token je zadan tipom i sadržajem, a za imalo kompliciranije tokene, vrijednost nije injektivna funkcija ta dva argumenta. Recimo, tokeni različitih sadržaja 255 i 0xff imaju istu vrijednost u većini modernih jezika, pa nema smisla jednog od njih koristiti kao ključ u npr. nekoj implementaciji polja (vrijednost neće biti pronađena pod onim drugim).