algoritamske osnove program a prevodilaca

31
Algoritamske osnove programa prevodilaca UNIVERZITET U ISTOČNOM SARAJEVU FILOZOFSKI FAKULTET PALE STUDIJSKI PROGRAM ZA MATEMATIKU I RAČUNARSTVO ntor : of. Dr Milorad K.Banjanin Student : Milan Vasiljević Završni – diplomski rad Pale, 2012. godine

Upload: terra

Post on 22-Jan-2016

42 views

Category:

Documents


1 download

DESCRIPTION

UNIVERZITET U ISTOČNOM SARAJEVU FILOZOFSKI FAKULTET PALE STUDIJSKI PROGRAM ZA MATEMATIKU I RAČUNARSTVO. Algoritamske osnove program a prevodilaca. Završni – diplomski rad. Mentor : Prof. Dr Milorad K.Banjanin. Student : Milan Vasiljević. Pale, 2012. godine. ZADATAK. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Algoritamske osnove program a prevodilaca

Algoritamske osnove programa prevodilaca

UNIVERZITET U ISTOČNOM SARAJEVUFILOZOFSKI FAKULTET PALE

STUDIJSKI PROGRAM ZA MATEMATIKU I RAČUNARSTVO

Mentor :Prof. Dr Milorad K.Banjanin

Student :Milan Vasiljević

Završni – diplomski rad

Pale, 2012. godine

Page 2: Algoritamske osnove program a prevodilaca

ZADATAK• Tema ovog završnog diplomskog rada pripada polju računarskih i informacionih

nauka gde je posebno bitna primjenjena matematika a predmet istraživanja su algoritamske osnove programskih prevodilaca. U računaru, kao elektronskom sistemu za informaciono procesiranje sa šestoslojevitom arhitekturom programi prevodioci se nalaze na petom sloju u kategoriji sistemskih softera

U rešenju zadatka završnog – dipomskog rada potrebno je :• 1. IDENTIFIKOVATI I INTERPRETIRATI glavne pojmove i termine koji figurišu u

naslovu teme i tekstu zadatka završnog – diplomskog rada, kao i ostale koncepte iz predmeta istraživanja;

• 2.ANALIZIRATI programske jezike, složenost algoritama, alati koji se koriste pri izradi dizajna programa, leksiku, sintaksu i semantiku programskog koda

• 3. KOMPARIRATI formalne i neformalne definicje algoritama, principe rada kompajlera i interpretera, algoritme leskičke i sintaksne analize

• 4. ISTRAŽITI uloge programa prevodioca u komunikacionom procesu između programera i procesora, programe prevodioce kao sisteme determisitičkih konačnih automata

• 5. PRIMENITI tehničke, tehnološke, opšte lingvističke i jezičke standarde, kao i druge kriterijume u izradi dobrog displeja sadržaja rada, logičkog i grafičkog struktuiranja multimedijalnih dokumenata.

Page 3: Algoritamske osnove program a prevodilaca

Analiza problema

Dizajn rešenja

Kodiranje

Dekodiranje

Izvršavanje

Sakupljanje informacija o problemu i sastavljanje( specifikacija) zahteva

Struktura softverskih komponenti(modula), njihovih veza i podataka koja zadovoljava specifikovane zahteve

Zapis algoritma na nekom od programskih jezika

Prvođenje programa u formu koja je razumljiva računaru

Računar izvršava program

Page 4: Algoritamske osnove program a prevodilaca

Analiza problema

Definiše ŠTA proizvod treba da ispuni pričemu se izostavlja KAKO to rešiti

Specifikacija zahteva

Zahtevi se ne odnose samo na funkcionalnost,nego i na ostale karaktristike proizvoda koje nisu

u tesnoj vezi sa njegovom funkcionalnošću

ULAZ OBRADA IZLAZ

KONTROLA

MEMORISANJEKoji je ulaz

na raspolaganju

Šta se želina izlazuKoje podatke

memorisatiKoje su

procedurepotrebne

Koje se kontrolneprocedure

koriste

Informacije o ulazu, obradi i izlazu su relevantne za opisproblema koji je potrebno rešiti pomoću računara

