30
Prevodjenje programskih jezika – beleˇ ske sa predavanja Uvod Prevodjenje programskih jezika – beleˇ ske sa predavanja Uvod Milan Bankovi´ c * Matematiˇ cki fakultet, Univerzitet u Beogradu Jesenji semestar 2020/21.

Prevodjenje programskih jezika bele ke sa predavanja Uvod

  • Upload
    others

  • View
    8

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Prevodjenje programskih jezika – beleske sapredavanja

Uvod

Milan Bankovic

*Matematicki fakultet,Univerzitet u Beogradu

Jesenji semestar 2020/21.

Page 2: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Uvod

Pregled

1 Uvod

2 Proces prevodjenja programa

3 Interpretacija i kompilacija

Page 3: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Uvod

Motivacija

Motivacija

Cime se bavimo?

Do sada ste naucili da programirate na programskim jezicimavisokog nivoa (C, Java, C++)

Naucili ste i kako racunar radi na niskom nivou (UOAR2), i nakoji nacin se sa njim moze komunicirati (masinski jezik,asembler)

Svaki program na visokom nivou se mora prevesti na masinskijezik koji procesor razume, kako bi mogao da se izvrsi

Ovaj deo je ostao nerazjasnjen: kako da npr. C programprevedemo na ekvivalentan asemblerski program?

Time se bavimo na ovom predmetu

Page 4: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Uvod

Sadrzaj predmeta

Sadrzaj predmeta

Teme kojima se bavimo

Uvod u teoriju formalnih jezikaRegularni izraziFormalne gramatikeKonacni automatiLeksicka analizaPotisni automatiSintaksna analiza (nanize i navise)Elementi semanticke analize

Teme kojima se ne bavimo

Optimizacija kodaGenerisanje kodaO tome cete uciti na predmetu Konstrukcija kompilatora

Page 5: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Uvod

Obaveze studenata

Obaveze studenata

Nastava

2 casa predavanja3 casa vezbi

Predispitne obaveze

Nema dok traje pandemija :)

Ispit

Prakticni ispit (60 poena, prag 20 poena)

vazi do prvog izlaska na teorijski ispit

Teorijski ispit (40 poena, prag 15 poena)

Page 6: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Proces prevodjenja programa

Pregled

1 Uvod

2 Proces prevodjenja programa

3 Interpretacija i kompilacija

Page 7: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Proces prevodjenja programa

O jezicima uopste

O jezicima uopste

Osnovne karakteristike jezika

Sintaksa jezika

Skup pravila koja definisu ispravne jezicke konstrukcije

Semantika jezika

Pravila koja definisu znacenje ispravnih jezickih konstrukcija

Kakvi jezici mogu biti?

Prirodni jezici (srpski, engleski, kineski,...)

Sintaksa nedovoljno precizno definisanaSemantika nije jednoznacna (postoje dvosmislene i besmislene recenice)

Formalni jezici (programski jezici, jezici za obelezavanje, jezicimatematcke logike, ...)

Sintaksa precizno definisana odgovarajucim formalizmom (gramatika,Bekus-Naurova notacija,...)Semantika jednoznacna (svaka ispravna konstrukcija ima jedinstvenoznacenje)

Page 8: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Proces prevodjenja programa

Opsta struktura prevodioca

Opsta struktura prevodioca

Delovi prevodioca

Prednji deo: obavlja etapu analize

Ulaz prednjeg dela je program na visem programskom jeziku(izvorni jezik)Izlaz prednjeg dela je stablo apstraktne sintakse sa pridruzenimsemantiskim informacijama

Zadnji deo: obavlja etapu sinteze

Ulaz zadnjeg dela je izlaz prednjeg delaIzlaz zadnjeg dela je program na jeziku niskog nivoa (objektnijezik; tipicno asemblerski jezik)

Page 9: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Proces prevodjenja programa

Etapa analize

Etapa analize

Iz cega se sastoji etapa analize?

Leksicka analiza

Razlaze izvorni kod programa na lekseme (,,reci” jezika)Primeri leksema su identifikatori, celobrojne konstante, kljucne reci, separatori,operatori, i td.Svaka leksema se klasifikuje po svojoj vrsti i zamenjuje odgovarajucim tokenom kojipredstavlja tu klasu (identifikator, celobrojna konstanta, itd.)Dobijeni niz tokena se prosledjuje sintaksnom analizatoru

Sintaksna analiza

