Upload
slobodan-bosnic-ex-bosnic
View
5
Download
0
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]