Prevođenje programskih jezika

I smer

Kurs Prevođenje programskih jezika je obavezan kurs na trećoj godini I smera u okviru kojeg se proučavaju osnovni koncepti prevođenja programskih jezika i leksičke analize:

  • Etape i faze procesa prevođenja programskih jezika
  • Regularni jezici i konačni automati
  • Leksička analiza. Alati Lex/Flex
  • Konteksno-slobodni jezici i potisni automati
  • Sintaksna analiza naniže. LL gramatike. Rekurzivni spust
  • Sintaksna analiza naviše. LR gramatike. Alat Yacc/Bison
  • Atributske gramatike. Uvod u semantičku analizu.
U okviru studija postoje i drugi kursevi koji se bave bliskim temama.

Predmetni nastavnici:

Asistenti:

NASTAVA

Nastava se sastoji iz dva časa predavanja i tri časa vezbi nedeljno.

Predmet vredi 6 ESPB.

PREDISPITNE OBAVEZE

  • Aktivno prisustvo na časovima (5 + 5 poena)
  • Testovi na predavanjima (10 poena)
Na predispitnim obavezama nema pragova.

ISPIT

  • Praktični ispit (55 poena, prag 22 poena)
  • Teorijski ispit (35 poena, prag 14 poena)

Da bi student mogao da izadje na teorijski deo ispita, neophodno je da prethodno ostvari prag na praktičnom delu.

Polozen praktični deo ispita važi do kraja školske godine, nezavisno od izlazaka na teorijski deo (tj. čak i ako student padne na teorijskom delu ispita, praktični mu i dalje važi). Ukoliko student nije zadovoljan ostvarenim rezultatom na praktičnom delu ispita može izaći ponovo na praktični, pri čemu mu se prethodni rezultat automatski poništava.

Za sve nejasnoće obratiti se nastavniku na mejl.

Nastavne teme po časovima

  • Proces prevodjenja programskih jezika. Kompilacija i interpretacija.
  • Azbuka, reč, jezik. Operacije nad jezicima. Regularni jezici i regularni izrazi.
  • Ograničenja regularnih jezika. Lema o razrastanju (pumping lemma). Kontekstno slobodni jezici i kontekstno slobodne gramatike. Stablo izvodjenja. Jednoznačne i višeznačne gramatike.
  • Transformacije gramatika. Eliminacija nekorisnih simbola. Eliminacija ε-pravila. Eliminacija jednostrukih pravila. Eliminacija leve rekurzije.
  • Konačni automati. Definicija i primeri. Deterministički konačni automati. Eliminacija ε-prelaza. Upotpunjavanje i determinizacija konačnog automata. Konstrukcija po podskupovima. Osobine prepoznatljivih jezika. Presek, unija, razlika, komplement. Nadovezivanje i Klinijevo zatvorenje.
  • Konstrukcija Tompsona i Gluškova. Minimizacija konačnog automata. Murov algoritam.
  • Algoritam eliminacije stanja. Klinijeva teorema.
  • Potisni automati. Deterministički potisni automati.
  • Sintaksna analiza naniže. LL(1) gramatike. Tablice LL(1) analize.
  • Sintaksna analiza naviše. LR(1) i SLR(1) gramatike. Automat LR-analize. Tablice SLR(1) analize.
  • Elementi semantičke analize. Atributske gramatike. Sintetizovani i nasledjeni atributi. Primeri.

Materijali sa predavanja

Nastavne teme

  • Regularni izrazi.
  • Programski jezik Python. Regularni izrazi u programskom jeziku Python. Leksička analiza.
  • Konačni automati. Implementacija konačnih automata u programskom jeziku Python.
  • Generator leksičkih analizatora - flex.
  • Sintaksna analiza. Gramatike. Transformacija gramatika.
  • Sintaskna analiza na niže. LL gramatike. Skupovi First i Follow. Rekurzivni spust. Potisni automati.
  • Sintaskna analiza na više. LR gramatike. Action i goto tablice.
  • Generator sintaksnih analizatora - yacc/bison.

Materijali sa časova

Ispitni zadaci

Korisni linkovi

Literatura za predavanja

  • Duško Vitas. Prevodioci i interpretatori.
  • Alfred Aho, Ravi Sethi, Jeffrey Ullman: Compilers: principles, techniques, and tools.
  • Alfred Aho, Jeffrey Ullman: The theory of parsing, translation and compiling.
  • Nikola Ajzenhamer. Anja Bukurov. Prevodjenje programskih jezika