Dobija na ulazu niz tokena i u njemu prepoznaje ispravne jezicke konstrukcije(,,recenice” jezika)Proverava da li je raspored tokena na ulazu u skladu sa sintaksnim pravilima jezikaPravila jezika najcesce su opisana u nekom formalnom sistemu (gramatike,Bekus-Naurova notacija)Na osnovu pravila jezika generise se stablo izvodenja, kao i apstraktno sintaksno stablo

Semanticka analiza

Razmatraju se dodatna jezicka pravila koja nije moguce opisati gramatikom (tipovi,dometi, prava pristupa, i sl.)Odgovarajuce semanticke informacije se pridruzuju cvorovima sintaksnog stabla i ono sepo potrebi modifikuje

Page 10: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Proces prevodjenja programa

Etapa analize

Primer – leksicka analiza

Primer

Ako na ulazu imamo:Povrsina = (OsnovicaA + OsnovicaB) * Visina / 2.0;

tada ce leksicki analizator redom prepoznati sledeci niz leksema:Povrsina, =, (, OsnovicaA, +, OsnovicaB, ), *, Visina, /, 2.0,;

Primetimo da se razmaci ignorisu. Ovaj niz leksema se konvertujeu sledeci niz tokena:<id>, <op_dodela>, <lz>, <id>, <op_sabiranje>, <id>, <dz>,<op_mnozenje>, <id>, <op_deljenje>, <realna_konstanta>,<tz>

Page 11: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Proces prevodjenja programa

Etapa analize

Primer – leksicka analiza

Primer

Ako na ulazu imamo:01pera01

tada ce leksicki analizator redom prepoznati sledeci niz leksema:01, pera01kom odgovara niz tokena:<oktalna_konstanta>, <id>

Primer

Ako na ulazu imamo:x+++y

tada ce leksicki analizator prepoznati sledeci niz leksema:x, ++, +, y(tzv. gramzivi algoritam, uzima najduzu mogucu leksemu kojuprepoznaje). Sa druge strane, ako imamo:x + ++y

tada imamo niz leksema:x, +, ++, y

Page 12: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Proces prevodjenja programa

Etapa analize

Primer – sintaksna analiza

Primer

Vratimo se na primer:Povrsina = (OsnovicaA + OsnovicaB) * Visina / 2.0;

i dobijeni niz tokena:<id>, <op_dodela>, <lz>, <id>, <op_sabiranje>, <id>, <dz>,<op_mnozenje>, <id>, <op_deljenje>, <realna_konstanta>, <tz>koji prosledjujemo sintaksnom analizatoru. Pretpostavimo da imamo sledecasintaksna pravila jezika:

Naredba ::= Izraz <tz>

Izraz ::= Izraz <op_sabiranje> Izraz

Izraz ::= Izraz <op_oduzimanje> Izraz

Izraz ::= Izraz <op_mnozenje> Izraz

Izraz ::= Izraz <op_deljenje> Izraz

Izraz ::= <lz> Izraz <dz>

Izraz ::= <id> <op_dodela> Izraz

Izraz ::= <id>

Izraz ::= <celobrojna_konstanta>

Izraz ::= <realna_konstanta>

Page 13: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Proces prevodjenja programa

Etapa analize

Primer – sintaksna analiza (nastavak)

Primer

Pomocu ovih pravila, od datog niza tokena se moze formirati sledece stabloizvodjenja:

Naredba

________/ \________

/ \

Izraz <tz>

_______/ | \____

/ | \

<id> <op_dodela> Izraz

_______/ | \________

/ | \

Izraz <op_deljenje> Izraz

______/ | \_____ |

/ | \ |

Izraz <op_mnozenje> Izraz <realna_konstanta>

___/ | \__ |

/ | \ |

<lz> Izraz <dz> <id>

___/ | \_______

/ | \

Izraz <op_sabiranje> Izraz

| |

<id> <id>

Page 14: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Proces prevodjenja programa

Etapa analize

Primer – sintaksna analiza (nastavak)

Primer

Apstrahujuci detalje konkretne sintakse, dobijamo sledece stablo apstraktne sintakse:

<op_dodela>

__________/ \_______

/ \

<id> <op_deljenje>

__________/ \_______

/ \

<op_mnozenje> <realna_konstanta>

_____/ \_______

/ \

<op_sabiranje> <id>

________/ \_____

/ \

<id> <id>

Page 15: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Proces prevodjenja programa

Etapa analize

Primer – sintaksna analiza

Primer

Naredba:if(x > y) max = x; else max = y;

je sintaksno ispravna konstrukcija u jeziku C. Sa druge strane:if)x > y) max = x; else max = y;

nije sintaksno ispravna konstrukcija, jer se, po pravilima jezika, nakontokena <if> mora nalaziti token <lz> (leva zagrada), a ne token <dz>

