kkSkripta

Description
kk

Please download to get full document.

View again

of 25
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Information
Category:

Documents

Publish on:

Views: 7 | Pages: 25

Extension: PDF | Download: 0

Share
Transcript
  1. Kratak opis svih faza kompilacije (prikaz kroz primer) Programski prevodilac ili jezicki procesor je program koji cita, obraduje i prevodi kod I na neki nacin omogucava izvrsavanje programa. Svi programski prevodioci dele se u dve grupe:  ✗ Kompilatori , kod kojih je jasna razlika izmedu faze prevodenja i faze izvrsavanja. Koriste se, na primer, u programskom jeziku C.  ✗ Interpretatori , kod kojih se navedene dve faze mesaju i ne postoji materijalizacija prevoda, tj. ne postoji izvrsni kod koji se izvrsava vec se uvek cita ceo izvorni kod ili medukod, zavisno od jezika!. Koriste se, na primer, u avascript jeziku.Sve faze kompilacije mogu se podeliti u dve etape: ã #tapa analize:prednji deo prevodioca bavi se analizom, odnosno, velike delove koda razbija na manje fragmente. Prednji deo je vezan za ulazni jezik, tj.visi programski jezik. ã #tapa sinteze:zadnji deo prevodioca bavi se sintezom, odnosno, od malih fragmenata pravi jedinstveni izlaz. Kod zadnjeg dela je bitan izlazni jezik, koji je najcesce asembler, ali je bitna i arhitektura, okruzenje pod kojim se vrsi sinteza zbog optimizacije, itd.Iako su sve faze kompilacije odvojene na ove dve velike faze, ipak one nisu u potpunosti izolovani entiteti. $apomenimo da nije nepoznato koriscenje prednjeg dela sa nekim delom zadnjeg dela na primer, analiziranje C koda se vrsi na isti nacin bez obzira na kojojse platformi kod kompilira, ali se koriste razliciti zadnji delovi za%inu&, 'indo(s, i sl! ili zadnjeg dela sa nekim delom prednjeg dela na primer, 'indo(s)ov .$#* dozvoljava pisanje koda u C+, isual -asic i isual C, i za njih ima razlicite prednje delove, ali svi oni se apstrahuju na zajednicki medukod koji se dalje sintetise na isti nacin!.*akode, neko se moze zapitati u kom jeziku programiramo kompilator. *reba znati da efikasnost kompilatora ne utice na kompilaciju. Sto jekompilator bolji, on mora vise posla da uradi tj. vise vremena da potrosi! prilikom kompilacije, ali su zato programi koje dobijamo brzi. /akle, to ne znaci da je neophodno da kompilatore pisemo u brzim programskim jezicima. Faze analize:  0no sto karakterise etapu analize jeste sto je ista i za kompilatore i za interpretatore. 0na je veoma dobro opisana u teoriji. /eli se natri faze:1. %eksicki analizator2. Sintaksicki analizator3. Semanticki analizator Osnovno o fazama analize: 4apocnimo poglavlje o etapi analize sledecim primerom: Pretpostavimo da imamo deo programa napisanog u programskom jeziku Pascal u kojem pise: & :5 2671  38 Pogledajmo sta ce se desavati u svakoj od faza analize pri analiziranju ovog dela koda Leksicka analiza:  0snovno o leksickoj analizi %eksicki analizator cita karakter po karakter iz ulazne struje karaktera i identifikuje male, nedeljive celine koje nazivamo lekseme. %ekseme koje mozemo izdvojiti iz primera su sledece: & :5 2 6 71  3 8 .Kada se identifikuju, svakoj od leksema se pridruzuje odgovarajuca leksicka kategorija, kao i odgovarajuca oznaka kategorije koja je pridruzena leksemi. *a oznaka naziva se token. Primeri tokena su identifikator, operator, separator itd, sto se moze zapisati:&, 71 9 identifikatori :5, 6,  9 operatori2, 3 9 brojevni literali8 9 separator $apomenimo da iako leksicki analizator barata sa tokenima, on ne vodi racuna o tome da li je, na primer, neki identifikator promenljiva, funkcija, struktura, polje itd. *ime se bavi semanticki analizator.0sim navedenih operacija, leksicki analizator odrzava i generise tablicu simbola u kojoj se nalazi spisak svih identifikatora na koje se nailazilo prilikom identifikacije. *ablica simbola je struktura podataka u kojoj se, tokom etape analize, prikupljaju informacije o tipu, opsegu i memorijskoj lokaciji identifikatora. 0va tabela, koja se inicijalizuje tokom leksicke analize, dopunjava se i koristi i u  ostalim fazama. os jedan posao leksickog analizatora jeste da pamti brojeve linija izvornog koda. Iako jednostavna, faza leksicke analize je veoma spora. 0vo potice otuda sto kompilator jedino u ovoj fazi neposredno radi nad karakterskim niskama izvornog programa, dok se ostale odvijaju nad tokenima. Sintaksna analiza: Sintaksna analiza proverava da li su reci koje dobija iz prethodne faze! sklopljene prateci gramatiku programskog jezika.  ovoj fazi, leksicke jedinice se postupno grupisu u gramaticke jedinice ili kategorije. /eo kompilatora koji obavlja zadatak sintaksicke analize naziva se sintaksicki analizator ili parser parser !. koliko bismo samo malo permutovali naredbu iz primera, tj. ako posmatramo:2671 :5 &  38 dobili bismo neispravnu naredbu jer vrednost vrednosni izraz! 2671 nije l)value, tj. ne mozemo joj dodeliti neki drugi izraz. /akle, ulaz za sintaksicki analizator predstavljaju tokeni, i on ih proverava, a rezultat rada sintaksickog analizatora je sintaksicko drvo parse tree!. Semanticka analiza: Semanticka analiza proverava tipove i deklaracijeu sintaksickom drvetu, a takode vrsi i implicitnu konverziju kod operatora, ali i izracunavanje vrednosti kod interpretatora!. Posmatrajmo sintaksicko drvo dobijeno semantickom analizom naredbe izprimera. koliko smo promenljivu identifikatora 71 deklarisali tipom real, onda ce semanticki analizator implicitno konvertovati celi broj2 u broj u pokretnom zarezu 2.;. Faze sinteze: $ekada se citava ova etapa naziva <enerisanje koda. 0va etapa se temelji na specicnim, cesto ad hoc, resenjima koja zavise od konkretne masine. /eli se na tri faze:1.<enerisanje medukoda= primeri medukodova su: P)kod P)code! programskog jezika Pascal i -ajt kod -7tecode! programskog jezika ava2.0ptimizacija medukoda sprovode se komplikovane transformacije3.<enerisanje koda generise se izvrsni kod 2. Stabla apstraktne sintakse (reprezentacija u C-u i C++-u kreiranje tokom parsiranja atributi cvorova)  4avisi od toga koji se jezik koristi. >ko koristimo C, cvorovi stablasu strukture. <rane ka drugim cvorovima su pokazivaci. ?oramo da cuvamo informaciju kog tipa je taj cvor, da li je konstanta, promenljiva informaciju da je u pitanju promenljiva i ime promenljive!, operatori itd.  00P se vise ne koriste strukture za predstavljanje cvorova se koriste objekti@hijerarhija klasa. Clang ima klase za reprezentaciju >S*)a i tu je dovoljno nauciti njegove gotove klase. Izlaz sintaksne analize je apstraktno sintaksno stablo,pravi se npr. pri koriscenju Aacc)a. >tributi cvorova u C)u predstavljaju elemente strukture, a u 00P predstavljaju atribute klasa. !rimer u C-u  t7pedef enum = t7peCon, t7peId, t7pe0pr B node#num8Imamo cvor konstante 9 strukturu koja u sebi ima jedino vrednost, cvor identifikatora 9 struktura koja sadrzi npr. string koji predstavlja ime identifikatora, struktura operatora 9 moze da ima broj operanada, tip operatora itd. >tributi su dakle stvari koje se nalaze unutar struktura. !rimer C++ class Konstanta =public:Konstantaint &! : value&! =Bprivate:int value8B8>tribut klase konstante je vrednost. Kompletno apstraktno sintaksno stablo se dobija koriscenjem hijerarhije klasa. $pr. ukoliko zelimo da predstavimo izraze, na vrhu hijerarhije bi se nalazila apstraktna klasa koja bi imala cisto virtualan metod za izracunavanje izraza, a ostale klase naslednice: konstanta, promenljiva, operatori bi imale implementiran taj metod. #.Semanti$ka analiza (za%aci stati$ki i %inami$ki tipovi reprezentacija tipova i provera tipova)
Similar documents
We Need Your Support
Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

Thanks to everyone for your continued support.

No, Thanks