Download as pdf or txt
Download as pdf or txt
You are on page 1of 35

Interpretacija programa

Leksika 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 znak
2. Stvara uinkovit zapis znakova izvornog programa
3. Odbacuje znakove koji se ne koriste u daljnjim
koracima
4. Grupira znakove u leksike jedinke
5. Odreuje klase leksikim jedinkama
6. Provjerava leksika pravila
7. Pronalazi pogreke i odreuje im mjesto u izvornom
programu
8. Zapisuje parametre leksikih jedinki u tablicu
znakova
9. 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


Znak ASCII

Klasa Vrijednost

Mnemonik

41

00 01

(Slovo, A)

42

00 02

(Slovo, B)

...

...

...

...

5A

00 1A

(Slovo, Z)

30

01 00

(Znamenka, 0)

31

01 01

(Znamenka, 1)

...

...

...

...

39

01 09

(Znamenka, 9)

2A

02 0A

(Operator, *)

2B

02 0B

(Operator, +)

...

...

...

...

Prilagodba
zapisa
znakova

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

Pravilo
Reg.izr.

Specijal

) (28)

Z (5A)

KROS

Specijal

; (3B)

Z (5A)

KROS

Operator

+ (2B)

Z (5A)

KROS

Operator

= (3D)

Z (5A)

KROS

ako

Kljuna

a (61)

ako

Z (5A)

KROS

ako

onda

Kljuna

o (6F)

onda

Z (5A)

KROS

onda

inae

Kljuna

i (69)

inae

Z (5A)

KROS

inae

Cijena

Identifik

I (49)

IDN

I (49)

IDN

Koliina

Identifik

I (49)

IDN

I (49)

IDN

slovo
(slovo +
brojka)*

345

Konstant

B (42)

KON

B (42)

KON

23

Konstant

B (42)

KON

B (42)

KON

brojka
brojka*

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 programa


IzracunajCijenu()
{
ako (Kolicina >20)
Cijena = 1000;
inace
Cijena = 1200;
NovaCijena = Cijena;
}

obratite panju na razmake

IzracunajCijenu ( ) CR LF { CR LF TAB ako


CR LF TAB TAB Cijena
CR
CR
CR
CR

LF
LF
LF
LF

1000 ;

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

( Kolicina

> 20 )

Mnemonik1
IzracunajCijenu()
{
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

Hex

>

ASC

IDN

ako

IDN

>

KON

Mn1

Tablica znakova

Mnemonik2
IzracunajCijenu()
{
ako (Kolicina > 20)
Cijena = 1000;
inace
Cijena = 1200;
NovaCijena = Cijena;
}

Leksika jedinka

Pomak

IzracunajCijenu ( ) CR LF { CR LF TAB ako

00

ako

01

onda

02

inace

...

...

20

>

21

...

...

40

41

42

43

44

...

...

60

IzracunajCijenu

61

Kolicina

...

...

75

20

( Kolicina

> 20

...
49 60

5A 41

5A 42

5A 43

5A 00

5A 41

49 61

Hex

ZA

ZB

ZC

Z null

ZA

Ia

ASC

KROS,{

KROS,ako

IDN,I.C. KROS,( KROS,)

KROS,( IDN,Kol.

Mn2

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]

You might also like