Page 5: Algoritamske osnove program a prevodilaca

Dizajn programa

Inicijalizacija( deklaracije )

Ulaz Obrada Izlaz

Alati koji se koriste za dizajniranje svakog od modula

Srtukturni dijagram HIPO dijagram Dijagram toka Tabele odlučivanja Pseudokod

1.Finansijsko knjigovodstvo

2.Kontrolni plan 4.Nalog za knjiženje

3.ažuriranje kontrolnog plana

5.Kumuliranje i kontrola naloga

6.Štampanje

Pokazuje tok podataka i poslove procesiranja podataka u

strukturi hijerarhijskog "stabla" modula za procesiranje podataka

Tabelapreduzeća

Tabela kontrolnogplana

Tabela naloga za knjiženje

Knjiženje naloga

Pronalaže-nje konta

Unos naloga

Listanje

Tabela proknjižen-ih naloga

Tabela stanja konta

Ulaz Obrada Izlaz

Prikazuje karakteristikeulaza/obrade/izlazaraznovrsnih modula

u sistemu

START

STOP

Procesiranje

Odluka

Po~etak/Kraj (terminalna ta~ka)

Konektor stranice

Konektor za drugi dijagram toka

Ulaz/Izlaz

Predefinisani proces(Operacije koje nisu detaljno predstavljene ukonkretnom dijagramu)

Pravci toka

Procesiranje

Odluka

Početak / Kraj ( terminalna tačka )

Konektor stranice

Konektor za drugi dijagram toka

Ulaz / Izlaz

Predefinisani proces

Pravci toka

Paušal T T F F F

Varijabla F F T T F

Potrošnja < 100 kWh T F T F

Potrošnja > 100 kWh F T F T

Minimalna naplata X

Račun A X X

Račun B X

Drugi tretman X

USLOVI

AKCIJA

PRAVILA

Identifikuju uslovnu logikuodlučivanja softverskogproizvoda. Pravila govorekoju akciju treba preduzetiza set uslova

BEGIN / Počni program READ / Učitaj matricu DO WHILE / Radi dok ima podataka

Invertuj matricu i = 1, nj = i, n

PRINT Štampaj inverznu matricu END DO

END / Kraj programa

Pseudokod se sastoji od iskaza govornog jezika

(obično je to engleski) i upravljačkih struktura koji zajedno definišu

logiku softvera

Postoje različiti programski dizajni koji zadovoljavaju isti skup zahteva, pa jebitno da se odabere onaj dizajn programa koji daje najkvalitetnije rešenje.

Mehanizami koji se koriste za sprovođenje aktivnosti faza dizajna su algoritmi.Analizom algoritama može se odabrati dizajn programa koji daje najkvalitetnije rešenje.

Page 6: Algoritamske osnove program a prevodilaca

Algoritamske osnove informacionog procesiranja

U matematici i računarskoj nauci algoritam je uređeni skup definisanih

naredbi za obavljanje nekog zadatka. Algoritmi se koriste u računarskim

programima kao način rešavanja nekog zadatka

Predstavlja vodilju za programera

koji pomoću njega

predstavlja viziju

programa koji želi napisati

u programskom

jeziku.

Koncept algoritma je dobio formu 1936. preko Tjuringovih mašina (TM). Apstraktni (zamišljeni) uređaj kojim se, na izvesan način,

definiše način razmišljanja računara i algoritam.

x yA

Bez obzira kako je izražen, algoritam transformiše podatak x u rezultat ytako da ima istu ulogu i moć kao i izračunavanje funkcije

(x) = y

Page 7: Algoritamske osnove program a prevodilaca

Skup svih funkcija je neprebrojiv skup.

Odakle proizilazi da je skup svih algoritama prebrojiv skup.

Algoritam se može posmatrati kao konačan nizkoraka koji su elementi nekog prebrojivog skupa.

A4

A3

A2

A1

.

.

.

.

.

.

AFf

g

.

.

.

Odnosno, ne postojibijekcija sa skupa

A na skup F.

Postoje problemikoji nisu

algoritamski rešivi.

NPR. TjuringovHalting problem

Page 8: Algoritamske osnove program a prevodilaca

