interpretacija programa leksi ka...

35
Interpretacija programa Leksička analiza Krunoslav Puljić

Upload: others

Post on 06-Nov-2019

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

Interpretacija programaLeksička analiza

Krunoslav Puljić

Page 2: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

Leksička analiza

• Prvi korak u radu jezičnog procesora– Prvi korak analize

• Leksički analizator:– Prima niz znakova izvornog programa– Vraća niz leksičkih jedinki

• Niz leksičkih jedinki se prosljeđuje sintaksnom analizatoru

• Ponekad se leksička i sintaksna analiza odvijaju zajedno

Page 3: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

Zadaci leksičkog analizatora:

1. Slijedno čita tekst izvornog programa znak po znak2. Stvara učinkovit zapis znakova izvornog programa3. Odbacuje znakove koji se ne koriste u daljnjim

koracima4. Grupira znakove u leksičke jedinke5. Određuje klase leksičkim jedinkama6. Provjerava leksička pravila7. Pronalazi pogreške i određuje im mjesto u izvornom

programu8. Zapisuje parametre leksičkih jedinki u tablicu

znakova9. Čuva tekstualnu strukturu izvornog programa

Page 4: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

1. Slijedno čitanje izvornog teksta

• Jedini korak koji izravno pristupa znakovima izvornog programa

• Koriste se ulazno izlazne naredbe nekog višeg programskog jezika– read, scanf, cin...

Page 5: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

2. Stvaranje učinkovitog zapisa

• Kodiranje znakova izvornog programa– Npr. ASCII kod

• U leksičkoj analizi nije potrebno razlikovati sve znakove, nego samo grupe znakova– Jedinstveni kod definiramo za cijelu grupu znakova

• Primjer: ako su u nizu znakova isključivo znamenke, onda je leksička jedinka u klasi cjelobrojnih konstanti

Page 6: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

3. Odbacivanje suvišnih znakova

• Odbacuju se znakovi koji se ne koriste u daljnjim fazama rada jezičnog procesora

• Izbacuju se npr.– Komentari– Znakovi koji određuju tekstualnu strukturu programa

• Bjeline• Tabulatori• Znak novog reda (LF)• Znak vraćanja na početak reda (CR)

Page 7: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

4. Grupiranje znakova u leksičke jedinke

• Leksičke jedinke zapisuju se na dva načina:– Odvajanjem pomoću prekidnih znakova– Slobodnim zapisom

• Uz prekidne znakove postupak grupiranja je znatno pojednostavljen– Tijekom grupiranja traže se prekidni znakovi– Svi znakovi između dva susjedna prekidna znaka čine

leksičku jedinku– Prekidni znakovi su bjeline, operatori, interpunkcija, itd.

Page 8: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

4. Grupiranje znakova u leksičke jedinke

• Slobodan način zapisa ne traži odvajanje jedinki prekidnim znakovima– Zato grupiranje nije moguće provesti na temelju pronalaženja

prekidnih znakova

• Algoritmi grupiranja i određivanja klasa ujedinjuju se u jedinstvenu cjelinu:– Čitanjem znak po znak nastoji se odrediti klasa leksičke jedinke– Ako je pročitanom nizu znakova moguće odrediti klasu, onda se niz

znakova grupira u leksičku jedinku– Ako nije moguće odrediti klasu, čita se idući znak– Čitanje znakova se nastavlja sve dok se niz znakova ne svrsta u

jednu od klasa

• Znakovi se ponekad mogu grupirati na više različitih načina, što uzrokuje nejednoznačnost

Page 9: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

5. Određivanje klase leksičkim jedinkama

• Središnji algoritam leksičkog analizatora• Za sve klase leksičkih jedinki definiraju se

pravila koja određuju pripadnost niza znakova pojedinoj klasi

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

• ako je krajnje lijevi znak slovo– onda je leksička jedinka u klasi identifikatora

• Primjena konačnih automata– Leksička pravila većine programskih jezika

omogućuju primjenu konačnih automata za razvrstavanje leksičkih jedinki u klase

Page 10: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

6. Provjeravanje leksičkih pravila

• Leksički analizator provjerava da li leksička jedinka zadovoljava pravila klase u koju je svrstana

• Za opis pravila klasa koriste se regularni izrazi

Page 11: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

7. Pronalaženje pogrešaka

• Ako nije moguće leksičku jedinku svrstati u jednu od klasa, leksički analizator ispisuje pogrešku– Određuje se mjesto pogreške u izvornom programu– Opisuje se pogreška

• Određivanje mjesta i opisa pogreške nije jednostavan postupak