(desna zagrada). Slicno, deklaracija:int x[] = {1, 2, 3};

je sintaksno ispravna u C-u, dok deklaracija:int [] x = {1, 2, 3};

nije sintaksno ispravna u jeziku C, jer se po pravilima jezika udeklaratoru specifikator dimenzije niza navodi iza promenljive (ilinekog drugog slozenog deklaratora), a ne ispred.

Page 16: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Proces prevodjenja programa

Etapa analize

Tabela simbola

Tabela simbola

U fazi leksicke analize apstrahovali smo konkrente lekseme i zameniliih tokenimaOvo je zato sto u fazi sintaksne analize nije bitno da li jenpr. identifikator x ili y , vec je samo bitno da li identifikator moze dastoji na tom mestuU fazi semanticke analize (a i kasnije, u etapi sinteze) bice namveoma bitno koji konkretan identifikator stoji na kom mestuZbog toga se te apstrahovane informacije ne odbacuju, vec se cuvajuu tabeli simbolaOva tabela se inicijalizuje u fazi leksicke analize i dopunjuje seodgovarajucim informacijama u fazi semanticke analizeInformacije koje se pridrucuju identifikatorima u tabeli simbola sunpr. njihov tip i domet koji se odredjuje njihovom deklaracijomOve informacije se prosledjuju dalje zadnjem delu prevodioca (etapasinteze)

Page 17: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Proces prevodjenja programa

Etapa analize

Primer – semanticka analiza (nastavak)

Primer

Pretpostavimo u prethodnom primeru da su promenljive OsnovicaA, OsnovicaB iVisina deklarisane kao int promenljive, a Povrsina kao double promenljiva. U fazisemanticke analize ce se prepoznati da operator deljenja ima operande razlicitog tipa, tece se u stablo umetnuti operator konverzije int_u_double (implicitna konverzija):

<op_dodela>

__________/ \_______

/ \

<id> <op_deljenje>

__________/ \_______

/ \

<int_u_double> <realna_konstanta>

|

<op_mnozenje>

_____/ \_______

/ \

<op_sabiranje> <id>

________/ \_____

/ \

<id> <id>

NAPOMENA: Kod strogo tipiziranih jezika (poput Pascal-a), bice prijavljena semantickagreska.

Page 18: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Proces prevodjenja programa

Etapa analize

Uloge semantickog analizatora

Sta sve radi semanticki analizator?

Obradjuje naredbe deklaracija i informacije o tipovima promenljivih i funkcija smestau tabelu simbolaUtvrdjuje domete deklaracija, kao i prava pristupa u OOP jezicima (private,protected, public)Na osnovu prikupljenih informacija iz deklaracija proverava ispravnost upotrebeidentifikatora u razlicitim kontekstimaU programskim jezicima gde je to dozvoljeno, umece implicitne konverzije gde je tomoguceOdredjuje tipove slozenih izrazaProverava ispravnost funkcijskih poziva (s obzirom na tipove argumenata i tippovratne vrednosti)Proverava ispravnost upotrebe pojedinih naredbi u odredjenim kontekstima (poputbreak i continue u C-u)Proverava da li se tip izraza koji funkcija vraca (npr. naredbom return u C-u)poklapa sa deklarisanim povratnim tipom i po potrebi umece konverziju (ako jezik todozvoljava)U jezicima koji to omogucavaju, vrsi dedukciju tipova identifikatora (npr. u C++-u,Haskell-u itd.)...

Page 19: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Proces prevodjenja programa

Etapa analize

Primer – semanticka analiza

Primer

Pretpostavimo da u jezik C imamo izraz a+b pri cemu su promenljive a i bstrukturnog tipa. Ovaj izraz je sintaksno ispravan, ali je semanticki neispravan, jerstrukture nije moguce sabirati u jeziku C.

Primer

Pretpostavimo da u jeziku C imamo naredbu x = 3;, pri cemu deklaracijapromenljive x nije u dometu (ili ne postoji). Naredba je sintaksno ispravna, ali jesemanticki neispravna, jer se u C-u promenljive mogu koristiti samo u dometuodgovarajuce deklaracije.

Primer

Pretpostavimo da u jeziku Java imamo naredbu c.x = 5;, gde je c instanca klaseMojaKlasa, a x njen privatni clan tipa int. Ukoliko se naredba nalazi u metodi nekedruge klase, tada ce biti prijavljena greska, iako je naredba sintaksno ispravna.

Primer

Pretpostavimo da u jeziku C imamo naredbu continue; koja se ne nalazi unutarpetlje. Iako je ovo sintaksno ispravna naredba (u skladu sa pravilima gramatikejezika C), na tom mestu ona semanticki nema smisla, te ce semanticki analizatorprijaviti gresku.