Problem zadržavanja(eng. Halting problem) Neka takav algoritam T postoji. Uzimaju se

dve proizvoljne sekvence S,Q. Operacija S(Q) ima smisla ako je S legitimno kodiranjealgoritma ( može se reći ako je S algoritam )

Dati proizvoljni algoritam za proizvoljni podatak D , odlučuje da li u konačnom vremenu operacija A(D)prestaje .

Može se definisati ponašanje algoritma T:- T(S,Q) = yes ako je S algoritam i operacija S(Q) daje rezultat ( završava se )- T(S,Q) = no ako S nije algoritam ili operacija S(Q) ne daje rezultat ( ne završava se )

ANT(D) if ( T(D,D) = yes ) loop forever else answer yes;

ANT(D) se ne završava ako i samo ako je T(D,D) = yes. Kako je D algoritam i možemo pisati:ANT(D) se ne završava akko se D(D) završava.

Ali pošto je ANT(D) algoritam, operacija se može izvršiti za D = ANT i tako dobijamo:

ANT(ANT) ne prestaje akko ANT(ANT) prestaje

DA NE

Pouka Tjuringa je da je nemoguće zaključiti kakvi će biti rezultati dobijeni od drugih,

čak i ako znamo sve o njima ( T zna S i D )

Page 9: Algoritamske osnove program a prevodilaca

Za svaki konkretan problem postoji nekoliko rešenja i za rešavanje istog može se dizajnirati više odgovarajućih algoritama, koji se dramatično razlikuju po svojoj efikasnosti. Ozbiljno poređenje ovih algoritama mora biti izvedeno na čvrstoj matematičkoj osnovi. Teorija računarske složenosti ima za cilj upravo to.

Kažemo da niz (an) asimptotski dominira niz (bn) ako postoje konstante n0 i M>0 takve da je:

( bn ) M( an), za sve n ≥ n0 .

U početku su samo dve stvari razmatrane: brzina izvršavanja (vremenska složenost) i uslov za skladištenje (prostorna složenost).Danas se drugi parametar uglavnom zanemaruje, osim za aplikacije na mašinama sa veoma malom količinom memorije, kao što su mobilni telefoni, ili mreže u kojima se ogromna količina podataka kopira na više lokacija zbog bržeg pristupa

Složenost algoritma iskazuje se asimptotskim ponašanjem niza koji predstavlja gornju granicu za broj računskih operacija (ili broj upoređivanja) dovoljnih da bi se algoritam realizovao. Zavisno od problema, najčešće se složenost izražava u zavisnosti od ulaznih podataka.

Sa O(an) označava se skup svih nizova (bn) koji su asimptotski dominirani nizom (an). Skup O(an) zovemo veliko O od (an ) i pišemo:

bn = O( an ) (an ) asimptotski dominira niz (bn)

Algoritamska složenost

Page 10: Algoritamske osnove program a prevodilaca

4 5 3 1 2

> 1> 15 >

> 1> 25 >

> 1> 2> 35 >

10

Analiza složenosti algoritma za sortiranje insertovanjem

Najlošiji slučaj (Worst case) složenosti ovog sortiranja je: T(n) = 1+2+3+...+(n-1) = O(n2)

Jer za dvočlani niz vrši se jedno poređenje, za tročlani dva poređenja...i za n-ti član n-1 poređenje.

T(n) = 0,5*n(n-1) = 0,5n2 – 0,5 n2 ( n0 = 1, M = 1)

Page 11: Algoritamske osnove program a prevodilaca

Osobine algoritama

Definisanost

Konačnost

Ula

z i iz

laz

Izvrši

vost

Determinisanost (određenost)

Posle izvršenja nekog algoritamskog koraka

strogo je definisan prelaz na sledeći

algoritamski korak.

Algoritamski korak izvršiv ako je čovek u stanju da ga izvrši za

konačno vreme (pomoću olovke i

papira)

Izvršenje svakog algoritma je postignuto posle konačno mnogo primena algoritamskih

koraka

Skup ulaznih veličina algoritma predstavlja

polazne veličine (podatke) zadatka koji se rešava. Skup izlaznih veličina jeste traženo rešenje (rezultat) postavljenog

zadatka

