280 likes | 508 Views
KONAČNI AUTOMATI. PREVOĐENJE LL JEZIKA. Latinka Petrović, dipl. ing. Prof. dr Milorad K. Banjanin. KONAČNI AUTOMAT. TEORIJA AUTOMATA. - disciplina koja se bavi proučavanjem apstraktnih mašina i problema koje oni mogu rešiti.
E N D
KONAČNI AUTOMATI. PREVOĐENJE LL JEZIKA Latinka Petrović, dipl. ing. Prof. dr Milorad K. Banjanin
KONAČNI AUTOMAT TEORIJA AUTOMATA - disciplina koja se bavi proučavanjem apstraktnih mašina i problema koje oni mogu rešiti. model diskretnog matematičkog sistema koji čitanjem znak po znak odlučuje da li je pročitani niz element zadatog jezika AUTOMAT - model diskretnog matematičkog sistema koji se sastoji od konačnog broja stanja, prelazaizmeđu tih stanja i akcija koje automat obavlja.
KONAČNI AUTOMAT AUTOMAT DETERMINISTIČKI KONAČNI AUTOMAT SA IZLAZOM NEDETERMINISTIČKI KONAČNI AUTOMAT SA ε-PRELAZIM DETERMINISTIČKI KONAČNI AUTOMAT BEZ IZLAZA DETERMINISTIČKI KONAČNI AUTOMAT NEDETERMINISTIČKI KONAČNI AUTOMAT Mealyjev automat Mooreov automat Klasifikacija automata
KONAČNI AUTOMAT (KA) je mašina koja, za dati niz znakova na ulazu, skače kroz sled stanja u zavisnosti od svoje funkcije prelaza Ulaz se čita znak po znak, sve dok nije u potpunosti pročitan Kada je ulazna reč u celosti pročitana, kažemo da automat staje. KA Zavisno od stanja u kojem se automat nalazi u trenutku stajanja, kažemo da automat ili prihvata ili ne prihvata (odbija) ulaznu reč. Skup svih reči koje automat prihvata zovemo JEZIK koji automat prihvata prihvatljivo stanje automat prihvata reč neprihvatljivo stanje automat odbija reč
Znak (simbol) Jedinstven, nedjeljiv element, kao što je: a, b, ..., A, B, ..., 0, 1, ..., +, -, *, itd. Alfabet Konačan skup znakova kojeg označavamo sa A. Osnovni univerzalni koncepti za sve klase automata Reč Konačni niz znakova (string) oblikovan nadovezivanjem nekog broja znakova. Jezik 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 * Teorija automata je usko povezana sa teorijom FORMALNIH JEZIKA
KONAČNI AUTOMAT je predstavljen uređenom petorkom početno (inicijalno) stanje podskup skupa stanja Q (tj. F⊆Q) skup prihvatljivih stanja stanje u kojem se automat nalazi u trenutku kad još nijedan znak nije obrađen (q0∈ Q), konačan skup stanja funkcija prelaza konačan skup znakova govori automatu u koje stanje da napreduje, u zavisnosti od trenutnog stanja i trenutno pročitanog znaka alfabet jezika kojeg automat prihvata
DKA prima niz ulaznih znakova, i za svaki ulazni znak obavlja prelaz u stanje koje određuje funkcija prelaza Kada je pročitan ceo ulazni niz, prihvati će ili odbiti niz znakova u zavisnosti od toga da li je DKA u prihvatljivom ili neprihvatljivom stanju. Konačni automat u kojem za svaki par stanja i ulaznog znaka postoji jedan i samo jedan prelaz u sledeće stanje konačni automat Deterministički DKA Konačni automat u kojem za svaki par stanja i ulaznog znaka može postojati nekoliko mogućih sledećih stanja Nedeterministički NKA automat konačni NKA obrađuje niz ulaznih znakova i prihvata niz ako i samo ako postoji neki sled prelaza koje može načiniti, a koji će ga dovesti u prihvatljivo stanje. Suprotnom, odbija niz znakova. može se naći u situaciji da koristeći isti znak postoje višestruki prelazi iz trenutnog stanja
koristi se za grafički prikaz konačnih automata (naziva se i dijagram prelaznih stanja, grafikon prelaznih stanja i shematski prikaz prelaznih stanja) pokazuje u koje stanje (ili stanja u slučaju NKA) konačni automat prelazi, u zavisnosti od trenutnog stanja i drugih ulaza Načini predstavljanja konačnih automata Dijagrami stanja Tabele prelaza
prevodi zapis algoritma A iz izvornog jezika Li u zapis algoritma u ciljnom jeziku Jezički procesor JP – jezički procesor, Li – izvorni jezik, Lg – jezik izgradnje, Lc - ciljni jezik Za potrebe prihvatanja programa jezika Li, gradi se formalni automat M Jezički procesor JP prevodi program px iz jezika Li u program py iz jezika Lc Faze i nivoi rada jezičkog procesora 1. faza analize izvornog programa 2. faza sinteze ciljnog programa
podaci za program izvorni program Kompajler objektni program Računar – apstraktna mašina rezultat vreme prevođenja vreme izvršavanja KOMPAJLER (prevodilac) je program koji služi za prevođenje izvornog koda nekog programa, pisanog u jednom programskom jeziku u ciljni kod izražen u ciljnom programskom jeziku. PREVOĐENJE - iz višeg programskog jezika (koji je čitljiv čoveku) u niži (koji je razumljiv računaru) FAZE PREVOĐENJA: Izvorni program 1. faza analize izvornog programa - leksička, sintaksna i semantička analiza 2. faza sinteze ciljnog programa - --generisanje međukoda --optimizacija međukoda, --generisanje koda --optimizacija koda Ciljni program
1 skeniranje - skener izvršava jednostavnije zadatke kao što su izostavljanje komentara, praznina 2 leksička analiza - leksički analizator obavlja ostale, složenije zadatke Leksička analiza - početna procedura u svakom kompajleru (prevođenje niza znakova u tokene) Programski kod koji treba prevesti je najčešće niz znakova Prva faza je grupisanje ovih znakova u „tokene“- jedinice koje imaju za jezik smisleno značenje (npr. ključne reči, identifikatori, konstante i sl.). Leksički analizator se u kompajlerima realizuje u 2 faze: Osnovni alati koji se koriste u leksičkoj analizi su REGULARNI IZRAZI i KONAČNI AUTOMATI Nakon leksičke analize, izvorni program preveden je u niz jedinstvenih znakova koji je osnova sledećeg procesa prevođenja- SINTAKSNU ANALIZU
Sintaksna analiza - Proverava se sintaksa programa PARSER U fazi sintaksne analize se od niza tokena koje je prosledio leksički analizator generiše drvo sintaksne analize, koje predstavlja apstraktnu predstavu strukture programa analizira tokene sa ulaza, proverava da li dati ulaz opisuje ulazni jezik, koji je zadat gramatikom OSNOVNI POJMOVI Gramatike Jezik Alfabet Konačan skup znakova. U slučaju programskih jezika mogu ga činiti znakovi koji čine program ili tokeni ukoliko je već izvršena leksička analiza J A G Konačni skupovi pravila čijom se primenom, polazeći od nekog fiksiranog simbola, izvode reči jezika. Skup reči, oblikovan znakovima u datom alfabetu. Programski jezici su po pravilu beskonačni.
Gramatika - uređena četvorka G = (N,T,P,S) gde je: N - konačan skup neterminalnih simbola (pomoćnih simbola), T - konačan skup terminalnih simbola (alfabet), S N početni neterminalni simbol, P - skup pravila, relacija između skupa N i skupa reči nad alfabetom N T.
1 2 Linearna sdesna ili tipa 3 ako je svaka produkcija iz P oblika A → xB A x A,BN, x T* Linearna sleva ako je svaka produkcija iz P oblika A → Bx ili A → x 3 Beskontekstna ili tipa 2 ako je svaka produkcija iz P oblika A → AN, (NUT)* Kontekstnaili tipa 1 ako je svaka produkcija iz P oblika → 4 Bez ograničenja ili tipa 0 ako produkcije ne zadovoljavaju nijedno od navedenih ograničenja. HIJERARHIJA CHOMSKOG - Klasifikacija gramatika prema obliku svojih produkcija:
Najčešće korišćene tehnike za efikasno parsiranje su LL(1) i LALR(1) parsiranje Skup reči koje sadrže samo simbole iz T, a koje možemo dobiti primenom pravila iz P polazeći od neterminala N čine jezik određen gramatikom G. BEZ OGRANIČENJA - ako je generisan gramatikom tipa 0 KONTEKSTAN - ako je generisan gramatikom tipa 1 Jezik BESKONTEKSTAN - ako je generisan gramatikom tipa 2 REGULARAN - ako je generisan gramatikom tipa 3 LL(1) parseri rade na bazi LL(1) gramatike POSMATRA SE JEDAN ZNAK SA ULAZA I NA OSNOVU NJEGA SE VRŠI ODLUKA O SLEDEĆEM KORAKU
Nakon uspešno provedene sintaksne analize, semantički analizator pokreće proces generisanja višeg međukoda. - proverava se da li program ima „smisla“, tj. da li su tipovi izraza koji se upoređuju saglasni. interpretacijska pravila koja povezuju izvođenje programa sa ponašanjem računara, pri čemu semantika jezika određuje skup dozvoljenih značenja Semantička analiza Pre generisanja višeg međukoda, proveravaju se SEMANTIČKA PRAVILA
Stanjepriprema 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. Akcijaje opis aktivnosti koja treba biti obavljena u datom trenutku.
Klasifikacija akcija u zavisnosti od tipa automata: Pristupna akcija - izvršava akciju prilikom ulaska u stanje. Prelazna akcija - izvršava akciju dok se obavlja određeni prelaz. Izlazna akcija - izvršava akciju za vreme izlaska iz stanja. Ulazna akcija – izvršava akciju zavisno od trenutnog stanja i ulaznih uslova.
FORMALNI JEZIK L se sastoji od skupa konačnih nizova elemenata konačnog skupa A znakova. Matematički neuređen par L={A, F} skup A se zove leksikon ili vokabular skupa F, dok se elementi skupa F zovu rečenice skup A se zove alfabet jezikaL, a elementi skupa F se zovu reči.
Matematički model DKA Uređena petorka (Q, Σ, δ, q0, F) konačni skup stanja (Q), konačni skup ulaznih znakova zvanog ulazni alfabet (Σ) funkcija prelaza ( ) početno (inicijalno) stanje (q0Q), skup prihvatljivih stanja (F Q). Uslov 1 r0 = q0, automat započinje rad u početnom stanju q0 Neka je M deterministički konačni automat i X = x0x1...xn je niz znakova nad alfabetom Σ. M prihvata niz znakova X ako postoji sled stanjar0,r1,...,rn, u Q uz sledeće uslove: Uslov 2 ri + 1 = δ(ri,xi) za i = 0,...,n-1 za svaki znak ulaznog niza X automat će preći iz trenutnog stanja u stanje upravljano funkcijom prelaza δ Uslov 3 rn F automat prihvata ulazni niz ako poslednji znak ulaznog niza X uzrokuje prelaz u jedno od prihvatljivih stanja
Matematički model NKA Uređena petorka (Q, Σ, δ, q0, F) Neka je M nedeterministički konačni automat i X je niz znakova nad alfabetom Σ. M prihvata niz znakova X ako postoji i reprezentacija niza X oblika x0x1...xn, xi{}i sled prelaza stanjar0,r1,...,rn, riQ koji zadovoljava sledeće uslove: konačni skup stanja (Q), konačni skup ulaznih znakova zvanog ulazni alfabet (Σ) funkcija prelaza ( ), P(Q) je partitivni skup (skup svih podskupova) skupa Q, je prazan niz početno (inicijalno) stanje (q0Q), skup prihvatljivih stanja (F Q). Uslov 1 r0 = q0, automat započinje rad u početnom stanju q0 ri = δ(ri-1,xi) za i = 1,...,n-1 Uslov 2 Automat koristi funkciju prelaza da odredi sledeće stanje koristeći trenutno stanje kao i upravo pročitan znak. Sledeće stanje NKA ne zavisi samo od trenutnog ulaznog događaja, već i od proizvoljnog broja narednih ulaznih događaja Automat prihvata ulazni niz ako poslednji znak ulaznog niza X uzrokuje prelaz u jedno od prihvatljivih stanja rn F Uslov 3
Jednodimenzionalne tabele stanja ULAZI su postavljeni na levoj strani IZLAZI su postavljeni na desnoj strani Dvodimenzionalne tabele stanja Postoje dva uobičajena načina za njihovo uređivanje PREDSTAVLJAJU SLEDEĆE STANJE AUTOMATA Tabela prelaza stanja (S: stanje, E: događaj, A: akcija, -: nevaljali prelaz) 1 Horizontalnadimenzija označava događaje Vertikalna dimenzija označava trenutna stanja 2 ćelije (preseci redova/kolona) u tablici sadrže sledeće stanje ukoliko se događaj dogodi Horizontalnadimenzija označava sledeća stanja Tabela prelaza stanja (S: stanje, E: događaj, A: akcija, -: nemogući prelaz) Vertikalna dimenzija označava trenutna stanja preseci redova/kolona u tablici sadrže događaj koji vodi ka nekom pojedinačnom sledećem stanju
Primer 1. • Koraci transformacije za crtanje dijagrama stanja iz tabele stanja 1 Nacrtati krugove koji predstavljaju zadata stanja 2 Za svako stanje potrebno je preći sve kolone u odgovarajućem redu i nacrtati strelicu u odredišno stanje/stanja START 3 Označiti stanje kao početno. Početno stanje je zadato u formalnoj definiciji automata. 4 Označiti jedno ili više stanja kao prihvatljiva stanja.
Primer 1. Dat je M – deterministički konačni automat gde je: Q={S1, S2} ={0,1} q0= S1 F={S1} δ je definisana sledećom tablicom prelaza: Ukoliko je ulazni znak 0, automat će preći u stanje S1 ukoliko je automat u S1 (prvi red), a sledeći ulazni znak 1, automat će ostati u stanju S1 ukoliko je automat u S2 (drugi red), a sledeći ulazni znak 1, automat će ostati u stanju S2 ={0,1} Ukoliko je ulazni znak 0, automat će preći u stanje S2 DIJAGRAM STANJA
Tokom procesa analize čita se znak po znak izvornog programa px . Ako je program (niz) px u jeziku Li, onda se nakon poslednjeg pročitanog znaka ispisuje da je niz px ispravno napisani program u jeziku Li. Ako program (niz) px nije u jeziku Li, nakon poslednjeg pročitanog znaka ispisuje se da niz px nije ispravno napisani program u jeziku Li i prevođenje se zaustavlja
Ciljni program generiše se tako da se ispisuje znak po znak programa py (niza znakova py), koji je u jeziku Lc i koji je prevod programa px.
Regularni izrazi (RI) se koriste za opis regularnih jezika. Ako je jezik moguće opisati regularnim izrazima onda je regularan i označava se L(r). Takođe, jezik je regularan ako postoji konačni automat koji ga prihvata. Regularni izrazi nad alfabetom A označuju određene regularneskupove, a definisani su na sledeći način: 1. Øje regularni izraz koji označava regularni skup Ø. 2. e je regularni izraz koji označava regularni skup {e}. 3. a iz A je regularni izraz koji označava regularni skup {a}. 4. Ako su p i q regularni izrazi koji označavaju regularne skupove PiQ, redom, tada su regularni izrazi i: - (p+q) je regularni izraz koji označava regularni skup PQ. - (pq) je regularni izraz koji označava regularni skup PQ. - (p) * je regularni izraz koji označava regularni skup P*.