Page 20: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Proces prevodjenja programa

Etapa analize

Primer – semanticka analiza

Primer

Naredba:if(x == y) continue;

je sintaksno ispravna konstrukcija u jeziku C, iako ne mora biti isemanticki ispravna (jer se naredba continue ne moze koristiti vanpetlje). Sa druge strane, naredba:if(x = y) x++;

je sintaksno (cak i semanticki) ispravna konstrukcija u jeziku C,iako obicno nije ono sto zelimo.

Page 21: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Proces prevodjenja programa

Etapa sinteze

Etapa sinteze

Faze u etapi sinteze

Generisanje koda na medjujeziku

Ovaj jezik je blizak asembleru, ali je nezavisan od konkretnog hardvera i pogodanje za optimizacijuTipicno je u pitanju troadresni kod ili stek-zasnovani kod

Optimizacija koda

Evaluacija konstantnih izrazaEliminacija neproduktivnog kodaOptimizacija petljiEliminacija skupih operacijaEliminacija zajednickih podizrazaEliminacija repne rekurzije...

Generisanje objektnog koda

Alokacija registaraOptimizacija zavisna od masine

Page 22: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Proces prevodjenja programa

Etapa sinteze

Primer

Primer

Podsetimo se dobijenog stabla apstraktne sintakse u nasem primeru:

<op_dodela>

__________/ \_______

/ \

<id> <op_deljenje>

__________/ \_______

/ \

<int_u_double> <realna_konstanta>

|

<op_mnozenje>

_____/ \_______

/ \

<op_sabiranje> <id>

________/ \_____

/ \

<id> <id>

Page 23: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Proces prevodjenja programa

Etapa sinteze

Primer (nastavak)

Primer

Na osnovu ovog stabla, polazeci od listova ka korenu, generisemo kod namedjujeziku poput sledeceg:

t1 := OsnovicaA INT_ADD OsnovicaB

t2 := t1 INT_MUL Visina

t3 := INT_TO_REAL t2

t4 := t3 REAL_DIV 2.0

Povrsina := t4

Tokenima <id> i <realna_konstanta> u listovima stabla pridruzuju seidentifikatori i konstante koje im odgovaraju u tabeli simbola. Promenljivet1, t2, t3, t4 su pomocne promenljive koje odgovaraju vrednostimaunutrasnjih cvorova stabla. Svakom unutrasnjem cvoru odgovara jednaoperacija u medjukodu. Izbor operacije zavisi od tipa vrednosti na koje seprimenjuje, sto opet znamo na osnovu informacija prikupljenih u fazisemanticke analize.

Page 24: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Proces prevodjenja programa

Etapa sinteze

Primer (nastavak)

Primer

Nakon optimizacije, gornji medjukod se prevodi u kod na konkretnom asemblerskomjeziku. U zavisnosti od arhitekture, svakoj naredbi medjukoda moze odgovarati jednaili vise instrukcija asemblerskog jezika. Veoma bitan postupak ovde je alokacijaregistara, kojima se promenljivama iz prethodnog koda pridruzuju registri. Cilj je dasto vise promenljivih budu u registrima, kako bi se smanjio broj pristupa memoriji.Na x86-64 arhitekturi, gornji kod bi se mogao prevesti na sledeci nacin:

two: .double 2.0

mov eax, OsnovicaA

add eax, OsnovicaB

imul dword ptr Visina

cvtsi2sd xmm0, eax

divsd xmm0, two

movsd Povrsina, xmm0

Page 25: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Interpretacija i kompilacija

Pregled

1 Uvod

2 Proces prevodjenja programa

3 Interpretacija i kompilacija

Page 26: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Interpretacija i kompilacija

Interpretacija i kompilacija

Kompilacija

Prethodno opisani postupak se naziva kompilacijaUlaz kompilatora (ili kompajlera) je program na izvornom jeziku (izvorni kod)Izlaz kompilatora je program na objektnom jeziku (objektni kod)Kompilator ne izvrsava program, vec generise semanticki ekvivalentan programna drugom jeziku (prevod izvornog programa)

Interpretacija

Interpretacija podrazumeva izvrsavanje operacija koje u semantickom smisluodgovaraju naredbama datog programa na odredjenoj platformiUlaz interpretatora je program koji treba izvrsiti, kao i ulaz na koji taj programtreba primenitiIzlaz interpretatora je izlaz programa za dati ulazInterpretator ne generise kod na drugom jeziku, vec samo tumaci naredbeizvornog programa i preduzima akcije kojima se simulira njihov efekat na datojplatformiZa razliku od kompilacije, interpretacija ukljucuje samo etapu analize, doketapa sinteze ne postoji