Page 12: Algoritamske osnove program a prevodilaca

Formalna definicija algoritma

Numerički metod je uređena četvorka ( Q , I , Ω , f )

Skup stanja izračunavanja

Ulazni skup

Izlazni skup

Pravilo izračunavanja

I Q

Ω Q

f : Q → Q i (qΩ)f(q)=q

Za svako x I definiše senumerički niz (xi); i= 0,1,2...

x0 = x xi = f ( x i –1 )

x = x0 x1 x2 ... xk-1 xk

f f f f f

f

Ω

Q

Kaže se da se numerički niz završava u k koraka ako je k najmanji prirodan broj za koji je xk iz Ω

Algoritam je numerički metod čija se primena završava posle konačno

mnogo koraka za svako x iz ulaznog skupa I.

Page 13: Algoritamske osnove program a prevodilaca

viši programski jezici, koji su proceduralni

neproceduralni jezici, sa usko specijalizovanom namenom (SQL, HTML, PHP, ASP )

mašinski jezici

simbolički mašinski jezici - asambleri i makro-asambleri

Računarski zavisni ( svaki tip računara ima svoj vlastiti

mašinski jezik )

Upotrebljava skraćene notacije od slova i brojeva za komunikaciju sa računarom

umesto binarnih grupa

Jezici na višem nivou apstrakcije, ali se u njima

prezentuju kompletne algoritamske strukture

Još veći nivo apstrakcije, “znaju” kako da izračunaju funkcionalne podatke bez specifikacije odgovarajućih

algoritama

Page 14: Algoritamske osnove program a prevodilaca

kompajler linker

Objektnikod

Izvršni kod

loader

memorija

Izvorni kod

KOMPAJLER

Kompajleri (engl. compiler) su programi koji izvorni program, napisan na višem (simboličkom) programskom jeziku, prevodeu objektni program napisan na mašinskom programskom jeziku prevodeći celi program odjednom i formirajući poseban programu mašinskom programskom jeziku koji se naziva izvršna verzija programa.

Objektni kod je verzija programa u mašinskom jeziku ali se ne može izvršavatijer može pozivati potprograme koji nisu konvertovaniu mašinski jezik u isto vreme kad i tekući program ilipozivati funkcije koje se nalaze u nekoj biblioteci..

Taj problem rešavaju linkeri i stvaraju izvršnu verziju programa.Izvršni fajl koga je linker stvorio poseduje logičke adrese.

Loader izvršava relokaciju ( logičke adrese zamenjuje fizičkim)

Page 15: Algoritamske osnove program a prevodilaca

interpreter

loader

memorija

Izvorni kod

INTERPRETER

Interpreteri su programi koji instrukcije izvornog programa napisanog na višem(simboličkom) programskom jeziku, prevode u instrukcije na mašinskom programskomjeziku prevodeći instrukciju po instrukciju programa tokom njegovog izvršavanja. Interpreter ne stvara objektnu formu već u isto vreme obrađuje internu formu programa i podatke.

Page 16: Algoritamske osnove program a prevodilaca

Faze zavisne od ciljnog jezika (sinteza) pripadaju zadnjem modulu kompajlera.

Faze zavisne od izvornog jezika (analiza) pripadaju prednjem

modulu kompajlera.

KOMPAJLERIKOMPAJLERI

Faze kompajliranja se grupišu na faze zavisne od izvornog jezika i na faze zavisne od ciljnog jezika:

Faze u kompajliranju:

Praktična važnost podele kompajlera na prednji i zadnji modul proizlazi iz činjenice da se prevođenje sa jednog izvornog jezika na više ciljnih jezika može ostvariti pravljenjem jednog prednjeg modula i više zadnjih modula kompajlera, a da se prevođenje sa više izvornih jezika na jedan ciljni jezik može ostvariti pravljenjem više prednjih i jednog zadnjeg modula.

Program „prerađuje“ na oblik pogodan za dalju analizu.

Izbacuju se komentari i višak razmaka između simbola,

prepoznaju se imena, rezervisane reči, simboli i brojevi i

zamenjuju se pogodnim simbolima

Proverava da li program

ima „gramatičkih grešaka“.