Page 12: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

8. Zapisivanje parametara u tablicu znakova

• Leksički analizator stvara zapise u tablici znakova za sve leksičke jedinke izvornog programa

• Tablica znakova je osnovna podatkovna struktura leksičkog analizatora– Tu se sprema leksička jedinka u obliku u kojem je

zapisana u izvornom programu– Spremaju se i razni parametri leksičkih jedinki

• Npr. tip konstante

Page 13: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

9. Čuvanje tekstualne strukture izvornog programa

• Nakon leksičke analize nestaje tekstualna struktura izvornog programa– Izostavljene su bjeline, tabulatori, prijelazi u novi

redak, itd.

• Najjednostavniji način čuvanja tekstualne strukture jest brojanje znakova novog reda– Tako se određuje i redak izvornog programa u kojem

je nastala pogreška

• Danas je uobičajeno da se izvorni program u potpunosti sačuva i da se u njemu označe pogreške

Page 14: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

Prilagodba zapisa znakova

• Prethodi leksičkoj analizi• Niz znakova izvornog programa prevodi se

iz standardnog koda (npr. ASCII) u kod koji je posebno prilagođen leksičkoj analizi

Page 15: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

Primjer: Prilagodba zapisa znakova

A 41

B 42

... ...

Z 5A

00 01 (Slovo, A)

00 02 (Slovo, B)

... ...

00 1A (Slovo, Z)

0 30

1 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

Page 16: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

Osnovne klase leksičkih jedinki

• Leksičke jedinke – nizovi znakova izvornog programa

• Primjeri osnovnih klasa:– Ključne riječi

• Npr. ako, onda, inače

– Operatori• Zbrajanje, oduzimanje, množenje, dijeljenje

– Specijalni znakovi• Npr. zagrade, zarez, točka

– Identifikatori• Npr. imena varijabli, polja, potprograma

– Konstante• Npr. cjelobrojne, znakovne, tekstualne

Page 17: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

Leksička 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)*Količina Identifik I (49) IDN I (49) IDN

ako Ključna a (61) ako Z (5A) KROS ako

onda Ključna o (6F) onda Z (5A) KROS onda

inače Ključna i (69) inače Z (5A) KROS inače

Page 18: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

Osnovne klase leksičkih jedinki

• Leksički analizator generira niz leksičkih jedinki koje prosljeđuje sintaksnom analizatoru– Taj niz kodnih znakova naziva se niz uniformnih

znakova

• Postoje dva pristupa kodiranju uniformnih znakova– U prethodnoj tablici su označeni s Mnemonik1 i

Mnemonik2– Oba jednako kodiraju identifikatore i konstante– Razlikuju se po kodiranju ključnih riječi, operatora i

specijalnih znakova

Page 19: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

Osnovne klase leksičkih jedinki

• Za potrebe sintaksne analize– Nije potrebno razlikovati pojedine identifikatore i

konstante• Zato leksički analizator odredi jednistveni kod uniformnog

znaka za konstante i posebno za identifikatore

– Jest potrebno razlikovati ključne riječi, operatore i specijalne znakove

• Zato leksički analizator uvodi:– Različite uniformne znakove za različite leksičke jedinke u tim

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

Mnemonik2

Page 20: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

Primjer izvornog programaIzracunajCijenu()

{

ako (Kolicina >20)

Cijena = 1000;

inace

Cijena = 1200;

NovaCijena = Cijena;

}

CR LF TAB TAB Cijena = 1000 ;

• obratite pažnju 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 }

Page 21: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

Mnemonik1IzracunajCijenu()

