sunce se popelo visoko
lagano k'o na jutro uskrsno a ja ležim ispružen u svojoj mreži za spavanje to traje iz godine u godinu takav je moj znak u zodijaku možda sam stvarno roden u svojoj mreži za spavanje |
ponekad zaželim raditi
ali tu je lijencina u meni što u protunapad krece i u mrežu za spavanje jastuk mi podmece inace vidjevši druge kako rade dobro shvacam da ih to uništava a ja celicna sam zdravlja u svojoj mreži za spavanje |
niti mi je hladno niti vruce
niti sam gladan niti žedan vjetar mi lagano mrsi kosu i miluje kožu novca ipak treba naci no ja sam strašno snalažljiv i pustim da mi plate za patent moje mreže za spavanje |
to je izmišljena mreža za uživanje udobna kao Cadillac gotovo jedan dom jedno ljubavno gnijezdo ta moja mreža za spavanje cim se u zraku osjeti slatki afrodizijacki miris može se vidjeti potrgano lišce u mojoj mreži za spavanje |
ali iako ima mjesta za jednog
kada smo dvoje sve se mijenja i kida kad sve uzmem u obzir jednako nam je dobro na travi |
u svojoj mreži za spavanje
dans mon hamac (georges moustaki/ sanja seljan) |
Osim gramatika, uvodimo automate kao važnu klasu generatora jezika, posebno pogodnih za implementaciju na racunalima.
Teorija je konacnih automata koristan instrument za razvoj sustava s konacnim brojem stanja cije mnogobrojne primjene nalazimo i u informatici. Programi, kao što je npr. tekstovni editor, cesto su nacinjeni kao sustavi s konacnim brojem stanja. Na primjer, racunalo se zasebno takoder može promatrati kao sustav s konacno mnogo stanja. Upravljačka jedinica, memorija i vanjska memorija nalaze se teoretski u svakom trenutku u jednom od vrlo velikog broja stanja, ali jos uvijek u konacnom skupu stanja.
Iz svakodnevnog je života upravljacki mehanizam dizala još jedan dobar primjer sustava s konacno mnogo stanja. Prirodnost koncepta sustava s konacno mnogo stanja je razlog primjene tih sustava u razlicitim podrucjima, pa je i to vjerojatno najvažniji razlog njihova proucavanja.
I mi cemo prouciti jos jednu njihovu primjenu, a to je u programima za postupke sintaksne analize jezika ili u tzv. "prepoznavacima" jezika. Opci model automata dan je na sljedecem crtežu. Automat koji sadrži sve navedene 'dijelove' naziva se pretvarac , automat bez ulazne vrpce je generator, a automat bez izlazne vrpce je prepoznavac .
Sl. 4.1- Opci model automata.
U našim ce razmatranjima automati najcešce imati ulogu prepoznavaca. Ovisno o jeziku koji se prepoznaje, odnosno o tipu gramatike, postoje i vrste prepoznavaca dane na sljedecem crtežu.
SI. 4.2 - Chomskyjeva hijerarhija gramatika, njihovi odgovarajuci jezici i
prepoznavaci.
S obzirom da su regularni i beskontekstni jezici predmet našeg bavljenja, u nastavku cemo detaljnije opisati konacne i stogovne automate.
Konacni automat nema pomocne memorije. To je matematicki model sustava koji se nalazi u jednom od mnogih konacnih stanja. Stanje sustava sadrži obavijesti koje su dobivene na temelju dotadašnjih podataka i koje su potrebne da bi se odredila reakcija sustava iz iducih podataka. Drugim rijecima, radi se o prijelaznim stanjima koje izvodi dani ulazni znak iz danog alfabeta S pod utjecajem funkcije prijelaza. Svaki se ulazni znak može nalaziti samo u jednom prijelaznom stanju, pri cemu je dopušten povratak na prethodno stanje.
Definicija 4.1
Konacni automat je uredena petorka
M =( Q , S , d , q 0 , F )
gdje su:
Q konacni skup stanja
S alfabet
d funkcija prijelaza, definirna kao d : Q ´ P ( Q ) gdje je P ( Q ) particija od Q
q 0 pocetno stanje, q 0 Î Q
F skup završnih stanja , FQ
Primjer 4.1
Q={1, 2, 3, 4} S ={a, b, c, d} q 0 =1 F ={4}
d (1, a)={1} d (1, b)={2} d (1, c)={3}
d (2, c)={4} d (3, d)={4} d (4, a)={4}
Funkcija prijelaza može se prikazati tablicno. Tada se kaže da je to tablica prijelaza. Redovi tablice predstavljaju stanja , a stupci su oznaceni znakovima iz alfabeta i predstavljaju prijelaze . Na mjestu u redu oznacenom s q , q Î Q i stupcu oznacenom s x, x Î S , upisan je skup narednih stanja (bez viticastih zagrada) ako je funkcija d ( q , x) definirana, odnosno nije ništa upisano ako d ( q , x) nije definirano.
Primjer 4.2
Funkcija prijelaza iz primjera 4.1 može se prikazati kao tablica prijelaza:
Iz definicije funkcije prijelaza zakljucujemo da je to oznaceni, usmjereni graf ciji cvorovi odgovaraju stanjima automata, a grane su oznacene znakovima iz alfabeta. Ako, dakle, funkciju prijelaza prikažemo kao graf, dobivamo dijagram prijelaza . Oznacimo li u tom dijagramu pocetno stanje i skup završnih stanja, dobivamo konacni automat prikazan graficki. Pocetno stanje se oznacuje s:
a završno s:
Ako za znak a iz alfabeta postoji prijelaz iz stanja q u stanje p , tada ce grana u dijagramu prijelaza koja spaja q i p , s pocetkom u q i zavrsetkom u p , biti oznacena s a.
Primjer 4.3
Konacni automat iz primjera 4.1 sada se može prikazati dijagramom prijelaza:
Pocetno stanje je 1, a završno 4.
Dakle, konacni automat operira cineci niz pomicanja. Ako se radi o prepoznavacu, pomicanje je odredeno tekucim stanjem kontrole konacnog stanja i tekucim znakom na koji je postavljen citac ulazne vrpce. Prelaskom u iduce stanje pomice se i citac udesno za jedan znak.
Da bismo znali daljnje "ponašanje" konacnog automata, moramo znati tekuce stanje kontrole konacnog stanja i preostali niz znakova koji se sastoji od tekuceg znakana koji je pozicioniran citac i niza znakova na ulaznoj vrpci desno od tekuceg znaka. Te dvije obavijesti predstavljaju konfiguracij automata, preciznije danu sljedecom definicijom:
Definicija 4.2
Ako je M =( Q , S , d , q 0 , F ) konacni automat, par ( q , w) Î Q ´ S * naziva se konfiguracija automata M . ( q 0 , w) je pocetna konfiguracija , a ( q , e ), q Î F, jest završna (prihvatljiva) konfiguracija .
Pomak u M prikazan je binarnom relacijom na konfiguracijama. Ako d ( q , a) sadrži q ', tada vrijedi:
( q , aw) ( q ', w) za sve w Î S *
Ako postoje konfiguracije C 0 , C 1 , C 2 , ..., C k , tako da je
C i |— C i+1 0 £ i<k,
tada je
C 0 |— k C k
niz pomaka duljine k. Ako nije bitan broj pomaka, pišemo:
C |— * C'
što ima znacenje
C |— k C' k ³ 0
a ako je postojao najmanje jedan pomak
C |— + C' k>0
Deflnicija 4.3
Kaže se da je ulazni niz w prihvatljiv s M ako
( q 0 *w) |— * (q, e ), za neki q Î F
Jezik definiran (generiran) s M , L ( M ), jest skup nizova prihvatljivih s M , tj.
L ( M )={w: w Î S *, ( q 0 , w) |— * (q, e ), q Î F }
Konacni automati generiraju i prihvacaju regularne jezike.
Izvodenje regularnih gramatika
Ako konacni automati generiraju regularne jezike, onda postoji ekvivalentnost konacnih automata i gramatika tipa 3, tj. za konacni automat M postoji bar jedna gramatika tipa 3 tako da je L ( M )= L ( G ), i obrnuto, za danu gramatiku g tipa 3 postoji konacni automat M tako da je L ( G )= L ( M ).U oba cemo slucaja reci da su G i M ekvivalentni . Pojednostavljeno, tada ce postojati ekvivalentnost izmedu produkcija gramatike i funkcije (tablice ili dijagrama) prijelaza konacnog automata.
Ako su zadane produkcije regularne gramatike, problem izvodenja tablice (dijagrama) prijelaza ekvivalentnog konacnog automata dan je s nekoliko trivijalnih pravila:
(1) A ® aB|a
(2) A ® aA | a (rekurzija)
(3) A ® a
(4) A ® aB ç bC
Primjer 4.4
Regularnoj gramatici s produkcijama:
C ® n|nF|.I F ® .I|eS I ® n|nX
X ® eS S ® n|+U|-U U ® n
ekvivalentan je konacni automat definiran dijagramom prijelaza:
Pretpostavimo sada da trebamo izvesti gramatiku regularnog jezika L nad alfabetom A ={a 1 ,a 2 ..., a n }, znajuci svojstva njegovih recenica. Definirat cemo konacni automat dijagramom (tablicom) prijelaza u kojem ce prijelazi (terminali) biti oznaceni znakovima alfabeta jezika L , a 1 , a 2 , ..., a n , a stanja (neterminali) velikim slovima engleskog alfabeta, S 0 , S 1 ,..., S k :
|
|
|
|
|
|
|
|
|
a 1 |
a 2 |
a j |
a n |
|
® |
S 0 |
d (S 0 ,a 1 ) |
d (S 0 ,a 2 ) |
|
d (S 0 ,a 2 ) |
|
|
S 1 |
d (S 1 , a 1 ) |
d (S 1, a 2 ) |
|
|
|
Ä |
S i |
d (S i , a 1 ) |
d (S i, a 2 ) |
d (S i , a j ) |
d (S i , a n ) |
|
Ä |
S k |
d (S k , a 1 ) |
d (S k , a 2 ) |
d (S k , a j ) |
d (S k , a n ) |
|
|
|
|
|
|
|
|
Simbol ® oznacuje pocetno stanje, a simbol Ä završno stanje. Pravila izvodenja regularne gramatike iz ove tablice su sljedeca:
(1) Pocetni simbol oznacenje sa S 0 .
(2) Alternative produkcije koja zapocinje pocetnim simbolom bit ce:
S 0 ® a j d (S 0 , a j )
za sve parove (S 0 , a j )za koje je definiran prijelaz u naredno stanje.
(3) Napisati ostale produkcije za stanja (neterminali u produkcijama gramatike) S 1 do S k . Ako je S i konacno stanje, produkijama za S i dodati praznu alternativu.
U nastavku dajemo nekoliko primjera izvodenja gramatika jezika prirodnih brojeva i podskupa prirodnih brojeva s odredenim svojstvima.
Primjer 4.5 Jezik prirodnih brojeva
Tablica prijelaza konacnog automata koji prepoznaje jezik prirodnih
brojeva dana je s:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
|
® |
N |
|
A |
A |
A |
A |
A |
A |
A |
A |
A |
|
Ä |
A |
A |
A |
A |
A |
A |
A |
A |
A |
A |
A |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
iz cega slijede produkcije ekvivalentne regularne gramatike:
N ® 1A| 2A| 3A| 4A| 5A| 6A| 7A| 8A| 9A
A ® 0A| 1A| 2A| 3A| 4A| 5A| 6A| 7A| 8A| 9A| e
što se može transformirati u ekvivalentnu beskontektnu gramatiku:
N ® XA
A ® 0A | N | e
X ® l | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Primjer 4.6 Jezik prirodnih brojeva djeljivih s 4
Promatrajuci prirodne brojeve djeljive s 4, a to su 4, 8, 12, ..., 96, 100, 104, 108, 112, 116, zakljucit cemo da su 4 i 8 djeljivi s 4, a ako je broj veci od 10, djeljiv je s 4 ako je broj sacinjen od dvije posljednje znamenke djeljiv s 4 ili ako su dvije posljednje znamenke 00. Dalje cemo zakljuciti, promatrajuci dvoznamenkaste brojeve djeljive s 4, da ako je pretposljednja znamenka parna ili 0, posljednja mora biti 0, 4 ili 8, a ako je pretposljednja znamenka neparna, posljednja mora biti 2 ili 6. Jezik prirodnih brojeva djeljivih s 4 definiran je konacnim automatom u kojem je tablica prijelaza dana s:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
|
® |
A |
|
C |
D |
C |
B |
C |
D |
C |
B |
C |
|
Ä |
B |
B |
C |
D |
C |
B |
C |
D |
C |
B |
C |
|
|
C |
D |
C |
B |
C |
D |
C |
B |
C |
D |
C |
|
|
D |
B |
C |
D |
C |
B |
C |
D |
C |
B |
C |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Sada nije problem izvesti produkcije gramatike jezika prirodnih brojeva djeljivih s 4:
A ® 1C|2D|3C|4B|5C|6D|7C|8B|9C
B ® 0B|1C|2D|3C|4B|5C|6D|7C|8B|9C| e
C ® 0D|1C|2B|3C|4D|5C|6B|7C|8D|9C
D ® 0B|1C|2D|3C|4B|5C|6D|7C|8B|9C
Poslije faktorizacija i supstitucija na kraju dobivamo pregledniju ekvivalentnu gramatiku:
A ® XC | YD | ZB
X ® 1 | 3 | 5 | 7 | 9
Y ® 2 | 6
Z ® 4 | 8
B ® 0B | A | e
C ® 0D | XC | YB | ZD
D ® 0B | A
Primjer 4.7 Jezik prirodnih brojeva djeljivih s 3 i 6
Prirodni je broj djeljiv s 3 (v. primjer 3.5) ako mu je zbroj znamenaka djeljiv s 3. I ovaj, na prvi pogled kontekstni aspekt, moze biti riješen izvodenjem regularne gramatike, odnosno najprije definiranjem tablice prijelaza konacnog automata. Ako promatramo brojeve djeljive s tri, 3, 6 i 9 su prva tri broja koja su djeljiva s 3. Potom može slijediti 0, 3 , 6 ili 9. Ali, što ako broj pocinje s 1 ili 2, ili ako pocinje s 3, 6 ili 9, a potom slijedi 1, 2 ili mozda 8? Pažljivom analizom svih brojeva djeljivih s 3 zakljucit cemo da, na primjer, ako broj sadrži brojku 1, 4 ili 7, mora sadržavati ili još dvaput brojku 1, 4 ili 7 ili brojku 2, 5 ili 8, tako da se ukupnim zbrojem tih znamenki dobije broj koji je djeljiv s 3. Pritom eventualno umetnute 0 ne utjecu na ukupni zbroj. Sada nije problem definirati tablicu prijelaza koja sve to obuhvaca:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
|
® |
A |
|
C |
D |
B |
C |
D |
B |
C |
D |
B |
|
Ä |
B |
B |
C |
D |
B |
C |
D |
B |
C |
D |
B |
|
|
C |
C |
D |
B |
C |
D |
B |
C |
D |
B |
C |
|
|
D |
D |
E |
C |
D |
E |
C |
D |
E |
C |
D |
|
Ä |
E |
E |
C |
D |
E |
C |
D |
E |
C |
D |
E |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Na primjer, za ulazni niz w=2220 imamo niz pomaka:
(A, 2220) |— (D, 220) |— (C, 20) |— (B, 0) |— (B, e )
Sada se iz tablice prijelaza dobiju produkcije ekvivalentne gramatike:
A ® 1C|2D|3B|4C|5D|6B|7C|8D|9B
B ® 0B|lC|2D|3B|4C|5D|6B|7C|8D|9B| e
C ® 0C|1D|2B|3C|4D|5B|6C|7D|8B|9C
D ® 0D|1E|2C|3D|4E|5C|6D|7E|8C|9D
E ® 0E|1C|2D|3E|4C|5D|6E|7C|8D|9E| e
Poslije nekoliko faktorizacija i supstitucija, ova se regularna gramatika može transformirati u ekvivalentnu beskontekstnu gramatiku:
A ® XC | YD | ZB B ® 0B | A | e
C ® 0C | XD | YB | ZC D ® 0D | XE | YC | ZD
E ® 0E | XC | YD | ZE | e X ® 1 | 4 | 7
Y ® 2 | 5 | 8 Z ® 3 | 6 | 9
Ako bismo sada iz ove gramatike pokušali izvesti gramatiku prirodnih brojeva djeljivih sa 6, a znamo da su to parni brojevi djeljivi s tri, prilicno bismo se namucili. Vratimo li se konacnom automatu, problem ima jednostavno rješenje: treba umjesto završnih stanja B i E uvesti dva nova završna stanja, npr. F i G, kojima ce se osigurati da je broj djeljiv s tri i da je paran (tj. završava s 0, 2, 4, 6 ili 8):
Q ={A, B, 0, D, E, F, G} S={0, l, 2, 3, 4, 5, 6, 7, 8, 9} q 0 =A F ={F, G}
Evo tablice prijelaza konacnog automata koji generira prirodne brojeve djeljive sa 6:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
|
|
® |
A |
|
C |
D |
B |
C |
D |
F |
C |
D |
B |
|
|
|
B |
B |
C |
D |
B |
C |
D |
F |
C |
D |
B |
|
|
|
C |
C |
D |
F |
C |
D |
B |
C |
D |
F |
C |
|
|
|
D |
D |
E |
C |
D |
G |
C |
D |
E |
C |
D |
|
|
|
E |
G |
C |
D |
E |
C |
D |
G |
C |
D |
E |
|
|
Ä |
F |
F |
C |
D |
B |
C |
D |
F |
C |
D |
B |
|
|
Ä |
G |
G |
C |
D |
E |
C |
D |
G |
C |
D |
E |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pa sada nije problem napisati produkcije gramatike jezika prirodnih brojeva djeljivih sa 6, a potom ih transformirati u konacan oblik (beskontekstnu gramatiku):
A ® XC | YD | ZB | 6F B ® 0B | A
C ® 0C | XD | YB | ZC D ® 0D | XE | YC | ZD
E ® 0G | XC | YD | ZE | 6G F ® 0F | A | e
Nedeterministicki konacni automat
Iz definicije konacnog automata i funkcije prijelaza slijedi da je moguce d ( q , a)={ q ', q "}, gdje su q , q ' i q " iz F , a Î S , tj. moguc je pomak iz konfiguracije ( q , a w ) u stanje q ' ili q ", pa se kaže da je, opcenito konacni automat nedeterministicki .
Definicija 4.4
Ako je M = (Q, S , d , q 0 , F ) konacni automat, kažemo da je M deterministicki ako za d ( q , a) = q ' i d ( q , a) = q " slijedi da je q ' = q ".
Svi su konacni automati iz dosadašnjih primjera deterministicki.
Primjer 4.8
Primjer nedeterministickog konacnog automata:
Automat koji ima pomocnu memoriju sa strukturom stoga (stack) naziva se stogovni automat , odnosno stogovni prepoznavac ako je bez izlazne vrpce, sl. 4.3.
Sl. 4.3 - Stogovni prepoznavac .
Definicija 4.5
Stogovni automat je uredena sedmorka P =(Q, S , G , d , q 0 , Z 0 , F ), gdje su:
Q konacan skup stanja (kontrole konacnog stanja)
S ulazni alfabet
G alfabet znakova stoga (potisne liste)
d funkcija prijelaza, definirana kao
d : Q ´ ( S È { e }) ´ G ® Q ´ G *
q 0 pocetno stanje, q 0 Î Q,
Z 0 pocetni znak potisne liste, Z0 Î G
F skup završnih stanja, F Í Q,
Definicija 4.6
Konfiguracija stogovnog automata P jest ( q , w, a ) iz Q ´ S ,* ´ G *, gdje su:
q tekuce stanje
w preostali dio ulaznog niza
a niz znakova koji predstavlja sadržaj potisne liste; vrh je prvi znak niza
Pocetna konfiguracija je ( q 0 , w, Z 0 ), a završna konfiguracija ( q , e , a), q Î F , a Î G *.
Definicija 4.7
Pomak stogovnog automata P jest relacija |— p (ili samo |— ako se P podrazumijeva):
(q, aw, Z a ) |— { q ', w, g a )
ako d ( q , a, Z) sadrži ( q ', g ) za q Î Q, a Î S È { e },w Î S *, Z Î G . Kaže se da je ulazni niz w prihvatljiv s P ako
( q 0 , w , Z 0 ) |—* ( q , e , a )
Definicija 4.8
Jezik definiran s P , oznacen s L ( P ), jest skup nizova w prihvatljivih s P . To je opcenito beskontekstni jezik:
L ( P )={ w : w Î S * Ù ( q 0 , w , Z 0 ) |—*(q, e , a ), q Î F, a Î G *}
Primjer 4.9
Stogovni automat koji prepoznaje beskontekstni jezik L ={0 n l n : n ³ l} jest P =({q 0 , q 1 , q 2 }, {0, l}, {$, 0}, d , q 0 , $, {q 0 }), gdje je funkcija prijelaza d definirana sa:
d (q 0 , 0, $) = {(q 1 , 0$)} d (q 1 , 0, 0) = {(q 1 , 00)}
d (q l , l, 0) = {(q 2 , e )} d (q 2 , l, 0) = {(q 2 , e )}
d (q 2 , e , $) = { (q 0 , e ) }
Provjerimo je li ulazni niz w =000111 prihvatljiv:
(q 0 , 000111, $) |— (q 1 , 00111, 0$)
|— (q 1 , 0111, 00$)
|— (q 1 , lll, 000$)
|— (q 2 , ll, 00$)
|— (q 2 , 1, 0$)
|— (q 2 , e , $)
|— (q 0 , e , e )
Dakle, niz 000111 je prihvatljiv.
Opcenito je stogovni automat nedeterministicki. U tom slucaju, da bi automat prihvatio ulazni niz, mora proci kroz sve moguce prijelaze dok ne dosegne završno stanje. Na primjer, konstruirajmo automat koji ce prepoznavati beskontekstni jezik L ={ww R : w Î {a,b} + }.To ce biti stogovni automat P =({q 0 , q 1 , q 2 }{a, b}{Z, a, b}, d , q 0 , Z, {q 2 }), gdje je:
d (q 0 , a, Z)={(q 0 , aZ)}
d (q 0 , b, Z)={(q 0 , bZ)}
d (q 0 , a, a)={(q 0 , aa), (q 1 , e )}
d (q 0 , a, b)={(q 0 , ab)}
d (q 0 , b, a)={(q 0 , ba)}
d (q 0 , b, b)={(q 0 , bb), (q 1 , e )}
d (q 1 , a, a)={(q 0 , e )}
d (q 1 , b, b)={(q 1 , e )}
d (q 1 , e , Z)={(q 2 , e )}
P ce inicijalno prenijeti dio svog ulaza u stog, prema pravilima (1), (2), (4) i (5) i prvim alternativama pravila (3) i (6). Nedeterminizam je u pravilima (3) i (6). Na primjer, ako je ulazni niz abba, P može naciniti sljedece nizove premještanja:
(1) (q 0 , abba, Z) |— (q 0 , bba, aZ)
|— (q 0 , ba, baZ)
|— (q 0 , a, bbaZ)
|— (q 0 , e , abbaZ)
(2) (q 0 , abba, Z) |— (q 0 , bba, aZ)
|— (q 0 , ba, baZ)
|— (q 1 , a, aZ)
|— (q 1 , e , Z)
|— (q 2 , e , e )
Buduci da niz premještanja (2) okoncava u završnoj konfiguraciji, odnosno u završnom stanju q 2 , P prihvaca ulazni niz abba.
Definicija 4.9
Prošireni stogovni automat je uredena sedmorka P =(Q, S , G , d , q 0 , Z 0 , F), gdje je funkcija prijelaza definirana kao d : Q ´ ( S È { e }) ´ G * ® Q ´ G *. Znacenje ostalih simbola je nepromijenjeno.
Primjer 4.10
Definirajmo prošireni stogovni automat jezika L ={ww R : w Î {a,b}*}. To ce biti P =({p, q}{a, b}{a, b, S, Z}, d , q, Z, {p}), gdje je funkcija prijelaza:
(1) d (q, a, e ) = {(q, a)}
(2) d (q, b, e ) = {(q, b)}
(3) d (q, e , e ) = {(q, S)}
(4) d (q, e , aSa) = {(q, S)}
(5) d (q, e , bSb) = {(q, S)}
(6) d (q, e , SZ) = {(p, e )}
Za ulazni niz aabbaa P ce naciniti sljedeci niz premještanja:
(q, aabbaa, Z) |— (q, abbaa, aZ)
|— (q, bbaa, aaZ)
|— (q, baa, baaZ)
|— (q, baa, SbaaZ)
|— (q, aa, bSbaaZ)
|— (q, aa, SaaZ)
|— (q, a, aSaaZ)
|— (q, a, SaZ)
|— (q, e , aSaZ)
|— (q, e , SZ)
|— (q, e , e )
Najprije se prednji dio ulaznog niza premješta u stog. Potom se oznaka sredine, S, postavlja na vrh stoga. P zatim smješta sljedeci simbol ulaznog niza u stog i zamjenjuje aSa ili bSb sa S u listi. P nastavlja na isti nacin sve dok se ne iskoristi cijeli ulazni niz. Ako je SZ ostalo u listi, P briše SZ i unosi završno stanje.
Definicija 4.10
Neka je P =(Q, S , G , d , q 0 , Z 0 , F) stogovni ili prošireni stogovni automat. Kaže se da je niz w Î S * prihvatljiv automatom P s praznom potisnom listom ako je (q 0 , w , Z 0 ) + |— (q, e , e ) za neki q Î Q. Skup prihvatljivih nizova oznacujemo s L e ( P ).
Teorem 4.1
Neka je G =( N , T , P , S ) beskontekstna gramatika. Iz G se može defmirati stogovni automat R tako da je L e ( R ) = L ( G ).
Dakako, važno je upamtiti što teorem 4.1 tvrdi, dok nas njegov dokaz ne zanima. Dalje, valja primijetiti da za automat s praznom stogovnom listom ne trebamo imati nijedno završno stanje, jer su prazna potisna lista i prazan neprihvaceni dio ulaznog niza uvjeti okoncanja postupka prihvacanja, bez obzira u kojem se stanju kontrola završnog stanja zatekla.
Primjer 4.11
Definirajmo stogovni automat R tako da je L e ( R ) = L ( R ), gdje je G gramatika aritmetickih izraza:
E ® T | T+E
T ® F | T*F
F ® (E) | a
Stogovni automat ce biti R =({q}, S , G , d , q, Z, Æ ), gdje je skup završnih stanja prazan, a funkcija je prijelaza 5 definirana sa:
(1) d (q, e , E) = {(q, E+T), (q, T)}
(2) d (q, e , T) = {(q, T*F), (q, F)}
(3) d (q, e , F) = {(q, (E)), (q, a)}
(4) d (q, a, a) = {(q, e )}
(5) d (q, +, +) = {(q, e )}
(6) d (q, *, *) = {(q, e )}
(7) d (q, (, () = {(q, e )}
(8) d (q, ), )) = {(q, e )}
Na primjer, za ulazni niz a+a*a R ce, izmedu ostalog, naciniti sljedeca premještanja:
(q, a+a*a, E) |— (q, a+a*a, E+T)
|— (q, a+a*a, T+T)
|— (q, a+a*a, F+T)
|— (q, a+a*a, a+T)
|— (q, +a*a, +T)
|— (q, a*a, T)
|— (q, a*a, T*F)
|— (q, a*a, F*F)
|— (q, a*a, a*F)
|— (q, *a, *F)
|— (q, a, F)
|— (q, a, a)
|— (q, e , e )
U prethodnom je primjeru niz premještanja koje je nacinio stogovni automat prihvacajuci ulazni niz ekvivalentan krajnjem izvodenju slijeva recenice a+a*a pocevši s pocetnim simbolom E. Takva vrsta analize naziva se "silazna (top-down) sintaksna analiza" ili "predikatna analiza". Detaljnije o sintaksnoj analizi napisano je u sljedeca tri poglavlja.