Poverava da li program ima „smisla“,

tj. da li su tipovi izraza koji se upoređuju

saglasni, da li su pri pozivu procedure parametri

odgovarajućeg tipa, itd.

Stvara se međuprikaz izvornogprograma s ciljem da se

prikaz lako generišei da se jednostavno

prevede u ciljni programMeđuprikaz transformiše seu funkcionlno ekvivalentne

ali brže i manje oblike

Stvara se ciljni program

Page 17: Algoritamske osnove program a prevodilaca

Znak (simbol)

Reč

Alfabet

Jezik

Osnovni univerzalni koncepti za sve

programe prevodioce

Jedinstven, nedeljiv element, kao što je: a, b, ..., A, B, ..., 0, 1, ..., +, -, *, itd.

Konačni niz znakova (string) oblikovan

nadovezivanjem nekog broja znakova.

Konačan skup znakova kojeg označavamo sa A.

Podskup skupa svih nizova znakova nad alfabetom

Ako je A alfabet i A * skup svih nizova znakova nad A, jezik L nad alfabetom A

jeste bilo koji podskup od A *, tj.

L A *

Nizovi znakova koji čine elemnte jezika nazivamo rečenicama. Odnosno jezik

je skup rečenica.

Metoda koja se koristi za specifikovanje skupa koji čini jezik je gramatika.

Da bi se napravio program koji prevodi izvorni program u objektni potrebno je

imati precizan opis izvornog jezika u pogodnijem obliku, tj opis u kome se ogleda

njegova struktura.Kako računar ne može da razume sadržaj

programa potrebno je opisati jezikkao niz simbola koji zadovoljavaju neka pravila.

Page 18: Algoritamske osnove program a prevodilaca

gde je:

N - konačan skup neterminalnih simbola (pomoćnih simbola),

T - konačan skup terminalnih simbola,

S N početni neterminalni simbol,

P - skup pravila, relacija između skupa N i skupa reči nad alfabetom N T.

- uređena četvorka G = (N,T,S,P)Reči jezika ( meta jezik )

kojim se opisuje jezik koji se razmatraReči jezika koji se opisuje(objekt jezik)

Pravila kojim se simbol S zamenjuje nizom simbola iz skupa N T, sve dok se ne

dobije reč koja je sastavljena od simbola iz T

text → { sentence }sentence → capital_word words dotwords → { ( word | capital_word ) }word → small_letter { small_letter }capital_word → capital_letter { small_letter }dot → ".

N = { text, sentence, words, word, capital_word, dot }

T = reči nad azbukom { a,b,c,d...,z } { A,B,C,...,Z} { . }

S = text

FORMALNA GRAMATIKA ZA OBIČAN TEKST

Pravila opisana proširenom BNF

{ ... } da označe da se sadržaj zagrada može pojaviti nijednom, jednom

ili višestruko( ... ) da označe grupisanje

| da označi alternative

Page 19: Algoritamske osnove program a prevodilaca

F,q,,,Q 0konačan

skup stanja

konačan skup znakov

a

alfabet jezika kojeg automat prihvata

funkcija prelaza

QQ:

govori automatu u koje stanje da napreduje, u zavisnosti od trenutnog stanja i trenutno pročitanog znaka

početno (inicijalno)

stanjestanje u kojem

se automat nalazi u trenutku kad još nijedan

znak nije obrađen

(q0 Q),

skup prihvatljivih

stanja

podskup skupa stanja Q (FQ)

je model diskretnog matematičkog sistema koji čitanjem znak po znak odlučuje je li

pročitani niz element zadatog jezika.

Sastoji se od konačnog broja stanja, prelaza između tih stanja i akcija koje automat obavlja

Stanje priprema informacije o prošlosti, tj. odražava promene na ulazu od početka sistema do sadašnjosti

Prelaz indicira promenu stanja i opisan je uslovom koji treba biti

zadovoljen da bi se omogućio prelaz.

Akcija je opis aktivnosti koja treba biti obavljena u datom trenutku

Page 20: Algoritamske osnove program a prevodilaca

Skener preuzima (skenira) znak po znak (programskog) teksta radi prepoznavanja simbola sastavljenih od zadanih znakova ili njihovih sekvenci.

