Prevođenje programskih jezika

Opis predmeta

Proučavaju se procesi postupnog hijerarhijskog prevođenja korisničkih jezika, viših programskih jezika i jezika hijerarhije virtualnih strojeva u ciljni jezik odabranog računalnog sustava. Opisuju se tehnike i načela procesa prevođenja jezika potrebnih u suvremenim sveprisutnim, svakidašnjim i nevidljivim raspodijeljenim računalnim sustavima. Daje se kratki pregled i povijest programskih jezika i jezičnih procesora. Prevođenje jezika objašnjava se osnovnim procesima analize izvornog i sinteze ciljnog programa. Uključene su osnovne faze analize (leksička, sintaksna i semantička analiza) i sinteze (generiranje međukoda, generiranje ciljnog programa i optimiranje). Razmatra se priprema i potpora izvođenju programa. Proučavaju se generatori jezičnih procesora.

Opće kompetencije

Predmet osposobljava studente za uporabu analiza-sinteza modela oblikovanja, koji je široko primjenljiv u programskom inženjerstvu. Naučeni algoritmi, strukture podataka i postupci prevođenja praktično su uporabljivi u gotovo svim računalnim aplikacijama. Studenti će biti sposobni graditi učinkovite programske proizvode optimalno koristeći jezične prevoditelje i druge programske alate. Nadalje, studenti će moći oblikovati i programski ostvariti vlastite jezične prevoditelje za potrebe krajnjih korisnika.

Ishodi učenja

  1. raščlaniti postupak oblikovanja računalnog sustava na analizu problema i sintezu rješenja
  2. opisati leksička, sintaksna i semantička svojstva programskog jezika primjenom formalne gramatike
  3. usporediti i odabrati formalnu gramatiku optimalne složenosti za potrebe opisa programskog jezika
  4. usporediti i odabrati postupak parsiranja optimalne složenosti za potrebe prevođenja programskog jezika
  5. razviti prevoditelj programskog jezika na osnovi formalnog opisa jezika
  6. dizajnirati proces prevođenja programskog jezika koji učinkovito koristi sredstva procesora i memorijske hijerarhije

Oblici nastave

Predavanja

Predavanja popraćena PowerPoint projekcijom, praktični primjeri primjene formalnih jezika, automata i gramatika u izgradnji jezičnog procesora

Provjere znanja

Dva pismena ispita

Auditorne vježbe

Rješavanje zadataka popraćeno PowerPoint projekcijom, priprema za pismene provjere znanja

Laboratorijske vježbe

Izrada jezičnog procesora za pojednostavljeni programski jezik sličan jeziku C. Samostalni rad ili rad u maloj grupi studenata. Online predaja i automatsko ocjenjivanje studentskih rješenja.

Konzultacije

Pojedinačne konzultacije s nastavnicima i asistentima organiziraju se po potrebi na zahtjev studenta.

Način ocjenjivanja

Kontinuirana nastava Ispitni rok
Vrsta provjere Prag Udio u ocjeni Napomena / komentar Udio u ocjeni
Laboratorijske vježbe 50 % 40 % 50 % 0 %
Sudjelovanje u nastavi 0 % 5 % 0 % 0 %
Međuispit: Pismeni 0 % 30 % 0 %
Završni ispit: Pismeni 0 % 30 %
Ispit: Pismeni 50 % 100 %
Napomena / komentar

Kontinuirana nastava: Prag (Međuispit: Pismeni + Završni ispit: Pismeni + Prisutnost i sudjelovanje u nastavi) = 50 %