{

ako (Kolicina > 20)

Cijena = 1000;

inace

Cijena = 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

Page 22: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

Mnemonik2IzracunajCijenu()

{

ako (Kolicina > 20)

Cijena = 1000;

inace

Cijena = 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

Leksička jedinka

Page 23: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

Podatkovna struktura L.A.

• Podatkovnu strukturu leksičkog analizatora čine:– Izvorni program– Tablica uniformnih znakova– Tablica znakova

• Tablica znakova se razlaže na:– Tablica identifikatora– Tablica konstanti– Tablica ključnih riječi, operatora i specijalnih

znakova

Page 24: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

Tablica uniformnih znakova

• Osnovna tablica• Znakovi su zapisani onim redoslijedom

kojim su leksičke jedinke zadane u izvornom programu– Zato da bi poredak bio dostupan i ostalim

dijelovima jezičnog procesora koji nemaju pristup izvornom kodu

Page 25: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

Podatkovna struktura L.A.

• Leksički analizator odredi klasu leksičke jedinke• Zapiše uniformni znak u tablicu uniformnih

znakova• Započne pretraživanje tablice znakova

– Ako je leksička jedinka identifikator, pretražuje se tablica identifikatora

• Ako je traženi identifikator već zapisan u tablici identifikatora onda se u tablicu uniformnih znakova zapisuje kazaljka koja pokazuje na mjesto pronađenog zapisa

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

Page 26: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

Podatkovna struktura L.A.

• ...– Ako je leksička jedinka konstanta, pretražuje

se tablica konstanti• Rad s tablicom konstanti analogan je radu s

tablicom identifikatora• Ako imamo različite vrste konstanti, u tablicu

konstanti zapisuje se i podatak o vrsti konstante– Cjelobrojna, znakovna, tekstualna, itd.

Page 27: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

Podatkovna struktura L.A.

• Tablice identifikatora i konstanti se mijenjaju tijekom rada jezičnog procesora

• Podaci u tablici ključnih riječi, operatora i specijalnih znakova se ne mijenjaju tijekom rada jezičnog procesora

Page 28: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni
Page 29: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

Osnovne operacije nad tablicom znakova:

• Traženje zapisa• Dodavanje novog zapisa• Izbor postupka izrade tablice ovisi o

učestalosti operacija traženja i dodavanja– Linearna lista (vektor)– Uređena lista– Binarno stablo traženja– Raspršeno adresiranje (hash tablica)

Page 30: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

Linearna lista (vektor)

• Najjednostavniji način gradnje tablice znakova• Pretraživanje – lista se pretražuje slijedno od kraja liste,

sve dok se ne pronađe traženi zapis ili dok se ne dođe do početka liste– Složenost je O(n) gdje je n duljina liste– Prosječno se pretraži (n+1)/2 zapisa

• Dodavanje zapisa – novi zapis se jednostavno ubaci na kraj liste– Složenost je O(1)

• Prednost: jednostavnost i brzina dodavanja zapisa• Nedostatak: sporost traženja zapisa

Page 31: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

Uređena lista

• Linearna lista u kojoj su podaci sortirani• Pretraživanje – binarno

– Složenost je O(log2 n)• Dodavanje zapisa – novi zapis treba ubaciti na

pravo mjesto, pa se u prosjeku n/2 zapisa treba premjestiti– Složenost je O(n)

• Prednost: brzo traženje zapisa• Nedostatak: sporo dodavanje zapisa• Pogodna je za tablicu ključnih riječi, operatora i

specijalnih znakova koja se ne mijenja tijekom rada jezičnog procesora

Page 32: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

Binarno stablo traženja

• U čvoru i su svi lijevo od njega manji, a svi desno su veći od i– Red Black Tree

• Prednost: brzo pretraživanje složenosti O(log2 n)• Nedostatak: skupo dodavanje zapisa uslijed

preslagivanja stabla– Bitno je da je visina stabla što manja– Želimo izbjeći da stablo izgleda poput uređene liste

Page 33: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

Raspršeno adresiranje

• Poznato i kao Hash tablica– Podaci se spremaju u pretince tablice– Adresa pretinca se dobije kao vrijednost hash

funkcije koja leksičkoj jedinki pridružuje pretinac

– Postoje zatvoreno i otvoreno hash-iranje

• Dobar izbor hash funkcije u idealnom slučaju vodi na složenost O(1) i za pretraživanje i za dodavanje zapisa

Page 34: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

Dinamika izvođenja L.A.

• Suradnja leksičkog i sintaksnog analizatora ostavaruje se na dva načina:– Putem poziva potprograma

• Leksički analizator je potprogram sintaksnog• Sintaksni analizator poziva leksički kada mu zatreba novi

uniformni znak• Leksički analizator čita znakove izvornog programa sve dok ne

odredi klasu leksičke jedinke, nakon čega sintaksnom analizatoru vraća uniformni znak

– Razmjenom čitave tablice uniformnih znakova• Leksički analizator je zasebni program koji generira cijelu

tablicu uniformnih znakova i pohrani je u datoteku, te završava s radom

• Sintaksni analizator se pokreće kasnije, te čita uniformne znakove iz datoteke

Page 35: Interpretacija programa Leksi ka analizaweb.math.pmf.unizg.hr/nastava/ip/?download=04_IP_Leksicka_analiza.pdf · • Sintaksni analizator poziva leksi čki kada mu zatreba novi uniformni

Literatura

• Siniša Srbljić: Jezični procesori 1 [JP1]• Siniša Srbljić: Jezični procesori 2 [JP2]