Zadužen je za leksičku analizu.SKENERSKENER

Ignoriše znakove koji razdvajaju simbole (delimiteri ili separatori) i reaguje na nedozvoljene znakove ili njihove sekvence.

Obično je potprogram parsera. On prepoznaje jedan simbol i isporučuje ga parseru (zbog sintaksne analize).

Skener isporučuje parseru dve vrednosti – TOKEN (numeričku oznaku vrste simbola) i VREDNOST SIMBOLA.

Tokeni su jedinice koje imaju za jezik

smisleno značenje (npr. ključne reči, identifikatori,

konstante i sl.).

Page 21: Algoritamske osnove program a prevodilaca

Opšti skener preuzmima opis simbola i na osnovu njega prepoznaje i klasifikuje simbole.

omogućuje GRAMATIKA SIMBOLA.

Može se prikazati u grafičkom obliku pomoću DIJAGRAMA PRELAZA (engl. transition diagram) koji daje osnovu za sistematičan način

prepoznavanja simbola.

SKENERSKENER

OPISIVANJE SIMBOLA

za simbole sastavljene od jednog znaka, pojava tog znakaprevodi skener iz polaznog u završno stanje,

polazno stanje,

po jedno završno stanje za svaki prepoznati simbol,

zahteva uvođenje sledećih stanja skenera:

za simbole sastavljene od više znakova, pojava prvog znaka prevodi skener iz polaznog u prvo međustanje, a pojava svakog narednog znaka prevodi skener u sledeće međustanje, kada ima više međustanja.

usmereni graf u čiji sastav ulaze:

Čvorovi koji predstavljaju

STANJA SKENERA –

jedan od ovihčvorova je polazni, a više njih mogu biti

završni čvorovi.

USMERENE SPOJNICE

između čvorova koje ukazuju na

moguće prelaske iz

jednog u drugo stanje.

LABELE USMERENIH SPOJNICA - svaka labela

odgovara skupu

znakova.

ZNAKOVI od kojih se mogu

obrazovati labele.

Page 22: Algoritamske osnove program a prevodilaca

10

3

5

2

4

start dot_DOT

capital_letter

other_CAPITAL_WORD

small_letter

small_letter

small_letter

other

_WORD

SKENERSKENERPodrazumeva se da početno stanje skenera odgovara početnom čvoru.

Kada se ne nalazi u završnom stanju, skener preuzima znak i proverava

da li on pripada skupu znakova neke od labela

spojnica izlazećih iz čvora koji odgovara trenutnom

stanju skenera.Ako preuzeti znak

pripada skupu znakova jedne od labela pomenutih spojnica, skener prelazi u stanje

određeno čvorom koga ukazuje

dotična spojnica.

Ako ne pripada, tada je otkrivena leksička greška.

Kada dospe u stanje koje odgovara

završnom čvoru, skener je prepoznao

simbol i može da ponovo pređe u početno stanje.

U nekim od završnih stanja skener mora da vrati poslednje preuzeti znak, ako on ne pripada

prepoznatom simbolu, jer tada on pripada sledećem simbolu.

Page 23: Algoritamske osnove program a prevodilaca

10

3

5

2

4

start dot_DOT

capital_letter other

_CAPITAL_WORD

small_letter

small_letter

small_letter

other

_WORD

SKENERSKENER

On je .

Onje.

_CAPITAL_WORD _WORD

.

_DOT

Page 24: Algoritamske osnove program a prevodilaca

Proverava da li je ulazni niz simbola (tokena), dobijen od skenera, u skladu sa gramatikomPARSERPARSER

PROVERA: 2 pristupaPROVERA: 2 pristupa

SILAZNO PARSIRANJE Parser u toku izvođenja formira niz izvođenja koji se može prikazati u obliku DRVETA PARSIRANJA (engl. parse tree).

Izvođenja mogu biti:

Primeri nizova izvođenja i korespondentnog drveća

parsiranja za iskaz

Ovo je tekst.

(2) s desna: u svakom koraku se zamenjuje krajnje desni pojam.

(1) s leva: u svakom koraku se zamenjuje krajnje levi pojam