Tjedni plan nastave

  1. Osnovne faze procesa prevođenja: analiza i sinteza; Analiza izvornog programa: leksička, sintaksna i semantička analiza; ([1], str. 1-12) Sinteza ciljnog programa: generiranje međukôda, optimiranje i generiranje ciljnog programa; ([1], str. 13-19)
  2. Nadziranje pogrešaka tijekom prevođenja; Ocjena uspješnosti procesa prevođenja; Razredba jezičnih prevoditelja; ([1], str. 19-31) Leksička analiza; Uloga i podatkovna struktura leksičkog analizatora; Suradnja sa sintaksnim analizatorom; Nejednoznačnost u leksičkoj analizi; Prilagodba zapisa znakova, leksičke jedinke, leksičke pogreške i postupci oporavka od pogreške; ([1], str. 44-55)
  3. Generatori leksičkog analizatora; Program Lex; ([1], str. 56-70) Sintaksna analiza; Uloga i podatkovna struktura sintaksnog analizatora; Jezici za definiranje sintaksnih pravila; Jednostavni postupci parsiranja: parsiranje Co-No tablicom; ([1], str. 71-84) Auditorne vježbe: leksička analiza;
  4. Parsiranje od vrha prema dnu; S, Q i LL(1) gramatika; Određivanje PRIMIJENI skupova; ([1], str. 84-103) Određivanje PRIMIJENI skupova (nastavak); Prilagodba produkcija LL(1)-gramatici; Nadziranje pogrešaka; Parsiranje od dna prema vrhu; ([1], str. 103-121)
  5. Tehnike parsiranja od dna prema vrhu: Pomakni-Pronađi, Pomakni-Reduciraj i prednost operatora; ([1], str. 121-137) LR parsiranje; ([1], str. 138-147)
  6. LR parsiranje (nastavak); Generatori parsera; Program Yacc; Semantička analiza; Uloga i formalni modeli semantičkog analizatora; Zadaci semantičkog analizatora; ([1], str. 147-166) Auditorne vježbe: sintaksna analiza;
  7. Zadaci semantičkog analizatora (nastavak); Sintaksom upravljana semantička analiza: atributna prijevodna gramatika; ([1], str. 167-180) L-atributna prijevodna gramatika; Potisni automat za L-atributnu prijevodnu gramatiku; ([1], str. 180-190)
  8. Prvi međuispit: leksička, sintaksna i semantička analiza;
  9. Potisni automat za L-atributnu prijevodnu gramatiku (nastavak); Metoda rekurzivnog spusta za L-atributnu prijevodnu gramatiku; Sustav obilježja; ([1], str. 190-200) Provjera vrijednosti obilježja; Jednakost vrijednosti obilježja; Potpora izvođenju ciljnog programa; ([1], str. 200-223)
  10. Apstraktni tipovi podataka izvornog jezika i podatkovni objekti ciljnog jezika; Tijek izvođenja programa zasnovanog na procedurama; Organizacija i postupci dodjele memorije; ([1], str. 223-233) Pristup nelokalnim imenima; ([1], str. 233-242)
  11. Razmjena ulazno/izlaznih parametara procedura; Generiranje međukoda; Razine i oblici međukôda; ([1], str. 243-256) Razine i oblici međukôda (nastavak); Sintaksom vođeno generiranje međukôda; Generiranje ciljnog programa; Struktura generatora ciljnog programa; ([1], str. 256-265)
  12. Struktura generatora ciljnog programa (nastavak); ([1], str. 265-276) Algoritmi generatora ciljnog programa; Generatori generatora ciljnog programa; ([1], str. 276-285) Drugi međuispit: leksička analiza, sintaksna analiza;
  13. Priprema ciljnog programa za izvođenje; Spremi-i-pokreni jezični procesori; Generatori izvodivog i premjestivog ciljnog programa; Generatori zasebnih dijelova programa; Program punitelj i program povezivač; Optimiranje; Analiza izvođenja programa; ([1], str. 286-297) Analiza izvođenja programa (nastavak); ([1], str. 297-305)
  14. Strojno zavisno i strojno nezavisno optimiranje; Jednostavni postupak optimiranja zasnovan na prozorčiću; Pregled ostalih postupaka optimiranja; ([1], str. 305-317) Auditorne vježbe: semantička analiza, generiranje ciljnog programa, optimiranje;
  15. Završni ispit: cjelokupno gradivo predmeta;

Studijski programi

Obradba informacija -> Računarstvo (Modul)

Programsko inženjerstvo i informacijski sustavi -> Računarstvo (Modul)

Računarska znanost -> Računarstvo (Modul)

Telekomunikacije i informatika -> Računarstvo (Modul)

Za upis predmeta treba položiti predmete

Literatura

S. Srbljić (2007.), Prevođenje programskih jezika, Element Zagreb
D. Grune, H. E. Bal, C. J. H. Jacobs, K. G. Langendoen (2000.), Modern Compiler Design, Wiley
A. V. Aho, R. Sethi, J. D. Ullman (1986.), Compilers: Principles, Techniques, and Tools, Addison-Wesley
K. Cooper, L. Torczon (2003.), Engineering a Compiler, Morgan Kaufmann
S. S. Muchnick (1997.), Advanced Compiler Design and Implementation, Morgan Kaufmann
(.), Algorithms for Compiler Design O. G. Kakde Charles River Media 2002,