Interpretacija programa Potisni automat Krunoslav Puljić 2015/2016
Potisni automat Potisni automat (PA) je proširenje konačnih automata (NKA) Upravljačkoj jedinici, glavi za čitanje i ulaznoj traci dodaje se potisni stog (LIFO) Koristi se za potrebe prihvaćanja konteksno neovisnih jezika
Model potisnog automata Osim čitanja znakova ulazne trake, upravljačka jedinica čita i jedan znak s vrha potisnog stoga Nakon čitanja znaka, s vrha stoga se skida pročitani znak, te se na vrh stoga vraća niz znakova Znakovi ulazne trake nazivaju se ulazni znakovi Znakovi na stogu nazivaju se znakovi stoga Ostalo je isto kao i kod NKA Upravljačka jedinica je u jednom od konačnog broja stanja Stanja su podijeljena na prihvatljiva i neprihvatljiva
Model potisnog automata a 1... a i... a n-1 Ulazna traka X m X m-1 Glava za čitanje X m-2... X 1 Upravljačka jedinica Stanje X 0 Potisni stog
Model potisnog automata Upravljačka jedinica donosi odluke: O promjeni sadržaja stoga O pomaku glave za čitanje O promjeni stanja Odluka se donosi na temelju: Stanja upravljačke jedinice Znaka na vrhu stoga Znaka na ulaznoj traci Odluku je moguće donijeti i bez čitanja znaka ulazne trake
Model potisnog automata Upravljačka jedinica odlučuje koji niz znakova se stavlja na vrh stoga: Prazni niz Budući da se čitanjem skida znak s vrha stoga, stavljanje praznog niza jednako je uzimanju jednog znaka s vrha stoga Niz od jednog znaka Na vrh stoga moguće je staviti isti znak koji je i pročitan, ili neki drugi znak Niz od više znakova...
Model potisnog automata Upravljačka jedinica odlučuje koji niz znakova se stavlja na vrh stoga:... Niz od više znakova Stog potisnog automata koristi se za čuvanje dijela generiranog međuniza Simulira produkciju u kojoj se nezavršni znak lijeve strane produkcije na vrhu stoga zamijeni s nizom znakova desne strane produkcije
Model potisnog automata Stanje upravljačke jedinice q Čita se znak a s ulazne trake Znak Z je na vrhu stoga Tijekom rada upravljačka jedinica primjeni jedan od dva prijelaza: Na temelju trojke (q,a,z) upravljačka jedinka mijenja stanje u novo stanje p i zamijeni znak na vrhu stoga nizom znakova Na temelju trojke (q,,z) upravljačka jedinka mijenja stanje u novo stanje p i zamijeni znak na vrhu stoga nizom znakova Odluka se donosi bez pročitanog znaka s ulazne trake
Model potisnog automata Odluka o prihvaćanju niza donosi se na isključivo jedan od dva moguća načina: Potisni automat M koji prihvaća prihvatljivim stanjem Ako upravljačka jedinica uđe u prihvatljivo stanje nakon što pročita sve znakove s ulazne trake, niz se prihvaća Ovakav jezik označava se s L(M) Potisni automat M koji prihvaća praznim stogom Isprazni li se stog čitanjem svih znakova niza, niz se prihvaća Ovakav jezik označava se s N(M)
Model potisnog automata Nije nužno da isti potisni automat prihvaća iste jezike prihvatljivim stanjem i praznim stogom Većinom je L(M) N(M)
Primjer potisnog automata Potisni automat za jezik N(M)={( n a) n n 1} Znak a je okružen jednakim brojem otvorenih i zatvorenih zagrada Ulazni znakovi potisnog automata su (, ) i a PA ima dva stanja: q 0 i q 1 Početno stanje je q 0, na vrhu stoga je znak K PA u stanju q 0 čita redom znakove sve do znaka a i stavlja jedan znak A na vrh stoga za svaku pročitanu otvorenu zagradu
Primjer potisnog automata Nakon što pročita znak a, PA prelazi u stanje q 1 u kojem uzima jedan znak A s vrha stoga za svaku pročitanu zatvorenu zagradu Ako je na kraju niza stog prazan, niz se prihvaća, tj. imamo jednak broj otvorenih i zatvorenih zagrada Skup znakova stoga je {A,K}
Primjer potisnog automata Prijelazi potisnog automata su određeni ovako: Prijelaz Stanje Ulaz Stog Novo stanje Novi vrh stoga Glava za čitanje 1. q 0 ( K q 0 AK Desno 2. q 0 ( A q 0 AA Desno 3. q 0 a A q 1 A Desno 4. q 1 ) A q 1 Desno 5. q 1 K q 1 Nema pomaka
Primjer potisnog automata Rad potisnog automata za niz (((a))) Navedeni niz se prihvaća jer se čitanjem znakova ispraznio stog Ako u nizu postoji veći broj otvorenih zagrada nego zatvorenih, stog se ne isprazni nakon pročitanih svih znakova niza Budući da stog nije prazan, niz se ne prihvaća Ako u nizu postoji veći broj zatvorenih zagrada nego otvorenih, stog ostaje prazan prije nego što su pročitani svi znakovi ulazne trake Daljnji prijelazi PA nisu definirani i nije moguće nastaviti s čitanjem Budući da nisu pročitani svi znakovi, niz se ne prihvaća
Primjer potisnog automata Neka se PA M definira slično kao M, osim što je stanje q1 prihvatljivo, a q0 neprihvatljivo M prihvaća jezik {( n a) m n 1, m 0, n m} Jezik L(M ) nije jednak jeziku N(M) Primjer: niz ((((a se prihvaća, jer nakon pročitanog niza automat ostaje u prihvatljivom stanju
Definicija potisnog automata Potisni automat je uređena sedmorka PA = (Q,,,, q 0, Z 0, F) Q konačan skup stanja konačni skup ulaznih znakova (abeceda) konačni skup znakova stoga (abeceda stoga) funkcija prijelaza sa Q ( { }) u 2 Q * q 0 Q početno stanje Z 0 početni znak stoga F Q skup prihvatljivih stanja
Definicija potisnog automata Funkcija prijelaza potisnog automata pridružuje trojci (q,a,z) konačni skup parova (p i, i ) Ako je PA u stanju q, i na ulazu čitamo znak a, i na vrhu stoga je znak Z, onda PA prelazi u jedno od stanja p i, vrh stoga se zamijeni odgovarajućim nizom i Niz i stavlja se na stog tako da se najprije spremi krajnje desni znak u nizu i Funkcija je nedeterministička isto kao i funkcija prijelaza NKA
Definicija potisnog automata Postoji li funkcija prijelaza (q,,z) = {(p 1, 1 ), (p 2, 2 ),... (p m, m )} prijelaz je definiran samo stanjem PA i znakom na vrhu stoga Ulazni znak nema utjecaj na prijelaz i glava za čitanje se ne miče na idući znak Prijelaz (q,,z) se naziva -prijelaz Kao kod -NKA Samo ovaj puta imamo i akciju na stogu
Primjer M1 = ({q 1,q 2,q 3 }, {0,1,2}, {N,J,K},, q 1, K, {q 3 }) (q 1,0,K) = {(q 1,NK)} (q 1,0,N) = {(q 1,NN)} (q 1,0,J) = {(q 1,NJ)} (q 1,2,K) = {(q 2,K)} (q 1,2,N) = {(q 2,N)} (q 1,2,J) = {(q 2,J)} (q 2,0,N) = {(q 2, )} (q 2,,K) = {(q 3, )} (q 1,1,K) = {(q 1,JK)} (q 1,1,N) = {(q 1,JN)} (q 1,1,J) = {(q 1,JJ)} (q 2,1,J) = {(q 2, )} M1 prihvaća jezik L(M1) = {w2w R w (0+1)*} M1 je deterministički potisni automat jer su svi skupovi kod funkcije prijelaza jednočlani
Konfiguracija potisnog automata Konfiguracija PA se zadaje stanjem q, nepročitanim dijelom ulaznog niza w i znakovima koji se nalaze na stogu Konfiguracija je uređena trojka (q,w, ) Neka je zadan PA M=(Q,,,, q 0, Z 0, F) Konfiguracija PA M mijenja se iz (q,aw,z ) u (p,w, ) akko skup (q,a,z) sadrži (p, ) a { } Promjena konfiguracije formalno se zapisuje pomoću relacije > M (q,aw,z ) > M (p,w, ) akko skup (q,a,z) sadrži (p, )
Konfiguracija potisnog automata M1 = ({q 1,q 2,q 3 }, {0,1,2}, {N,J,K},, q 1, K, {q 3 }) (q 1, 0012100, K) > M1 (q 1, 012100, NK) > M1 (q 1, 12100, NNK) > M1 (q 1, 2100, JNNK) > M1 (q 2, 100, JNNK) > M1 (q 2, 00, NNK) > M1 (q 2, 0, NK) > M1 (q 2,, K) > M1 (q 3,, )
Konfiguracija potisnog automata Znakom >* označava se refleksivno i tranzitivno okruženje relacije > (q 1, 0012100, K) >* (q 3,, ) Znakom > i označava se relacije > koje koristi i koraka (q 1, 0012100, K) > 8 (q 3,, )
Prihvaćanje jezika zadanim PA Prihvaćanje jezika potisnim automatom M=(Q,,,, q 0, Z 0, F) zadaje se na jedan od dva načina: Prihvaćanje prihvatljivim stanjem L(M) = {w (q 0,w,Z 0 ) >* (p,, ), za neki p F i *} p mora biti prihvatljivo stanje, stog ne mora biti prazan Prihvaćanje praznim stogom N(M) = {w (q 0,w,Z 0 ) >* (p,, ), za neki p Q} p ne mora biti prihvatljivo stanje, ali stog mora ostati prazan
Primjer M2 = ({q 1,q 2 }, {0,1}, {N,J,K},, q 1, K, ) (1) (q 1,0,K) = {(q 1,NK)} (7) (q 1,1,K) = {(q 1,JK)} (2) (q 1,0,N) = {(q 1,NN), (q 2, )} (8) (q 1,1,N) = {(q 1,JN)} (3) (q 1,0,J) = {(q 1,NJ)} (9) (q 1,1,J) = {(q 1,JJ), (q 2, )} (4) (q 2,0,N) = {(q 2, )} (10) (q 2,1,J) = {(q 2, )} (5) (q 1,,K) = {(q 2, )} (6) (q 2,,K) = {(q 2, )} Za razliku od M1, M2 nije deterministički potisni automat Npr. u prijelazu (q 1,0,N) = {(q 1,NN), (q 2, )} postoje dvije opcije Nedeterminizam postoji i za prijelaze 1, 2 i 9 Npr. za stanje q1 i ulazne znakove 0 i 1, te vrh stoga K M2 prihvaća jezik L(M2) = {ww R w (0+1)*}
Primjer Niz iz jezika N(M2) nema u sredini znak 2, kao što to ima niz jezika N(M1) Znak 2 u nizu w2w R omogućuje donošenje odluke o prekidu stavljanja znakova N i J na stog i o pokretanju usporedbe ostatka niza sa sadržajem stoga Budući da N(M2) nema u sredini znak 2, M2 ne može jednoznačno donijeti prethodnu odluku Zato funkcija prijelaza daje više mogućnosti za prijelaze (2) i (9) Isprazni li se stog barem za jedan od prijelaza, niz se prihvaća
Primjer M2 = ({q 1,q 2 }, {0,1}, {N,J,K},, q 1, K, ) Početak (q 1, 001100, K) (q 1, 01100, NK) (q 2, 001100, ) (q 1, 1100, NNK) (q 2, 1100, K) (q 1, 100, JNNK) (q 2, 1100, ) (q 1, 00, JJNNK) (q 2, 00, NNK) (q 1, 0, NJJNNK) (q 2, 0, NK) (q 1,, NNJJNNK) (q 2,, JJNNK) (q 2,, K) (q 2,, K) prihvati niz
Primjer 001100 je oblika ww R, gdje je w=001, pa se niz prihvaća Nedeterminizam PA sličan je nedeterminizmu NKA Postoji li mogućnost izbora više prijelaza, istodobno započinje s radom više determinističkih PA Uspije li barem jedan deterministički PA isprazniti stog čitanjem svih znakova ulaznog niza, niz se prihvaća
Deterministički PA Potisni automat M=(Q,,,, q 0, Z 0, F) je deterministički potisni automat (DPA) akko vrijede oba uvjeta: Ako je (q,,z) neprazni skup, onda za bilo koje stanje q Q, znak stoga Z i ulazni znak a mora vrijediti (q,a,z)= Skup (q,a,z) može imati najviše jedan element, za bilo koje stanje q Q, znak stoga Z i ulazni znak a { }
Deterministički PA Prvi uvjet ne dozvoljava mogućnost izbora između -prijelaza i prijelaza koji koristi ulazni znak Npr. takvi su prijelazi (2) i (9) u automatu M2: Iz (q 1, 001100, K) možemo u: (q 1, 01100, NK) ili (q 2, 001100, ) Drugi uvjet ne dopušta da u skupu (q,a,z) bude više od jednog elementa Npr. u M2 nedeterministički prijelazi su (2) i (9)
DPA i NPA Analogno definiramo nedeterministički PA Za razliku od NKA koji prihvaća istu klasu jezika kao i DKA, NPA prihvaća širu klasu jezika od DPA Npr. NPA M2 prihvaća jezik N(M2)={ww R }, ali za N(M2) nije moguće izgraditi DPA koji ga prihvaća NPA se često označava i samo s PA N se podrazumjeva, a D se navodi samo ako je potrebno
PA i KNG Dva PA su istovjetna akko prihvaćaju isti jezik PA M koji prihvaća praznim stogom istovjetan je nekom PA M koji prihvaća prihvatljivim stanjem PA prihvaćaju klasu konteksno neovisnih jezika
PA stog iz PA stanje Neka M2=(Q,,,, q 0, Z 0, F) prihvaća jezik L(M2) prihvatljivim stanjem Želimo izgraditi istovjetni PA M1 koji prihvaća praznim stogom Ideja: ako M2 uđe u jedno od prihvatljivih stanja, M1 isprazni svoj stog Za to se uvodi dodatni znak stoga X 0 Na početku rada M1 stavi X 0 na dno stoga M2 svojim prijelazima ne može skinuti X 0 sa stoga Ako M2 isprazni stog, a ne uđe u jedno od prihvatljivih stanja, na dnu stoga ostaje X 0 koji onemogućava da M1 prihvati niz
PA stog iz PA stanje Neka je M2=(Q,,,, q 0, Z 0, F) i neka M2 prihvaća jezik L(M2) prihvatljivim stanjem PA M1 koji prihvaća praznim stogom definira se ovako: M1=(Q {q 0,q e },, {X 0 },, q 0, X 0, ) Dokazuje se da je M1 istovjetan M2
PA stog iz PA stanje Neka je M2=(Q,,,, q 0, Z 0, F) i neka Funkcija prijelaza gradi se ovako: 1. (q 0,,X 0 ) = {(q 0,Z 0 X 0 )} M1 prelazi iz svoje početne konfiguracije u početnu konfiguraciju od M2 i ostavlja X 0 na dnu stoga 2. U skup (q,a,z) stavi se sve iz skupa (q,a,z) Za sve q Q, a { }, Z Tako sa M1 simuliramo rad M2
PA stog iz PA stanje Neka je M2=(Q,,,, q 0, Z 0, F) i neka Funkcija prijelaza gradi se ovako: 3. U skup (q,,z) dodajemo -prijelaz (q e, ) -prijelazi dodaju se za sva stanja iz skupa prihvatljivih stanja F i za sve znakove stoga Z iz {X 0 } Ako M2 uđe u jedno od prihvatljivih stanja, skup prijelaza proširuje se -prijelazom u stanje q e, a sa vrha stoga se uzme jedan znak
PA stog iz PA stanje Neka je M2=(Q,,,, q 0, Z 0, F) i neka Funkcija prijelaza gradi se ovako: 4. U skup (q e,,z) dodajemo -prijelaz (q e, ) -prijelazi dodaju se za sve znakove stoga Z iz {X 0 } -prijelazi u stanju q e prazne čitav stog, uključujući i znak X 0
PA stanje iz PA stog Analogno prethodnom Kada M1 isprazni stog, u M2 konstruiramo -prijelaz u jedino prihvatljivo stanje q f
KNG = PA stog Nedeterministički PA prepoznaje klasu konteksno neovisnih jezika Nije potrebno navoditi način prihvaćanja nizova, jer je pokazano da su oba načina istovjetna Naravno, ne u istom potisnom automatu Za bilo koji konteksno neovisni jezik L postoji NPA M, koji prihvaća jezik praznim stogom, takav da je N(M)=L
KNG = PA stog Neka je KNJ zadan gramatikom G=(V,T,P,S) koja ima sve produkcije u Greibachovom normalnom obliku: A a A V, a T, V* a je završni znak, je niz nezavršnih znakova Svaka KNG se može svesti u istovjetnu gramatiku u Greibachovom normalnom obliku
Konstrukcija PA stog iz KNG Za gramatiku G=(V,T,P,S) konstruiramo potisni automat M={Q,,,, q 0, Z, F)} Skup stanja PA M je skup od samo jednog stanja q Skup ulaznih znakova jednak je skupu završnih znakova gramatike Skup znakova stoga jednak je skupu nezavršnih znakova gramatike V Početno stanje q 0 jednako je jedinom stanju q
Konstrukcija PA stog iz KNG Za gramatiku G=(V,T,P,S) konstruiramo potisni automat M={Q,,,, q 0, Z, F)} Početni znak stoga Z 0 je početni nezavršni znak gramatike S Skup prihvatljivih stanja F je prazan skup PA M prihvaća praznim stogom Funkcija prijelaza zadaje se ovako: (q,a,a) sadrži (q, ) akko postoji produkcija A a
Konstrukcija KNG iz PA stog Analogno se može za dani PA koji prihvaća praznim stogom konstruirati KNG
Konteksno neovisni jezici KNJ Nedeterministički potisni automat NPA Deterministički konteksno neovisni jezici DKNJ Regularni jezici RJ Deterministički potisni automat DPA Konačni automati KA
Svojstva kontekstno neovisnih jezika Na koje operacije je klasa KNJ zatvorena a na koje nije? Kojim jezicima dokazujemo nezatvorenost na presjek? Potražite lemu o pumpanju za KNJ Potražite primjene leme o pumpanju za KNJ (npr. na a n b n c n ) Može li se postići više ako imamo više stogova na raspolaganju?
Svojstva zatvorenosti KNJ-a Jezik je konteksno neovisan akko postoji: konteksno neovisna gramatika, ili potisni automat...koji ga generira
Svojstva zatvorenosti KNJ-a Klasa KNJ zatvorena je na operacije: Unije Nadovezivanja Kleenovog operatora Supstitucije Klasa KNJ nije zatvorena na operacije: Presjeka Komplementa Presjek KNJ i RJ je KNJ
Svojstva zatvorenosti KNJ-a Klasa KNJ zatvorena je na uniju: Neka su G 1 =(V 1,T 1,P 1,S 1 ) i G 2 =(V 2,T 2,P 2,S 2 ) KNG koje generiraju zadane KNJ L 1 i L 2 Definiramo G 3 =(V 3,T 3,P 3,S 3 ) za L 1 U L 2 kao: V 3 =V 1 UV 2 U{S 3 } S 3... T 3 =T 1 UT 2 P 3 =P 1 UP 2 U{S 3 S 1 S 2 }
Svojstva zatvorenosti KNJ-a Klasa KNJ zatvorena je na nadovezivanje: Neka su G 1 =(V 1,T 1,P 1,S 1 ) i G 2 =(V 2,T 2,P 2,S 2 ) KNG koje generiraju zadane KNJ L 1 i L 2 Definiramo G 4 =(V 4,T 4,P 4,S 4 ) za L 1 L 2 kao: V 4 =V 1 UV 2 U{S 4 } S 4... T 4 =T 1 UT 2 P 4 =P 1 UP 2 U{S 4 S 1 S 2 }
Svojstva zatvorenosti KNJ-a Klasa KNJ zatvorena je na Kleenov operator: Neka je G 1 =(V 1,T 1,P 1,S 1 ) KNG koja generira zadani KNJ L 1 Definiramo G 5 =(V 5,T 5,P 5,S 5 ) za L 1 * kao: V 5 =V 1 U{S 5 } S 5... T 5 =T 1 P 5 =P 1 U{S 5 S 1 S 5 ε}
Svojstva zatvorenosti KNJ-a Klasa KNJ zatvorena je na supstituciju: Supstitucija sve završne znakove a i, i=1,...,k jezika G zamijenimo nizovima znakova nekog KNJ G i
Svojstva zatvorenosti KNJ-a Klasa KNJ zatvorena je na supstituciju: Neka je G=(V,T,P,S) KNG koja generira zadani KNJ L Definiramo G =(V,T,P,S ) za L sups kao: V =VUV 1 U V 2 U... UV k V... T =T 1 U T 2 U... UT k S =S P =P 1 U P 2 U... UP k U produkcijama od G svaki završni znak od a i zamijenimo s početnim nezavršnim znakom S i gramatike G i
Svojstva nezatvorenosti KNJ-a Klasa KNJ nije zatvorena je na presjek: Kasnije ćemo dokazati da jezik L={a i b i c i : i>0} nije konteksno neovisan Pomoću leme o pumpanju za KNJ S druge strane, jezici L 1 ={a i b i c j : i,j>0} i L 2 ={a j b i c i : i,j>0} jesu konteksno neovisni Lako konstruiramo PA koji ih prepoznaje Vrijedi da je L=L 1 L 2 Dakle, presjek dva KNJ ne mora biti KNJ
Svojstva nezatvorenosti KNJ-a Klasa KNJ nije zatvorena je na komplement: Pretpostavimo da je komplement KNJ opet KNJ Vrijedi da je L 1 L 2 = (L C 1 U L 2C ) C Ispada da je presjek dva KNJ opet KNJ Kontradikcija s prethodnim
Svojstva nezatvorenosti KNJ-a Presjek KNJ i RJ je KNJ: Preko kartezijevog produkta dva automata Neka je zadan PA M1=(Q 1,Σ,Γ,δ 1,q 0,Z 1,F 1 ) Neka je zadan DKA M2=(Q 2,Σ,δ 2,p 0,F 2 ) Gradimo PA M =(Q,Σ,Γ,δ,q 0,Z 0,F ) koji prihvatljivim stanjem prihvaća (konteksno neovisan) jezik L=L 1 L 2 Q = Q 1 Q 2 q 0 =(p 0,q 0 ) F = F 1 F 2
Svojstva nezatvorenosti KNJ-a Presjek KNJ i RJ je KNJ: Gradimo PA M koji prihvatljivim stanjem prihvaća (konteksno neovisan) jezik L=L 1 L 2 Funkcija prijelaza δ ((p,q),a,x) sadrži ((p,q ),γ) akko δ 2 (p,a)=p, i (q, γ) iz δ 1 (q,a,x)
Svojstvo napuhavanja Lema o pumpanju za KNJ
Primjer Svojstvo napuhavanja
PA s više stogova
Literatura Siniša Srbljić: Jezični procesori 1 [JP1] Siniša Srbljić: Jezični procesori 2 [JP2]