Date post: | 17-Nov-2015 |
Category: |
Documents |
Upload: | james-hanson |
View: | 46 times |
Download: | 2 times |
6/17/2011
1
Compilers-
Prevodioci1
6/17/2011
2
Odnos hardver, sistremski softver i aplikacioni softver kod ra unara:
2
6/17/2011
3
Funkcija kompajlera:
KompajlerIzvorniprogram
Ciljniprogram
Poruke ogrekama
3
6/17/2011
4
Pascal iskaz preveden u asemlerski jezik, a nakon toga asembliran u mainski jezik
4
6/17/2011
5
Levels of Representation
High Level Language Program
Assembly Language Program
Compiler
Assembler
temp = v[k];
v[k] = v[k+1];
v[k+1] = temp;
lw $15, 0($2)lw $16, 4($2)sw $16, 0($2)sw$15, 4($2)
Machine Language Program
Control Signal Specification
Assembler
Machine Interpretation
sw$15, 4($2)
0000 1001 1100 0110 1010 1111 0101 10001010 1111 0101 1000 0000 1001 1100 0110 1100 0110 1010 1111 0101 1000 0000 1001 0101 1000 0000 1001 1100 0110 1010 1111
ALUOP[0:3]
6/17/2011
6
The build and load process for desktop application programs:
Compiler
Assembler
Linker
Loader
Read-WriteMemory
Object Files Executable Image File
Assembler
Run-Time Library:
Linker
Loader
Memory (RAM)
Operating System Image:Boot
Process
6
6/17/2011
7
Hijerarhijska organizacija raunara koncept nivoa:
Nivo aplikacionog programa
Nivo vieg programskog jezika Nivo vieg programskog jezika
Nivo mainskog kda(asemblerski jezik)
Upravljaki nivo
Nivo funkcionalne jedinice
Logika kola, tranzistori i veze
7
6/17/2011
8
Generacije raunarskih jezika
Globalno razlikujemo etiri klase raunarskih jezika
Generacija Opis
prva generacija mainski jezik
druga generacija asemblerski jezik
trea generacija vii programski jezici (HLL)
etvrta generacija
novi jezici8
6/17/2011
9
Prva generacija mainski jezik
Karakteristike:
svaka instrukcija, na hardverskom nivou, direktno u pravljaradom maine, tj. pojedinim gradivnim blokovima.
instrukcije su numeri ke, predstavljene u formi binarnihoblika od 0 i 1
programiranje je naporno i podlono velikom broju g reaka
efikasnost programiranja je niska
programi nerazumljivi korisniku
direktno se pristupa resursima maine
vea brzina izvrenja programa
efikasnije kori enje memorije9
6/17/2011
10
Druga generacija asemblerski jezik
Karakteristike:
svaka instrukcija se predstavlja mnemonikom , kao naprimer ADD
korespondencija izmedju asemblerskih i mainskihinstrukcija je jedan-na-prema-jedan
postoje i direktive koje nemaju izvrno dejstvo, aliprogramu na asemblerskom jeziku olakavaju prevodje nje,
dodela memorije i segmentacija programa
direktno se pristupa resursima maine
vea brzina izvrenja programa
efikasnije kori enje memorije 10
6/17/2011
11
Trea generacija HLL
Karakteristike:
kompajler prevodi programske iskaze u odgovaraju e sekvence instrukcija na mainskom nivou
u principu jedan iskaz na HLL-u ( High Level Language ) se prevodi u n (n >= 1) instrukcija na mainskom (asemblerskom) jeziku
programiranje je jednostavnije
efikasnost je ve a
ispravljanje greaka lake
nema direktni pristup resursima maine
neefikasno iskori enje memorije
dui programi
11
6/17/2011
12
etvrta generacija novi jezici
Novi tipovi ra unarskih jezika se karakteriu sledeim osobinama:
implementiraju veta ku inteligenciju(primer je LISP)
jezici za pristup bazama podataka(primer je SQL)
objektno-orijentisani jezici (primeri su C++, Java i dr.)
12
6/17/2011
13
Mehanizmi za prevodjenje sa HLL-a na mainski kd:
Kompajler je program koji na svom ulazu prihvata program napisan na nekom od programskih jezika nazvan izvorni program, a na svom izlazu generie ekvivalentan program na mainskom kdu nazvan objektni program, tj. program u formi mainskog kda koji se moe direktno izvravati od strane hardvera raunara.
kompajler
13
6/17/2011
14
Ciklus kompilacije:
Objektni program koji se generie na izlazu kompajlera upisuje se u sekundarnu memoriju.
Korisni ki program poznat kao punilac (loader ) smeta
kompajler
kao punilac (loader ) smeta program iz sekundarne memorije u glavnu ime je objektni program spreman za izvrenje
14
6/17/2011
15
Proces kompilacije:
Proces kompilacije moe se podeliti na dva glavna dela:
analiza izvornog programa
sinteza objektnog programa
15
6/17/2011
16
Proces kompilacije:
Proces kompilacije moe se podeliti na dva glavna dela:
kompajler
analiza izvornog programa
sinteza objektnog programa
16
6/17/2011
17
Proces kompilacije:
Proces kompilacije moe se podeliti na dva glavna dela:
analiza izvornog programa
sinteza objektnog programa
17
6/17/2011
18
Struktura kompajlera:
18
6/17/2011
19
Faze kompajlera:
20
6/17/2011
20
Analiza izvornog programa
Kod kompajliranja, analiza se sastoji od tri faze:
Linearnna analiza , kod koje se niz karaktera koji ine izvorni program u itava s leva na desno i grupi e u tokene koji su nizovi karaktera koji imaju zajedni ko znaenje.desno i grupi e u tokene koji su nizovi karaktera koji imaju zajedni ko znaenje.
Hijerarhijska analiza , kod koje se karakteri ili tokeni grupiu hijerarhijski u ugnjedene skupove sa zajedni kim zna enjem.
Semanti ka analiza , kod koje se izvode neke provere da bi se osiguralo da komponente programa zajedno imaju zna enje.
21
6/17/2011
21
Leksi ka analiza :U kompajleru, linearna analiza se naziva leksi kom
analizom ili skaniranjem . Na primer, kod leksi ke analize karakteri u naredbi dodeljivanja
a := b + c*55bie grupisani u naredne tokene:
1. Identifikator a2. Simbol dodeljivanja :=2. Simbol dodeljivanja :=3. Identifikator b4. Znak plus5. Identifikator c6. Znak mnoenja7. Broj 55Blanko znaci kojima su odvojeni karakteri ovih toke na bie normalno eliminisani u toku leksi ke analize.
22
6/17/2011
22
Sintaksna analiza
Hijerarhijska analiza naziva se ralanjivanjem (parsing) ili sintaksnom analizom . Ona podrazumeva grupisanje tokena izvornog programa u gramati ke fraze koje se koriste od strane kompajlera za sintetizovanje izlaza. od strane kompajlera za sintetizovanje izlaza. Obino se gramati ke fraze izvornog programa predstavljaju parserskim stablom kao to je prikazano na slede oj slici.
23
6/17/2011
23
Parsersko stablo za a := b + c*55
naredbadodeljivanja
identifikator izraz:=identifikator
a
identifikator
identifikatorb
c
izraz
izrazizraz
izraz +
*broj
55
24
6/17/2011
24
Rekurzivna pravila:
Hijerarhijska struktura programa obino se izraava rekurzivnim pravilima. Na primer, mogli bismo da imamo sledea pravila kao deo definicija izraza:
Bilo koji identifikator je izraz. Bilo koji identifikator je izraz. Bilo koji broj je izraz. Ako su izraz1 i izraz2 izrazi, onda je izraz
takodje iizraz1 + izraz2izraz1 * izraz2( izraz1 )
25
6/17/2011
25
Rekurzivna pravila:
Slino, mnogo jezika definie naredbe rekurzivno pomo u pravila kao to su:
Ako identifikator1 je identifikator, a izraz2 je izraz, onda
identifikator1 := izraz2identifikator1 := izraz2je naredba.
Ako izraz1 je izraz, a naredba2 je naredba, ondawhile ( izraz1 ) do naredba2if ( izraz1 ) then naredba2su naredbe.
26
6/17/2011
26
Semanti ka analiza
Semanti kom analizom proverava se da li izvorni program ima semanti kih greaka i prikuplja se informacija o tipu za kasniju fazu generisanja koda. Koristi se hijerarhijska struktura odredjena sintaksnom analizom za struktura odredjena sintaksnom analizom za identifikovanje operatora i operanada izraza i naredbi.
Vana komponenta semanti ke analize je provera tipa . Ovde kompajler proverava da svaki operator ima operande koji su doputeni specifikacijom izvornog jezika.
27
6/17/2011
27
Semanti ka analiza :
:= :=
a + a +b b
c * 55 c *
inttoreal
55(a) (b)
inttoreal
28
6/17/2011
28
Tabela simbola :
Tabela simbola je struktura podataka koja sadri zapis za svaki identifikator, sa poljima za atribute identifikatora.
Ovi atributi mogu da obezbede informaciju o Ovi atributi mogu da obezbede informaciju o memoriji dodeljenoj za identifikator, njegov tip, njegov opseg (gde u programu je on vaei), i, u slu aju imena procedura, stvari kao broj i tipove argumenata, na in prenoenja svakog argumenta (na pr. pomo u reference), i vra eni tip, ako postoji.
29
6/17/2011
29
Detektovanje gre aka i obave tavanje o njima , 1#:
Svaka faza moe da otkrije greke. Medjutim posle detektovanja greke, faza mora nekako da tretira gre ku, tako da kompilacija mo e da tretira gre ku, tako da kompilacija mo e da se nastavi da bi se omogu ilo detektovanje ostalih greaka u izvornom programu. Kompajler koji se zaustavlja kada otkrije prvu greku nije tako koristan kao to bi mogao da bude.
30
6/17/2011
30
Detektovanje gre aka i obave tavanje o njima , 2#: Faze sintaksne i semanti ke analize obi no
rukuju velikim delom greaka koje kompajler detektuje. Leksi ka faza moe da detektuje greke kada karakteri na ulazu ne formiraju ni jedan token jezika. Greke gde niz tokena kristrukturna pravila (sintaksu) jezika defini u se u strukturna pravila (sintaksu) jezika defini u se u fazi sintaksne analize. U toku semanti ke analize, kompajler pokuava da detektuje konstrukcije koje imaju pravu sintakti ku strukturu bez zna enja operacija, na primer, ako pokuamo da saberemo dva identifikatora, od kojih jedan predstavlja ime polja, a drugi ime procedure.
31
6/17/2011
31
Generisanje medjukoda
Posle sintaksne i semantike analize, neki kompajleri generiu eksplicitnu medjupredstavu izvornog programa. Medjupredstavu moemo da zamislimo Medjupredstavu moemo da zamislimo kao program za apstraktnu mainu. Ova medjupredstava treba da ima dva vana svojstva: mora lako da se pravi i lako da se prevodi u ciljni program.
32
6/17/2011
32
Medjukod :
Medjupredstava moe imati razli ite forme. Razmotri emo jednu medjuformu koja je nazvana "troadresni kod", koja je kao asemblerski jezik za mainu kod koje svaka memorijska lokacija moe da funkcionie kao registar. Troadresni kod sastoji se od niza instrukcija od kojih svaka ima tri operanda . Izvorni program u (*.1) mo e se pojaviti u Izvorni program u (*.1) mo e se pojaviti u troadresnom kodu kao
temp1 := inttoreal(55) temp2 := id3 * temp1 temp3 := id2 + temp2 tid1 := temp3
33
6/17/2011
33
Generisanje medjukoda:
:=
+id 1
*id 2
id 3 num 55
34
6/17/2011
34
Optimizacija koda :
Faza optimizacije koda pokuava da pobolja medjukod, tako da rezultuje u brem mainskom kodu. Neke optimizacije su trivijalne. Na primer, prirodni algoritam generie prethodni medjukod koriste i jednu instrukciju za svaki operator u predstavi stabla posle semanti ke analize, ak i ako predstavi stabla posle semanti ke analize, ak i ako postoji bolji na in da se ostvari isto izra unavanje, koriste i dve instrukcije
temp1 := id3 * 55 id1 := id2 + temp1
35
6/17/2011
35
Jo jedan primer generisanja meukoda:
36
6/17/2011
36
Optimizacija koda:
Cilj: popraviti karakteristike pomo u:
- Uklanjanja redundantnog rada nedostinog koda eliminisanja zajednikih podizraza eliminisanja indukcionih promenljivih
- Kreiranja jednostavnijih operacija razmatranja konstanti u kompajleru redukovanja mnoenja (konvertovanja u iftovanje)
- Dobrog upravljanja (dodeljivanja) registrima
37
6/17/2011
37
Optimizacija koda
38
6/17/2011
38
Optimizacija kompajlera:
Omogu iti efikasno preslikavanje programa na mainu- selekcija i ureenje koda- eliminacija minornih neefikasnosti- dodela registara
Ne popravljati asimptotsku efikasnost- na programeru je selekcija najboljeg ukupnog algoritma- na programeru je selekcija najboljeg ukupnog algoritma- esto je bolje postii krajnju efikasnost nego konstantne faktore
Tipovi optimizacije- lokalni: unutar osnovnih blokova- globalni: u petljama
39
6/17/2011
39
Limitations of Optimizing Compilers
40
6/17/2011
40
Common Sub -Expression Elimination
46
6/17/2011
41
Common Sub -Expression Elimination cont.
47
6/17/2011
42
Induction Variable Elimination
48
6/17/2011
43
50
6/17/2011
44
Generisanje koda :
Finalna faza kompajlera je generisanje ciljnog koda koji se normalno sastoji od prenosivog mainskog koda ili asemblerskog koda. Memorijske lokacije selektuju se za svaku promenljivu kori enu od strane svaku promenljivu kori enu od strane programa. Zatim, svaka medjuinstrukcija prevodi se u niz mainskih instrukcija koje vre isti zadatak. Najvaniji aspekt je dodeljivanje promenljivih registrima.
51
6/17/2011
45
Generisanje koda :Na primer, koriste i registre 1 i 2, prevodjenje koda (*.4)
moe postati MOVF id3, R2 MULF #55.0, R2 MOVF id2, R1 (*.5) ADDF R2, R1 MOVF R1, id1Prvi i drugi operand svake instrukcije specificira izvor i Prvi i drugi operand svake instrukcije specificira izvor i
destinaciju, respektivno. U svakoj instrukciji, F n am kae da instrukcija radi sa brojevima u pokretnom zarezu (floating point). Ovaj kod pomera sadraj adrese id3 u registar 2, zatim ga mnoi sa realnom konstantom 55.0 . Znak # znai da 55.0 treba tretirati kao konstantu. Tre a instrukcija premeta id2 u registar 1 i dodaje mu v eliinu prethodno izra unatu u registru 2. Kona no, veli ina u registru 1 premeta se u adresu id1, tako da kod implementira dodeljivanje.
52
6/17/2011
46
Assembly Code Generation
53
6/17/2011
47
Asembler
Asemblerski kod (assembly code) je mnemoni ka verzija mainskog koda, u kojoj se imena koriste umesto binarnih kodova za operacije, a takodje se daju imena i memorijskim adresama. Tipi an niz asemblerskih instrukcija mogao bi da bude
MOV a, R1 ADD #2, R1 MOV R1, bOvaj kod pomera sadraj adrese a u registar 1, zati m
dodaje konstantu 2 tome sadraju, tretiraju i sadraj registra 1 kao broj u fiksnom zarezu, i kona no memorie rezultat u lokaciji nazvanoj b. Dakle, izraunato je b := a+2.
55
6/17/2011
48
Mainski kodHipoteti ki mainski kod u koji moe biti prevedena asemblerska instrukcija moe biti:
0001 01 00 00000000 *0011 01 10 00000010 0010 01 00 00000100 *
Uoavamo malu instrukcionu re , kod koje prva etiri bita predstavljaju kod instrukcije, gde su 0001, 0010 i 0011 predstavljaju u itati, memorisati i sabrati, respektivno. predstavljaju u itati, memorisati i sabrati, respektivno. Pod uitati i memorisati podrazumevamo pomeranje iz memorije u registar i obrnuto. Slede a dva bita imenuju registar, a 01 odnosi se na registar 1 u svakoj od gornjih instrukcija. Naredna dva bita predstavljaju "tag" ("zna ku"), gde 00 stoji za obi ni nain adresiranja, a zadnjih osam bitova odnose se na memorijsku adresu. Tag 10 znai "neposredni" na in i tada zadnjih osam bitova uzimaju se literalno kao operand. Ovaj na in javlja se u drugoj instrukciji
56
6/17/2011
49
Pseudoinstructions
57
6/17/2011
50
Interpretacija
Interpreter uzima jednu instrukciju iz programa PH, analizira je i uslovljava da se sa istim efektom izvri niz instrukcija sa nivoa LL. Ovaj proces se nastavlja sve dok se ne izvri kompletan program
61
6/17/2011
51
Interpreteri
INTERPRETERI programi prevodioci, koji za razliku od kompajlera prevode i odmah izvravaju svaku naredbu vieg programskog jezika. Pomo u interpretera ne moemo dobiti program u mainskom jeziku, nego se program svaki p ut kada ga elimo izvriti mora ponovo prevesti interpreter om.
Za razliku od interpretera, kod kompajlera su izvor ni program i prevedeni program potpuno odvojeni i pri izvo enju nezavisni. prevedeni program potpuno odvojeni i pri izvo enju nezavisni. Ako se izmeni izvorni program, to se ne e automatski odraziti na izvedbenom programu, nego ga je potrebno ponovno kompajlirati.
Prednosti kompajlera : bri rad od interpretera i zati en izvorni program.
Nedostaci kompajlera: odvojenost prevedenog i izvornog programa.
62
6/17/2011
52
Interpretacija - prednosti i nedostaci
Prednost interpeterskog mehanizma konverzije je ta to je interpreter relativno mali i to se u odnosu na kompajler lake imlementira na nivou maine.
Nedostatak je taj to je izvrenje izvornih programa postupkom interpretacije sporije kod kompilovanih programa.
Razlika u brzini izvrenja je reda 10.
63
6/17/2011
53
Kombinovanje interpetacije i kompilacije
Kombinovani mehanizam kompilacija-interpretacija koristi meu-jezik LI, koji se nalazi izmeu nivoa LL i LH. Program PH, napisan na jeziku LH, kompajlira se u program PI na jeziku LI. Program PI se zatim intepretira na nivou LLpomou interpretera .
Prednost ove metode ogleda se u boljoj prenosivosti programa, kao i u tome to se zadravaju ostale dobre osobine tehnika kompilacije i interpretacije.
64
6/17/2011
54
66
6/17/2011
55
67