DRVO PARSIRANJA ZA IZVOĐENJE S LEVADRVO PARSIRANJA ZA IZVOĐENJE S DESNA

POGODNIJE JE POGODNIJE JE PRIMENITI IZVOĐENJE PRIMENITI IZVOĐENJE S LEVA, JERS LEVA, JER SE TADA SE TADA

SIMBOLI SA ULAZA SIMBOLI SA ULAZA PREUZIMAJU U PREUZIMAJU U

PRIRODNOM PRIRODNOM REDOSLEDUREDOSLEDU..

Page 25: Algoritamske osnove program a prevodilaca

Najpre se alternativama produkcija gramatike G

proizvoljno pridruže indeksi. Na primer, ako su a1, a2, ...,an sve

alternative produkcije za A, onda je a1 prva alternativa, a2

druga alternativa, itd.

Neka je w =a1 a2 . . . an ulazni niz za koji treba utvrditi je li u

jeziku generisanim sa G. Upotrebićemo kazaljku koja će

pokazivati na tekući znak ulaznog niza (na početku je to

znak a1).

Početni simbol S predstavlja koren stabla sintaksne analize i

istovremeno aktivni čvor.

Ako je aktivni čvor neterminalni simbol X, bira se njegova prva

alternativa i generiše k njegovih naslednika. Neka su označeni sa X1 , ..., Xk . Xi je novi aktivni čvor. Ako je k=0, aktivni čvor postaje

simbol koji sledi X.

Ako je aktivni čvor terminalni simbol, upoređuje se sa aktuelnim

simbolom ulaznog niza (simbolom na koji pokazuje kazaljka). Ako su

jednaki, kazaljka se pomiče za jedan simbol udesno. Aktivni čvor

postaje simbol desno od terminalnog simbola.

1111

2222

3333

4444

5555

Ako terminalni simbol nije jednak aktuelnom simbolu ulaznog niza, vraća se na čvor gde je bila upotrebljena prethodna produkcija i izvodi sledeća alternativa.

Ako nijedna alternativa nije moguća, vraća se na prethodni čvor, itd.

Ako su upotrebljene sve alternative i postupak izjednačavanja ulaznog niza w nije usešno izveden, ulazni niz nije u jeziku generisanom gramatikom G

Algoritam sintaksne analizeod vrha ka dnu

Page 26: Algoritamske osnove program a prevodilaca

S aSbS | aS | c1. aSbS2. aS 3. c

w = aacbc

S

S je koren i inicijalni aktivni čvor. Kazaljka pokazuje na simbol a.

a a c b c

Generisana su četiri naslednika S(prva alternativa). Terminal a jeaktivni čvor i jednak je tekućem simbolu. Kazaljka sepomiče za jedno mesto

aSbSAktivni čvor je neterminal S, pa se ponovo generišu četirinaslednika (prva alternativa).Aktivni čvor je terminal a, jednak je simbolu ulaznog niza,pa se kazaljka pomiče za jedno mesto aSbS

Neterminal S je ponovno aktivničvor.Generišu se naslednici odS prema prvoj alternativi

aSbS

Terminal a je aktivni čvor i nije jednak tekućem simbolu. Pokušava se s drugomalternativom.Terminal a je aktivničvor i nije jednak tekućem simbolu.

aS

Pokušava se s trećom alternativom.Prvo je terminal c aktivni čvor i jednak je tekućem simbolu. Kazaljka se pomiče za jedno mesto. Sada je terminal b aktivni čvor i jednak je tekućem simbolu. Kazaljka se pomiče za jedno mesto

c

Neterminal S je aktivni čvor. Generišu se naslednici prema prvoj alternativi. Posle toga je terminal aaktivni čvor i nije jednak tekućem znaku.Pokušava se s drugom alternativom.Opet je terminal a aktivni čvor i nije jednaktekućem znaku. Pokušava se s trećom alternativom. Tada je terminal c aktivni čvor i jednak je tekućem znaku. Kazaljka se pomiče za jedno mesto.

aSbSaSc

Kazaljka je iza poslednjeg znaka ulaznog niza, a u stablusu ostala još dva znaka, b i S.

