05 (pes) kompajleri.pdf

55
6/17/2011 1 Compilers - Prevodioci 1

Upload: james-hanson

Post on 17-Nov-2015

51 views

Category:

Documents


2 download

TRANSCRIPT

  • 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