04 IP Leksicka Analiza

Embed Size (px)

DESCRIPTION

Leksička analiza

Citation preview

  • Interpretacija programaLeksika analiza

    Krunoslav Pulji

  • Leksika analiza Prvi korak u radu jezinog procesora

    Prvi korak analize Leksiki analizator:

    Prima niz znakova izvornog programa Vraa niz leksikih jedinki

    Niz leksikih jedinki se prosljeuje sintaksnom analizatoru

    Ponekad se leksika i sintaksna analiza odvijaju zajedno

  • Zadaci leksikog analizatora:1. Slijedno ita tekst izvornog programa znak po znak2. Stvara uinkovit zapis znakova izvornog programa3. Odbacuje znakove koji se ne koriste u daljnjim

    koracima4. Grupira znakove u leksike jedinke5. Odreuje klase leksikim jedinkama6. Provjerava leksika pravila7. Pronalazi pogreke i odreuje im mjesto u izvornom

    programu8. Zapisuje parametre leksikih jedinki u tablicu

    znakova9. uva tekstualnu strukturu izvornog programa

  • 1. Slijedno itanje izvornog teksta Jedini korak koji izravno pristupa

    znakovima izvornog programa Koriste se ulazno izlazne naredbe nekog

    vieg programskog jezika read, scanf, cin...

  • 2. Stvaranje uinkovitog zapisa Kodiranje znakova izvornog programa

    Npr. ASCII kod U leksikoj analizi nije potrebno razlikovati sve

    znakove, nego samo grupe znakova Jedinstveni kod definiramo za cijelu grupu znakova

    Primjer: ako su u nizu znakova iskljuivo znamenke, onda je leksika jedinka u klasi cjelobrojnih konstanti

  • 3. Odbacivanje suvinih znakova Odbacuju se znakovi koji se ne koriste u daljnjim

    fazama rada jezinog procesora Izbacuju se npr.

    Komentari Znakovi koji odreuju tekstualnu strukturu programa

    Bjeline Tabulatori Znak novog reda (LF) Znak vraanja na poetak reda (CR)

  • 4. Grupiranje znakova u leksike jedinke

    Leksike jedinke zapisuju se na dva naina: Odvajanjem pomou prekidnih znakova Slobodnim zapisom

    Uz prekidne znakove postupak grupiranja je znatno pojednostavljen Tijekom grupiranja trae se prekidni znakovi Svi znakovi izmeu dva susjedna prekidna znaka ine

    leksiku jedinku Prekidni znakovi su bjeline, operatori, interpunkcija, itd.

  • 4. Grupiranje znakova u leksike jedinke

    Slobodan nain zapisa ne trai odvajanje jedinki prekidnim znakovima Zato grupiranje nije mogue provesti na temelju pronalaenja

    prekidnih znakova Algoritmi grupiranja i odreivanja klasa ujedinjuju se u

    jedinstvenu cjelinu: itanjem znak po znak nastoji se odrediti klasa leksike jedinke Ako je proitanom nizu znakova mogue odrediti klasu, onda se niz

    znakova grupira u leksiku jedinku Ako nije mogue odrediti klasu, ita se idui znak itanje znakova se nastavlja sve dok se niz znakova ne svrsta u

    jednu od klasa Znakovi se ponekad mogu grupirati na vie razliitih naina,

    to uzrokuje nejednoznanost

  • 5. Odreivanje klase leksikim jedinkama

    Sredinji algoritam leksikog analizatora Za sve klase leksikih jedinki definiraju se

    pravila koja odreuju pripadnost niza znakova pojedinoj klasi

    Primjer: klasa identifikatora ako su u nizu znakova slova i znamenke

    ako je krajnje lijevi znak slovo onda je leksika jedinka u klasi identifikatora

    Primjena konanih automata Leksika pravila veine programskih jezika

    omoguuju primjenu konanih automata za razvrstavanje leksikih jedinki u klase

  • 6. Provjeravanje leksikih pravila Leksiki analizator provjerava da li leksika

    jedinka zadovoljava pravila klase u koju je svrstana

    Za opis pravila klasa koriste se regularni izrazi

  • 7. Pronalaenje pogreaka Ako nije mogue leksiku jedinku svrstati u

    jednu od klasa, leksiki analizator ispisuje pogreku Odreuje se mjesto pogreke u izvornom programu Opisuje se pogreka

    Odreivanje mjesta i opisa pogreke nije jednostavan postupak

  • 8. Zapisivanje parametara u tablicu znakova

    Leksiki analizator stvara zapise u tablici znakova za sve leksike jedinke izvornog programa

    Tablica znakova je osnovna podatkovna struktura leksikog analizatora Tu se sprema leksika jedinka u obliku u kojem je

    zapisana u izvornom programu Spremaju se i razni parametri leksikih jedinki

    Npr. tip konstante

  • 9. uvanje tekstualne strukture izvornog programa

    Nakon leksike analize nestaje tekstualna struktura izvornog programa Izostavljene su bjeline, tabulatori, prijelazi u novi

    redak, itd. Najjednostavniji nain uvanja tekstualne

    strukture jest brojanje znakova novog reda Tako se odreuje i redak izvornog programa u kojem

    je nastala pogreka Danas je uobiajeno da se izvorni program u

    potpunosti sauva i da se u njemu oznae pogreke

  • Prilagodba zapisa znakova Prethodi leksikoj analizi Niz znakova izvornog programa prevodi se

    iz standardnog koda (npr. ASCII) u kod koji je posebno prilagoen leksikoj analizi

  • Primjer: Prilagodba zapisa znakova

    A 41B 42... ...

    Z 5A

    00 01 (Slovo, A)00 02 (Slovo, B)

    ... ...

    00 1A (Slovo, Z)0 301 31... ...

    9 39

    * 2A+ 2B... ...

    01 00 (Znamenka, 0)01 01 (Znamenka, 1)

    ... ...

    01 09 (Znamenka, 9)02 0A (Operator, *)02 0B (Operator, +)

    ... ...

    Prilagodba zapisa

    znakova

    Znak ASCII Klasa Vrijednost Mnemonik

  • Osnovne klase leksikih jedinki Leksike jedinke nizovi znakova izvornog

    programa Primjeri osnovnih klasa:

    Kljune rijei Npr. ako, onda, inae

    Operatori Zbrajanje, oduzimanje, mnoenje, dijeljenje

    Specijalni znakovi Npr. zagrade, zarez, toka

    Identifikatori Npr. imena varijabli, polja, potprograma

    Konstante Npr. cjelobrojne, znakovne, tekstualne

  • Leksika jedinka

    Klasa jedinke

    Kodni znak

    Mnemonik1 Kodni znak

    Mnemonik2 PraviloReg.izr.

    ) Specijal ) (28) ) Z (5A) KROS ); Specijal ; (3B) ; Z (5A) KROS ;+ Operator + (2B) + Z (5A) KROS += Operator = (3D) = Z (5A) KROS =

    345 Konstant B (42) KON B (42) KON brojka brojka*

    23 Konstant B (42) KON B (42) KON

    Cijena Identifik I (49) IDN I (49) IDN slovo (slovo + brojka)*Koliina Identifik I (49) IDN I (49) IDN

    ako Kljuna a (61) ako Z (5A) KROS akoonda Kljuna o (6F) onda Z (5A) KROS ondainae Kljuna i (69) inae Z (5A) KROS inae

  • Osnovne klase leksikih jedinki Leksiki analizator generira niz leksikih jedinki

    koje prosljeuje sintaksnom analizatoru Taj niz kodnih znakova naziva se niz uniformnih

    znakova Postoje dva pristupa kodiranju uniformnih

    znakova U prethodnoj tablici su oznaeni s Mnemonik1 i

    Mnemonik2 Oba jednako kodiraju identifikatore i konstante Razlikuju se po kodiranju kljunih rijei, operatora i

    specijalnih znakova

  • Osnovne klase leksikih jedinki Za potrebe sintaksne analize

    Nije potrebno razlikovati pojedine identifikatore i konstante

    Zato leksiki analizator odredi jednistveni kod uniformnog znaka za konstante i posebno za identifikatore

    Jest potrebno razlikovati kljune rijei, operatore i specijalne znakove

    Zato leksiki analizator uvodi: Razliite uniformne znakove za razliite leksike jedinke u tim

    klasama Mnemonik1 Isti uniformni znak (KROS) i kazaljku na tablicu znakova

    Mnemonik2

  • Primjer izvornog programaIzracunajCijenu(){

    ako (Kolicina >20)Cijena = 1000;

    inaceCijena = 1200;

    NovaCijena = Cijena;}

    CR LF TAB TAB Cijena = 1000 ;

    obratite panju na razmake

    IzracunajCijenu ( ) CR LF { CR LF TAB ako ( Kolicina > 20 )

    CR LF TAB inace CR LF TAB TAB Cijena = 1200; CR LF TAB NovaCijena = Cijena;CR LF }

  • Mnemonik1IzracunajCijenu(){

    ako (Kolicina > 20)Cijena = 1000;

    inaceCijena = 1200;

    NovaCijena = Cijena;}

    IzracunajCijenu ( ) CR LF { CR LF TAB ako ( Kolicina > 20 )

    49 28 29 7B 61 28 49 3E 42 29

    I ( ) { a ( I > B )IDN ( ) { ako ( IDN > KON )

    ...

    Hex

    ASC

    Mn1

  • Mnemonik2IzracunajCijenu(){

    ako (Kolicina > 20)Cijena = 1000;

    inaceCijena = 1200;

    NovaCijena = Cijena;}

    IzracunajCijenu ( ) CR LF { CR LF TAB ako ( Kolicina > 20 )

    49 60 5A 41 5A 42 5A 43 5A 00 5A 41 49 61

    I Z A Z B Z C Z null Z A I a

    IDN,I.C. KROS,( KROS,) KROS,{ KROS,ako KROS,( IDN,Kol.

    ...

    Hex

    ASC

    Mn2

    00 ako

    01 onda

    02 inace

    ... ...

    20 >

    21 =

    ... ...

    40 ;

    41 (

    42 )

    43 {

    44 }

    ... ...

    60 IzracunajCijenu

    61 Kolicina

    ... ...

    75 20

    Tablica znakova

    Pomak

    Leksika jedinka

  • Podatkovna struktura L.A. Podatkovnu strukturu leksikog

    analizatora ine: Izvorni program Tablica uniformnih znakova Tablica znakova

    Tablica znakova se razlae na: Tablica identifikatora Tablica konstanti Tablica kljunih rijei, operatora i specijalnih

    znakova

  • Tablica uniformnih znakova Osnovna tablica Znakovi su zapisani onim redoslijedom

    kojim su leksike jedinke zadane u izvornom programu Zato da bi poredak bio dostupan i ostalim

    dijelovima jezinog procesora koji nemaju pristup izvornom kodu

  • Podatkovna struktura L.A. Leksiki analizator odredi klasu leksike jedinke Zapie uniformni znak u tablicu uniformnih

    znakova Zapone pretraivanje tablice znakova

    Ako je leksika jedinka identifikator, pretrauje se tablica identifikatora

    Ako je traeni identifikator ve zapisan u tablici identifikatora onda se u tablicu uniformnih znakova zapisuje kazaljka koja pokazuje na mjesto pronaenog zapisa

    Ako traeni identifikator nije u tablici identifikatora, onda se stvara novi zapis te se u tablicu uniformnih znakova zapisuje kazaljka koja pokazuje na mjesto novostvorenog zapisa

  • Podatkovna struktura L.A. ...

    Ako je leksika jedinka konstanta, pretrauje se tablica konstanti

    Rad s tablicom konstanti analogan je radu s tablicom identifikatora

    Ako imamo razliite vrste konstanti, u tablicu konstanti zapisuje se i podatak o vrsti konstante

    Cjelobrojna, znakovna, tekstualna, itd.

  • Podatkovna struktura L.A. Tablice identifikatora i konstanti se

    mijenjaju tijekom rada jezinog procesora Podaci u tablici kljunih rijei, operatora i

    specijalnih znakova se ne mijenjaju tijekom rada jezinog procesora

  • Osnovne operacije nad tablicom znakova:

    Traenje zapisa Dodavanje novog zapisa Izbor postupka izrade tablice ovisi o

    uestalosti operacija traenja i dodavanja Linearna lista (vektor) Ureena lista Binarno stablo traenja Raspreno adresiranje (hash tablica)

  • Linearna lista (vektor) Najjednostavniji nain gradnje tablice znakova Pretraivanje lista se pretrauje slijedno od kraja liste,

    sve dok se ne pronae traeni zapis ili dok se ne doe do poetka liste Sloenost je O(n) gdje je n duljina liste Prosjeno se pretrai (n+1)/2 zapisa

    Dodavanje zapisa novi zapis se jednostavno ubaci na kraj liste Sloenost je O(1)

    Prednost: jednostavnost i brzina dodavanja zapisa Nedostatak: sporost traenja zapisa

  • Ureena lista Linearna lista u kojoj su podaci sortirani Pretraivanje binarno

    Sloenost je O(log2 n) Dodavanje zapisa novi zapis treba ubaciti na

    pravo mjesto, pa se u prosjeku n/2 zapisa treba premjestiti Sloenost je O(n)

    Prednost: brzo traenje zapisa Nedostatak: sporo dodavanje zapisa Pogodna je za tablicu kljunih rijei, operatora i

    specijalnih znakova koja se ne mijenja tijekom rada jezinog procesora

  • Binarno stablo traenja U voru i su svi lijevo od njega manji, a svi

    desno su vei od i Red Black Tree

    Prednost: brzo pretraivanje sloenosti O(log2 n) Nedostatak: skupo dodavanje zapisa uslijed

    preslagivanja stabla Bitno je da je visina stabla to manja elimo izbjei da stablo izgleda poput ureene liste

  • Raspreno adresiranje Poznato i kao Hash tablica

    Podaci se spremaju u pretince tablice Adresa pretinca se dobije kao vrijednost hash

    funkcije koja leksikoj jedinki pridruuje pretinac

    Postoje zatvoreno i otvoreno hash-iranje Dobar izbor hash funkcije u idealnom

    sluaju vodi na sloenost O(1) i za pretraivanje i za dodavanje zapisa

  • Dinamika izvoenja L.A. Suradnja leksikog i sintaksnog analizatora

    ostavaruje se na dva naina: Putem poziva potprograma

    Leksiki analizator je potprogram sintaksnog Sintaksni analizator poziva leksiki kada mu zatreba novi

    uniformni znak Leksiki analizator ita znakove izvornog programa sve dok ne

    odredi klasu leksike jedinke, nakon ega sintaksnom analizatoru vraa uniformni znak

    Razmjenom itave tablice uniformnih znakova Leksiki analizator je zasebni program koji generira cijelu

    tablicu uniformnih znakova i pohrani je u datoteku, te zavrava s radom

    Sintaksni analizator se pokree kasnije, te ita uniformne znakove iz datoteke

  • Literatura Sinia Srblji: Jezini procesori 1 [JP1] Sinia Srblji: Jezini procesori 2 [JP2]