Vraćamo se do mesta gde jeposlednji put ekspandirano stablo. Ne postoji više alternativa, pa se vraćamo na prethodno mesto ekspanzije stabla. Ni tu nije moguća nova ekspanzija, pa se dalje vraćamo.

Primer

Page 27: Algoritamske osnove program a prevodilaca

S a a c b c

aSbS

aS

Razmatra se druga alternativa.Aktivni čvor je terminala i jednak je tekućem znaku.Kazaljka se pomiče za jedno mesto.

Aktivni čvor je S. Generiše se podstablo izprve alternative. Novi aktivni čvor je terminal a i nije jednak tekućem znaku. Pokušava se s drugom alternativom. Opet je aktivni čvor terminal a. Pokušava se s trećom alternativom.Aktivni čvor je terminal c i jednak je tekućem znaku.

aSbSaSc

Kazaljka se pomiče za jedno mesto i pokazuje na teminal b. Aktivni čvor je b i jednak je tekućem znaku.Kazaljka se pomiče za jedno mesto i pokazuje na terminal c a aktivni čvor je neterminal S kojiposlije bezuspešne prve i druge produkcije prelazi u terminal c.

c

Kazaljka se pomiče i pokazuje iza poslednjeg znaka. Više nema aktivnih čvorova. Ulazni niz je u jeziku

Postoji veoma opasna zamka u predstavljenoj proceduri. Ako je gramatika rekurzivna s leva proces se ne bi nikada završio!U tom slučaju bi se smenom nekog neterminala (aktivnog čvora)dobio isti aktivni čvor, pa njegovom smenom opet isti itd

S

Sa

Sa

.

.

.

Page 28: Algoritamske osnove program a prevodilaca

S ABA abB aba

w = ababaababa

ab

Aab

AAa

a

AB

S

Premeštanje se sastoji od ispitivanja nizana vrhu liste i utvrđivanja postoji li desnastrana produkcije koja može biti izjednačena sa vrhom liste. Ako postojivrh liste se zamenjuje sa njom.Ako postoji više desnih strana produkcijekoje se mogu upotrebiti za redukovanjevrha liste, uz pretpostavku prethodnoguređenja produkcija, biće upotrebljena prva. Ako nije moguća nijedna redukcijasledeći simbol se smešta u listu i ponavlja se postupak.Ako se dosegne kraj ulaznog niza i nije moguća nijednaredukcija, vraća se na poslednje premeštanje gde je redukcija učinjenai pokušava se sa drugom redukcijom.Ulazni niz je u jeziku ako lista sadrži početni simbol i ako je dosegnut kraj niza.

Primer

Algoritam silazne sintaksne analize

Page 29: Algoritamske osnove program a prevodilaca

Principi semantičke analize

Značenje ( semantika ) programskogjezika opisuje se neformalno.

Proverava da li sintaksno stablo ima semantičkih grešaka.

Otkrivaju se greške kao što su:

Nedeklarisane varijable Funkcije povezanesa neodgovarajućim

argumentima

Nekompatibilnioperandi

Nepodudaranjetipova

Pristup zabranjenim

objektima

int a;int b;

...c = a + b

...

c je tipa int

Program leksički,sintaksno i semantičkiispravan

int a;char b;

...c = a + b

...

Program leksički,sintaksno ispravan,

a semantičkineispravan

Page 30: Algoritamske osnove program a prevodilaca

- Izložen je jedan deo puta kojim se treba proći da bi se došlo do rešenja nekog problema pomoću računara odnosno od samog nastanka problema do njegovog formulisanja u oblik koji je pogodan za računarsku obradu.

- Rešenje jednog problema se može na više načina dizajnirati a koji način je najbolji može se utvrditi analizom složenosti algoritama.

- Ulogu dekodera u komunikacionom sistemu između programera i procesora imaju programski prevodioci

- Programi prevodioci mogu proučavati sa više aspekata, na primer kao sistemi determinističkih konačnih automata, kao dielovi komunikacionog sistema između programera i procesora i na kraju krajeva, identično svim programima napisanim u nekom programskom jeziku, kao kód nekog problema.

Zaključci

Page 31: Algoritamske osnove program a prevodilaca