Literatura za vežbe

Zbirni rezultati ispita u jan2 roku (II tok)

Zbirni rezultati ispita u jan2 roku za drugi tok mogu se videti ovde. Uvid u radove mejlom. Upis ocena u terminu mojih predavanja u drugom semestru.

20.02.2024.

Zbirni rezultati ispita u jan2 roku (I tok)

Zbirni rezultati ispita u jan2 roku za prvi tok mogu se videti ovde. Uvid u radove mejlom. Upis ocena u terminu mojih predavanja u drugom semestru.

15.02.2024.

Prijava za teorijski deo ispita - januar2

Molimo studente koji planiraju da izlaze na teorijski deo ispita u januar2 roku da se obavezno prijave putem ankete. Takodje, molimo studente koji ne planiraju da izlaze da se ne prijavljuju. Rok za prijavu je nedelja, 11.2.2024. u 23:59h.

07.02.2024.

Praktični ispit Januar 2 - Rezultati

Rezultate praktičnog ispita u roku Januar 2 možete pogledati u sledećoj tabeli. Uvid u radove je mejlom do 06.02.2024. u 20h.

04.02.2024.

Praktični ispit Januar 2 - Raspored polaganja

Raspored polaganja možete pogledati u sledećoj tabeli.

Dođite desetak minuta ranije na mesto polaganja da bismo poceli na vreme.

29.01.2024.

Praktični ispit Januar 2 - Anketa

Molimo vas da popunite sledeću anketu ako planirate da izađete na praktični ispit iz Prevođenja programskih jezika u roku Januar 2. Anketu popunite samo ako zaista želite da polažete ispit, jer nam treba puno resursa koje moramo pazljivo da planiramo. Ukoliko ste se prijavili putem ankete, ali se u međuvremenu predomislite, javite svoju odluku Vladimiru Kuzmanoviću.

Rok za popunjavanje ankete je utorak 29.01.2024. u 20h. Raspored sedenja bice istaknut na stranici predmeta u utorak 29.01.2024. u 21h. Hvala vam unapred.

28.01.2024.

Zbirni rezultati ispita u jan1 roku (I tok)

Zbirni rezultati ispita u jan1 roku za prvi tok mogu se videti ovde. Uvid u radove mejlom. Upis ocena u terminu teorijskog dela ispita u jan2 roku.

25.01.2024.

Rezultati teorijskog dela ispita za drugi tok - januar1

Ukupni rezultati sa januarskog1 ispitnog roka za drugi tok nalaze se ovde. Uvid u radove i upis ocene u indeks (ko želi) je sutra, 26.01 u 11h na Trgu. Moguć je uvid u radove i mejlom.

25.01.2024.

Prijava za teorijski deo ispita - januar1

Molimo studente koji planiraju da izlaze na teorijski deo ispita u januar1 roku da se obavezno prijave putem ankete. Takodje, molimo studente koji ne planiraju da izlaze da se ne prijavljuju. Rok za prijavu je subota, 20.1.2024. u 23:59h.

18.01.2024.

Drugi tok -- predispitne obaveze (zbirno)

Studenti drugog toka mogu pogledati ukupni broj osvojenih poena na predispitnim obavezama (prisustvo na predavanjima + prisustvo na vežbama + moodle testovi) u ovoj tabeli.

Molimo studente da pažljivo pogledaju svoje poene i hitno jave profesoru Mirku mejlom ako uoče neku grešku.

16.01.2024.

Prvi tok -- predispitne obaveze (zbirno)

Studenti prvog toka mogu pogledati ukupni broj osvojenih poena na predispitnim obavezama (prisustvo na predavanjima + prisustvo na vežbama + moodle testovi) u ovoj tabeli.

Molimo studente da pažljivo pogledaju svoje poene i hitno jave profesoru Milanu mejlom ako uoče neku grešku.

15.01.2024.

Praktični ispit Januar 1 - Rezultati

Rezultate praktičnog ispita u roku Januar 1 možete pogledati u sledećoj tabeli. Uvid u radove mejlom do utorka 16.01.2024. u 20h.

U tabeli sa rezultatima su i poeni sa prisustva. Ukoliko postoji neka greška u poenima, molimo da ih prijavite asistentu kod kojeg ste slušali vežbe zaključno sa utorkom 16.01.2024. u 20h. Naknadne prijave neće se razmatrati.