Page 27: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Interpretacija i kompilacija

Interpretacija i kompilacija

Jos o interpretaciji

Prethodna definicija interpretatora je veoma opsta i ukljucuje mnogo razlicitihstvariNa primer, procesor se moze smatrati (hardverskim) interpretatorom masinskogjezikaU tom slucaju, platforma na kojoj procesor izvrsava semanticke akcije kojeodgovaraju masinskim instrukcijama je putanja podataka u njemu(engl. datapath)U klasicnom smislu, (softverski) interpretator predstavlja program koji analiziranaredbe nekog drugog programa, tumaci ih i simulira njihov efekat nahardverskoj arhitekturi na kojoj se program izvrsavaInterpretator implementira etapu analize izvornog programa, a nakon sto sedobije sintaksno stablo, umesto generisanja koda vrsi se simulacijaizracunavanja odgovarajuce programske konstrukcijeInterpretator u tabeli simbola odrzava i vrednosti promenljivih koje se menjajutokom izvrsavanja naredbi programaU nasem primeru, interpretator bi, prateci stablo izrazaPovrsina = (OsnovicaA + OsnovicaB) * Visina / 2.0, a na osnovutrenutnih vrednosti promenljivih u tabeli simbola, izracunao vrednost desnestrane i upisao je u tabelu simbola kao novu vrednost promenljive Povrsina

Page 28: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Interpretacija i kompilacija

Interpretacija i kompilacija

Kompilacija

Primeri tipicnih kompilatorskih jezika su C, C++, Fortran, i sl.Programi koji se kompiliraju prevode se na masinski jezik, a onda sedirektno izvrsavaju na procesoru (potencijalno veliki broj puta)Ponovno prevodjenje je neophodno samo ako se nesto menja u izvornomprogramuKompilirani programi su obicno znatno brzi od interpretiranihNedostatak je cesto manjak fleksibilnosti (npr. kompilatorski jezici suobicno staticki tipizirani)

Interpretacija

Primeri tipicnih interpretatorskih jezika su razni skript jezici: Perl, PHP,Python, JavaScript, i sl.Interpretacija je drasticno sporija od direktnog izvrsavanja prevedenogkoda (program se svaki put iznova analizira)Interpretatorski programski jezici su cesto fleksibilniji i jednostavniji zaprogramiranjeZbog toga su narocito pogodni za brzo resavanje rutinskih zadatakaUsled napretka interpretatora, u novije vreme interpretatorski jezici sekoriste i kod obimnijih softverskih projekataIpak, ograniceni su na primene kod kojih brzina nije tako bitna

Page 29: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Interpretacija i kompilacija

Interpretacija i kompilacija

I jos malo o interpretaciji

Postoje i jezici kod kojih se koristi hibridni pristup:

program se sa izvornog jezika prevodi na neki medjujezik i generise seodgovarajuci medjukod koji se cuva na diskuposebnim interpretatorom se vrsi interpretacija tog medjukoda kad god sepokrene program

Tipicni primeri ovakvih jezika su Java i C#:

Java programi se prevode na medjukod koji se naziva jos i Java bajtkodJava virtuelna masina (JVM) se koristi da se prilikom pokretanja dobijenogprograma interpetira bajtkod na procesoru racunaraSlicno, C# programi se prevode na jezik poznat kao CIL (Common IntermediateLanguage).Interpretator CIL jezika koji je deo .NET okruzenja intepretira ovako dobijeneprograme i izvrsava ih na procesoru racunara

Cak i klasicni interpretatorski jezici (poput PHP-a ili Perl-a) danas uglavnomkoriste kombinaciju interpretacije i kompilacije, tako sto se kod interno prevodina neki medjujezik koji se zatim interpretiraOvakve tehnike omogucavaju veci stepen optimizacije koda i poboljsavajuefikasnost interpretacije

Page 30: Prevodjenje programskih jezika bele ke sa predavanja Uvod

Prevodjenje programskih jezika – beleske sa predavanja Uvod

Interpretacija i kompilacija

Zakljucak

Cime se mi bavimo?

U okviru ovog kursa detaljno se obradjuju faze analize koda

Znanje steceno na ovom predmetu je, stoga, dovoljno da sekonstruisu jednostavni interpretatori

Etapa sinteze se ne obradjuje u okviru ovog predmeta

Otuda, na ovom predmetu necete nauciti da konstruisetekompilatore

Predmet Konstrukcija kompilatora se dataljnije bavi etapomsinteze