14.01.2024.

Praktični ispit Januar 1 - Raspored polaganja

Raspored polaganja možete pogledati u sledećoj tabeli.

Dođite desetak minuta ranije na mesto polaganja da bismo poceli na vreme.

09.01.2024.

Praktični ispit Januar 1 - Anketa

Molimo vas da popunite sledeću anketu ako planirate da izađete na praktični ispit iz Prevođenja programskih jezika u roku Januar 1. Anketu popunite samo ako zaista želite da polažete ispit, jer nam treba puno resursa koje moramo pazljivo da planiramo. Ukoliko ste se prijavili putem ankete, ali se u međuvremenu predomislite, javite svoju odluku Vladimiru Kuzmanoviću.

Rok za popunjavanje ankete je utorak 9.1.2024. u 20h. Raspored sedenja bice istaknut na stranici predmeta u utorak 9.1.2024. u 21h. Hvala vam unapred.

08.01.2024.

Termini teorijskog dela ispita u januarskim rokovima

Teorijski deo ispita u januarskim rokovima biće organizovan u sledećim terminima:

  • Januar 1: Ponedeljak, 22.01. u 13h na Trgu
  • Januar 2: Utorak, 13.02. u 11h na Trgu

28.12.2023.

Dodatni čas vežbi - 3i2

Dodatni čas vežbi iz PPJ održaće se onlajn putem webex-a u nedelju 24.12.2023. sa početkom u 10h. Nastavu možete da pratite pomoću sledećeg linka. Šifra za pristup nastavi je PPJ2023.

23.12.2023.

Struktura praktičnog ispita

Praktični ispit iz PPJ obuhvata sledeće oblasti:

  • Leksička analiza (Python, Flex)
  • Sintaksna analiza naniže (rekurzivni spust, potisni automat)
  • Sintaksna analiza naviše (Flex, Bison, C++ - interaktivni parseri, izgradnja sintaksnog stabla)
Glavni deo ispita je sintaksna analiza naviše. Ukoliko zadatak na ispitu zahteva izgradnju sintakstnog stabla, to će biti jedini zadatak na ispitu. Ukoliko zadatak zahteva pisanje interaktivnog parsera, pored njega dolazi još jedan zadatak koji obuhvata nešto od preostalog gradiva.

23.12.2023.

3i2

Časovi predavanja iz PPJ za grupu 3i2 neće biti održani u utorak, 21.11.2023. Termin nadoknade biće dogovoren na časovima nedelju dana kasnije.

16.11.2023.

3i2b - Vežbe

Vežbe iz PPJ za grupu 3i2b trajno će se držati četvrtkom od 15-18h u učionici JAG2.

18.10.2023.

3i2a - Vežbe

Vežbe iz PPJ za grupu 3i2a trajno će se držati ponedeljkom od 13-16h u učionici JAG1.

15.10.2023.

3i2b - Vežbe 12.10.

U četvrtak 12.10.2023. vežbe iz PPJ za grupu 3i2b držaće se od 15-18h u učionici JAG2.

11.10.2023.

Moodle kurs

Molimo sve studente da se što pre upišu na moodle kurs "Prevodjenje programskih jezika 2023/24" na fakultetskoj moodle platformi. Lozinku za upis na kurs ste dobili na predavanjima (ko nije bio na predavanjima neka se raspita kod kolega ili neka se obrati predmetnom nastavniku mejlom).

Ukoliko do sada niste pristupali novoj moodle platformi fakulteta, možete pogledati uputstvo na veb strani računarske laboratorije.

Svi studenti koji budu imali bilo kakav problem sa prijavom na moodle ili upisom kursa neka se što pre jave mejlom kako bismo to razrešili (poslati mejl obojici nastavnika).

10.10.2023.

3i2a - Vežbe 09.10.

U ponedeljak 09.10.2023. vežbe iz PPJ za grupu 3i2a držaće se od 13-16h u učionici JAG1.

08.10.2023.

Početak školske godine

Nastava iz Prevodjenja programskih jezika (PPJ) počinje 2.10.2023. po rasporedu časova koji je objavljen na veb strani Fakulteta.

Sve informacije vezane za predmet u toku semestra i kasnije tokom ispitnih rokova će se nalaziti isključivo na ovoj stranici.

30.09.2023.

Matematički fakultet, Univerzitet u Beogradu
školska 2019/20. godina