A1. Generatív nyelvtan definíciója, levezetés, nyelvtan által generált nyelv fogalma. Chomsky nyelvosztályok. DEF: Generatív nyelvtannak egy G=(N,Σ,P,S) rendezett négyest nevezünk, ahol: N nemterminális ábécé Σ terminális ábécé amire N Σ= S N a kezdőszimbólum P pedig α β alakú átjárási szabályok véges halmaza, ahol α,β (N Σ)* és α-ban van legalább egy nemterminális betű. DEF: Az (N Σ)* halmaz felett bevezetünk egy G -vel jelölt relációt, amit közvetlen derivációnak (levezetési relációnak) nevezünk: tetszőleges γ,δ (N Σ)*-ra akkor és csak akkor áll fenn γ G δ, ha van olyan α,β (N Σ)* szavak, amelyekre fennállnak, hogy γ=α αβ, δ=α ββ. DEF: A G=(N,Σ,P,S) nyelvtan által generált nyelv: L(G)={u Σ* S G * u}. DEF: (Chomsky nyelvosztályok) Azt mondjuk, hogy a G=(N,Σ,P,S) nyelvtan: 0 típusú (kifejezés struktúrájú), ha rá semmilyen korlátozás nincs. 1 típusú (környezetfüggõ), ha P-ben minden szabály αaβ αδβ alakú, ahol δ λ. Kivétel lehet az S λ szabály, ekkor azonban S nem szerepelhet semelyik szabály jobb oldalán. 2 típusú (környezetfüggetlen), ha P-ben minden szabály A α alakú. 3 típusú (reguláris), ha P-ben minden szabály A xb vagy A x alakú. A2. Véges automata fogalma, nemdeterminisztikus és determinisztikus automaták ekvivalenciája. DEF: Az M=(Q,Σ,δ,q 0,F) rendszert nemdeterminisztikus automatának nevezzük, ahol: Q egy nemüres véges halmaz, az állapotok halmaza Σ az input ábécé q 0 Q a kezdőállapot F Q a végállapotok halmaza δ: Q Σ P(Q) egy leképezés, az átmenetfüggvény. DEF: Azt mondjuk, hogy az M=(Q,Σ,δ,q 0,F) automata determinisztikus, ha teljesül, hogy minden q Q és a Σ esetén a δ(q,a) halmaz legfeljebb egy elemű. TÉTEL: A nemdeterminisztikus automatákkal felismerhető nyelvek osztálya megegyezik a determinisztkus automatákkal felismerhető nyelvek osztályával. BIZ: (a) Először is észrevesszük, hogy ha egy nyelv felismerhető determinisztikus automatával akkor felismerhető nemdeterminisztikus automatával is, hiszen a determinisztikus automata a nemdeterminisztikusnak speciális esete. (b) A másik irányú tartalmazás igazolásához legyen M=(Q,Σ,δ,q 0,F) tetszőleges nemdeterminisztikus automata. Megadunk egy M =(Q,Σ,δ,q 0,F ) determinisztikus automatát, amelyre L(M )=L(M). Definiáljuk M -őt a következőképpen: Q =P(Q) q 0 ={q 0 } F = {S Q S F } δ : Q Σ Q az a leképezés amelyre tetszőleges S Q és a Σ esetén δ (S,a)= q S δ(q,a).
Megmutatjuk, hogy L(M )=L(M). Először vegyünkegy w L(M) szót. Legyen w= a 1 a 2 a k, ahol a i Σ. Mivel w L(M), vannak olyan q 1,,q k Q állapotok, hogy q 1 δ(q 0,a 1 ),,q k δ(q k-1,a k ) és q k F. Legyenek S 0,,S k Q azon állapotai M -nek amelyekre teljesül S 0 =q 0, S 1 =δ (S 0,a 1 ),,S k =δ (S k-1,a k ). A δ átmenetfüggvény definíciója miatt az is igaz, hogy q 1 S 1,,q k S k. Mivel q k F, ezért S k F, tehát S k F. Következésképpen w L(M ). A fordított irányú tartalmazás igazolásához vegyünk egy w L(M ) szót és újra tegyük fel, hogy w= a 1 a 2 a k. Mivel w L(M ) vannak olyan S 0,,S k Q állapotok, hogy S 0 =q 0, S 1 =δ (S 0,a 1 ),,S k =δ (S k-1,a k ).és S k F. Ez utóbbi tartalmazás miatt S k F, tehát van olyan p k S k, amelyre p k F. Másrészt a δ definícoja miatt vannak olyan p 0,,p k-1 Q állapotok, amelyekre p 0 S 0,,p k-1 S k-1, és p 1 δ(p 0,a 1 ),,p k δ(p k-1,a k ). Mivel S 0 ={q 0 }, az is igaz, hogy p 0 =q 0, következésképpen w L(M). A3. Reguláris kifejezés, általa meghatározott nyelv. A reguláris nyelvek 3 típusúak. DEF: Legyen Σ egy ábécé. A Σ feletti reguláris kifejezésekhalmaza a (Σ {,(,),+,*})* halmaz legszűkebb olyan U részhalmaza, amelyre az alábbi feltételek teljesülnek: az szimbólum eleme u-nak Minden a Σ-ra az a szimbolum eleme U-nak Ha R 1,R 2 U, akkor (R 1 )+(R 2 ), (R 1 )(R 2 ), és (R 1 )* is elemei U-nak. DEF: Legyen R egy Σ feletti reguláris kifejezés. Az R által meghatározott R nyelvet a következőképen definiáljuk: Ha R= (mint szimbólum), akkor R = (mint nyelv) Ha R=a (mint szimbólum), akkor R ={a} (mint nyelv) Ha R=(R 1 )+(R 2 ), akkor R = R 1 R 2 Ha R=(R 1 )(R 2 ), akkor R = R 1 R 2 Ha R=(R 1 )*, akkor R = R 1 * // Továbbá, egy L Σ* nyelvről azt mondjuk, hogy reguláris nyelv, ha reprezentálható reguláris kifejezéssel, vagyis, ha van olyan Σ feletti R reguláris kifejezés, melyre L= R. TÉTEL: Tetszőleges Σ ábécé esetén a következők egymással megegyeznek: a Σ feletti 3 típusú nyelvek osztálya a Σ feletti automatával felismerhető nyelvek osztálya a Σ feletti reguláris nyelvek osztálya. LEMMA: Tetszőleges Σ ábécé esetén minden Σ feletti L reguláris nyelv generálható 3 típusú nyelvtannal. BIZ: A bizonyítást az L-et reprezentáló reguláris kifejezés struktúrája szerinti indukcióval végezzük. (i) Legyen L= R, ahol R=. Ez esetben L= generálható a G=({S},Σ,,S) nyelvtannal mivel egyetlen terminális szó sem vezethető le az S-ből. Továbbá G 3 típusú, mivel egyetlen szabálya sincs. (ii) Legyen L= R, ahol R= a. Ekkor L={a} generálható a G=({S},Σ,{S a},s) nyelvtannal ami nyilvánvalóan 3 típusú. (iii/a) Tegyük fel, hogy L= R ahol R=(R 1 )+(R 2 ). Ekkor L=L 1 L 2, ahol L 1 = R 1 és L 2 = R 2 Σ feletti reguláris nyelvek. Mivel R 1 és R 2 részkifejezései R-nek, az indukció feltevés értelmében L 1 és L 2 generálhatók a G 1 =(N 1,Σ,P 1,S 1 ) és G 2 =(N 2,Σ,P 2,S 2 ) 3 típusú nyelvtanokkal. Az általánosság megszorítása nélkül az is feltehető, hogy N 1 N 2 =. Megmutatjuk, hogy L is generálható 3 típusú nyelvtannal. Legyen G=(N 1 N 2 {S},Σ,P 1 P 2 {S S 1,S S 2 },S), ahol S egy új szimbólum. Ekkor nyilvánvaló, hogy G is 3 típusú, és L(G)=L 1 L 2. (iii/b) Tegyük fel, hogy L= R ahol R=(R 1 )(R 2 ). Ekkor L=L 1 L 2, ahol L 1 = R 1 és L 2 = R 2 Σ feletti reguláris nyelvek. Csakúgy mint az a) pontban, az indukció feltevés értelmében most is feltehető, hogy L 1 és L 2 generálhatók G 1 és G 2 3 típusú nyelvtanokkal. Legyen most G=(N 1 N 2,Σ,P,S 1 ), ahol P a legszűkebb olyan szabályhalmaz, amire teljesülnek a következő feltételek: Ha A xb P 1, akkor A xb P Ha A x P 1, akkor A xs 2 P
P 2 minden eleme P-nek is eleme. Megint csak nyilvánvaló, hogy G is 3 típusú, és L(G)=L 1 L 2. (iii/c) Tegyük fel, hogy L= R ahol R=(R 1 )*. Ekkor L=L 1 *, ahol L 1 = R 1 egy Σ feletti reguláris nyelv. Az indukció feltevés értelmében L 1 generálható az a) pontban szereplő G 1 3 típusú nyelvtannal. Legyen G=(N 1 {S},Σ,P,S) az a nyelvtan, amelyben S egy uj nemterminális, P pedig a legszűkebb olyan szabályhalmaz, amire teljesülnek a következő feltételek: S S 1, S λ P Ha A xb P 1, akkor A xb P Ha A x P 1, akkor A xs P. Nyilvánvaló, hogy G is 3 típusú, és könnyen igazolható, hogy L(G)=L 1 *. A4. A 3 típusú nyelvek automatával való felismerhetősége. DEF:Tetszőleges G=(N,Σ,P,S) nyelvtan esetén az A B alakú szabályokat láncszabályoknak nevezzük.amennyiben P-ben nincsenek lancszabályok,azt mondjuk,hogy G láncszabálymentes. LEMMA:Legyen G=(N,Σ,P,S) környezetfüggetlen nyelvtan.megadható olyan G =(N,Σ,P,S) láncszabálymentes környezetfüggetlen nyelvtan, amelyre L(G )=L(G).Amennyiben G 3 típusú,úgy G is 3 típusú lesz. LEMMA:Legyen G=(N,Σ,P,S) 3 típusú láncszabálymentes nyelvtan.akkor van olyan G =(N,Σ,P,S) 3 típusú nyelvtan,hogy L(G )=L(G). és P -ben minden szabály A ab vagy A λ alakú, ahol A,B N és a Σ. LEMMA: Tetszőleges Σ ábécé feletti 3 típusú nyelv felismerhető automatával. BIZ: Vegyünk egy Σ ábécé feletti 3 típusú nyelvet. Akkor L=L(G), valamely G=(N,Σ,P,S) 3 típusú nyelvtanra. A tétel igazolásához elegendő megadni egy olyan M=(Q,Σ,δ,q 0,F) automatát amelyre L(M)=L(G). A korábbi lemmák értelmében feltehető, hogy G láncszabálymentes és, hogy minden P-beli szabály A ab vagy A λ alakú. Konstruáljuk meg M-et a következőképpen: Q=N q 0 =S F={A N A λ P} minden A N és a Σ esetén δ(a,a)={b N A ab P}. Annak igazolásához, hogy L(M)=L(G), elegendő megmutatnunk, hogy tetszőleges n 1, A,B N és w Σ* esetén A n wb akkor és csak akkor ha (A,w) n (B,λ). Az ekvivalenciát n szerinti teljes indukcióval bizonyíthatjuk be. Ebből már következik, hogy L(M)=L=(G). Valóban, legyen w L(G). Akkor a G nyelvtanra tett megszorítások értelmében van olyan B N, hogy B λ P és S *wb w. A fenti ekvivalencia miatt ekkor (S,w) *(B,λ), másrészt az F definíciója miatt B F. Következésképpen w L(M). Megfordítva legyen w L(M). Akkor (S,w) *(B,λ) valamely B F-re. Mivel B F, az is igaz, hogy B λ P. Másrészt az ekvivalencia miatt S *wb, tehát S *wb w és így w L(G). A5. Az automatával felismerhető nyelvek regulárisak (Kleene tétele). LEMMA: (Kleen tétel) Tetszőleges Σ ábécé feletti, automatával felismerhető nyelv reguláris. BIZ: Vegyünk egy M=(Q,Σ,δ,q 0,F) automatát. Megmutatjuk, hogy L(M) reprezentálható reguláris kifejezéssel. Korábban kimondot tétel értelmében feltehetjük, hogy M determinisztikus. Az is feltehető, hogy Q={1,,n} és, hogy q 0 =1. Tetszőleges 0 k n és 1 i,j n esetén legyen L i,j (k) azon x szavakból álló nyelv amelyekre ( i,x) *(j,λ) de úgy, hogy i és j között az automata legfeljebb az {1,,k} halmazba eső állapotokat érinti. Formálisan: L i,j (0) ={x Σ* (i,x) ) *(j,λ)
és ha (i,x) + (i,x) + (j,λ) akkor i {1,,k}} Megjegyezzuk,hogy i,j {1,,k} is leghetséges Észrevesszük, hogy L(M)= j F L (n) 1,j. Ezért amennyiben minden j F esetén az L (n) 1,j nyelv rerezentálható reguláris kifejezéssel, úgy L(M) is. Elegendő tehát azt igazolni, hogy minden j F esetén az L (n) 1,j regurális. Ennél azonban többet igazolunk: k szerinti indukcióval megmutatjuk, hogy minden 1 i,j n-re az L (k) i,j nyelv reguláris. k=0 esetben: L (0) i,j = {a Σ δ(i,a)=j}, ha i j {a Σ δ(i,a)=j} {λ}, ha i=j Mindkét esetben L (0) i,j reguláris. (Korábbi észrevétel: minden véges nyelv reguláris.) Tegyük fel, hogy minden 1 i,j n esetén L (k) i,j reguláris. Bebizonyítjuk, hogy L (k+1) i,j is az. Az i állapotból a j-be kétféleképpen juthatunk el úgy, hogy közben legfeljebbb az {1,,k+1} halmazba eső állapotokat érintjük. Egyrészt úgy, hogy legfeljebb az {1,,k} halmazba eső állapotokat érintjük, tehát k+1-et nem. Másrészt úgy, hogy k+1-et is érintjük. Ez utóbbi esetben i-ből indulink, elérjük k+1-et, majd valahányszor visszatérünk oda. Miután legutoljára elhagytuk, elérjük j-t. Következésképpen L (k+1) i,j felírható a következöképpen: L (k+1) i,j = L (k) i,j L (k) i,k+1 ( L (k) k+1,k+1 )* L (k) k+1,j. Továbbá az indukció feltevés értelmében az L (k) i,j, L (k) i,k+1, L (k) k+1,k+1,és L (k) k+1,j nyelvek mindegyike reguláris. Következésképpen L (k+1) i,j is reguláris, mivel reguláris nyelvekből állítottuk elő az egyesítés, a konkatenáció és iteráció segítségével. A6. Pumpáló lemma reguláris nyelvekre. LEMMA: Legyen L Σ* tetszőleges reguláris nyelv. Akkor megadható olyan (L-től függő) k>0 egész szám, hogy minden w L esetén, ha w k, akkor vannak olyan w 1,w 2,w 3 Σ* szavak, melyekre teljesülnek az alábbi feltételek: 1) w=w 1 w 2 w 3 2) 0< w 2 k 3) minden n 0, w 1 w 2 n w 3 L. BIZ: Mivel L reguláris, van olyan M=(Q,Σ,δ,q 0,F) determinisztikus automata, melyre L=L(M). Legyen k= Q. Bebizonyitjuk, hogy ez a k megfelelő lesz. Vegyünk egy w L szótúgy, hogy w k vagyis, w=a 1 a 2...a k, ahol k k. Mivel w L, vannak olyan q 1,q 2,...,q k Q állapotok melyekre: (q 2,a 3...a k ).. (q k -1,a k ).. (q k,λ), továbbá q k F. Mivel k k= Q, a skatulya-elv alapján a q 0,...,q k sorozatban van legalább két megegyező állapot, vagyis van olyan 0 i,j k számpár, melyre i<j és q i =q j. Továbbá i és j választhatók úgy, hogy a q i+1,...,q j sorozatban már nincsenek megegyező elemek. Legyenek w 1 =a 1...a i, w 2 =a i+1...a j, és w 3 =a j+1...a k. Megmutatjuk, hogy w 1,w 2,w 3 kielégíti mindhárom feltételt. 1) Az, hogy w=w 1 w 2 w 3 nyilvánvaló. 2) Az, hogy w 2 k indirekt módon látható be. Ha ugyanis w 2 =j-i>k, akkor a q i+1,...,q j sorozat legalább k hosszúságú lenne és akkor szerepelne benne legalább két megegyező állapot. 3) Megmutatjuk, hogy minden n 0-ra w 1 w 2 n w 3 L. A w 1, w 2, w 3 szavak definícióját felhasználva a fenti konfiguráció sorozat az alábbi módon írható fel: (q 0,w 1 w 2 w 3 ) *(q i,w 2 w 3 ) *(q i,w 3 ) *(q k,λ). Tehát az is teljesül, hogy (q i,w 2 ) *(q i,λ) és ezért minden n 0-ra (q i,w 2 n ) *(q i,λ). Következésképpen minden n 0-ra (q 0,w 1 w 2 n w 3 ) *(q i,w 2 n w 3 ) *(q i,w 3 ) *(q k,λ), vagyis w 1 w 2 n w 3 L.
A7. A reguláris nyelvek osztályának zártsági tulajdonságai (reguláris műveletek, Boole műveletek). TÉTEL: A reguláris nyelvek osztálya zárt a reguláris műveletekre nézve. BIZ: Azt kell igazolni, hogy ha L 1,L 2 Σ* reguláris nyelvek, akkor L 1 L 2, L 1 L 2 és L 1 * is azok. Akkor mondjuk, hogy egy L Σ* nzelv reguláris, ha van olyan R, Σ feletti reguláris kifejezés, amely által reprezentált nyelv éppen L, vagyis melyre R =L teljesül. Legyenek tehát R 1 és R 2 olyan reguláris kifejezések, melyekre R 1 =L 1 és R 2 =L 2. A reguláris kifejezések definíciója szerint (R 1 )+(R 2 ), (R 1 )(R 2 ) és (R 1 )* is reguláris kifejezések.továbbá a reguláris kifejezés által rerezentált nyelv definíciója értelmében (R 1 )+(R 2 ) =L 1 L 2, (R 1 )(R 2 ) =L 1 L 2 és (R 1 )* =L 1 *.Tehát az L 1 L 2, L 1 L 2 ésl 1 * nyelvek is reprezentálhatók reguláris kifejezéssel, ezért regulárisak. DEF: Legyenek M 1 =(Q 1,Σ,δ 1,q 1,F 1 ) és M 2 =(Q 2,Σ,δ 2,q 2,F 2 ) teljesen definiált és determinisztikus automaták.definiáljuk az M=(Q 1 Q 2,Σ, δ,[q 1,q 2 ],F) automatát úgy.hogy minden p 1 Q 1 és p 2 Q 2 állapot és a Σ input szimbólum esetén δ([p 1,p 2 ],a) = [δ(p 1,a), δ(p 2,a) ]. Továbbá legyeen F a Q 1 Q 2 direkt szorzat egy tetszőleges részhalmaza. Akkor M-et az M 1 és M 2 direktszorzatának hívjuk. LEMMA: A reguláris nyelvek osztálya zárt a metszetre és a kivonásra. BIZ: Vegyünk két reguláris nyelvet: L 1 -et és L 2 -t. Tudjuk, hogy léteznek olyan M 1 =(Q 1,Σ,δ 1,q 1,F 1 ) és M 2 =(Q 2,Σ,δ 2,q 2,F 2 ) teljesen definiált és determinisztikus automaták, melyekre L 1 =L(M 1 ) és L 2 =L(M 2 ). Továbbá legyen M=(Q 1 Q 2,Σ,δ,[q 1,q 2 ],F) az M 1 és M 2 direkt szorzata, ahol F-et a következő módon választjuk meg: (a) Legyen F=F 1 F 2. Könnyű igazolni, hogy ekkor L(M)=L(M 1 ) L(M 2 ). Tetszőleges x Σ* esetén: x L(M) [r 1,r 2 ] F 1 F 2 úgy, hogy ([q 1,q 2 ],x) M *([r 1,r 2 ],λ) r 1 F 1 és r 2 F 2 úgy, hogy (q 1,x) M1 *(r 1,λ) és (q 2,x) M2 *(r 2,λ) x L 1 és x L 2 x L 1 L 2. (b) Legyen F=F 1 (Q 2 -F 2 ). Az (a) esethez hasonló módon igazolható, hogy ekkor L(M)=L(M 1 )-L(M 2 ). TÉTEL: A reguláris nyelvek osztálya zárt a Boole műveletekre nézve. BIZ: Fent bizonyítottuk, hogy a reguláris nyelvek osztálya zárt az egyesítésre. Ezután beláttuk, hogy zárt a metszésre. Ebből a lemmából következik, hogy zárt a komplementer képzésre is, mivel minden L Σ* nyelvre igaz, hogy L=Σ*-L. A8. Környezetfüggetlen nyelvek levezetési módjai (általános, bal- és jobb oldali) és ezek kapcsolata. ALAPFOGALMAK: Az α 0 α 1... α n alakú kifejezéseket derivációknak vagy levezetéseknek hívjuk. Amennyiben a fenti deriváció során minden i=1,...,n esetén α i -t úgy kapjuk, hogy α i-1 -ben a bal (jobb) oldalról nézve legelső nemterminálist helyettesítjük egy rá vonatkozó szabály jobb oldalával, akkor a derivációt bal (jobb) oldali derivációnak hívjuk, és rá az α 0 l α 1 l... l α n (α 0 r α 1 r... r α n ) jelölést használjuk. LEMMA: Tetszőleges X (N Σ) és w Σ* esetén a következő három állítás ekvivalens: X *w X l *w X r *w. BIZ: A bal és jobboldali levezetések között fennálló szimmetria miatt csak az első és a második állítás ekvivalenciáját bizonyítjuk be.
Nyilvánvaló, hogy ha X l *w akkor X *w is fennáll mivel a bal oldali levezetés a korlátozás nélküli levezetésnek speciális esete. Fordítva, tegyük fel, hogy X *w. Akkor X n w, valamilyen n 0-ra. Az n szerinti idukcióval bizonyítunk. n=0 esetén X=w ami csak úgy lehet, hogy X Σ. Ezért nyilvánvaló, hogy X l *w (=X). Tegyük fel, hogy X n+1 w. Akkor ez a deriváció felírható X X 1...X k n w 1...w k =w alakban, ahol k 1, X X 1...X k P és minden 1 i k-ra teljesül X ni w i, n i n. Tehát az indiukció feltevés miatt X i l ni w i is fennáll. Akkor viszont X l X 1 X 2...X k l w 1 X 2...X k l w 1 w 2...X k l w 1 w 2...w k =w. A9. Derivációs fa fogalma, levezetések és derivációs fák közötti kapcsolatok. DEF: Legyen X (N Σ). Az X gyökerű derivációs fák halmazán fák legszűkebb olyan D X halmazát értjük, amelyre teljesülnek az alábbi feltételek: (i) Az a fa amelynek egyetlen szögpontja van és annak címkéje X, eleme D X -nek. (X-el jelöljük) (ii) Ha X λ P, akkor az a fa, melynek gyökere X-szel van címkézve, a gyökerének egyetlen leszármazottja van aminek címmkéje λ, eleme D X -nek. (X[λ]-val jelöljük) (iii) Ha X X 1...X n P és t 1 D X1,...,t n D Xn, akkor az a fa, melynek gyökere X-szel van címkézve, a gyökérből n él indul rendre a t 1,...,t n fák gyökeréhez, eleme D X -nek.(x[t 1,...,t n ]) Amennyiben X Σ,úgy az (ii) és az (iii) feltételek soha nem teljesülnek,tehát ekkor D X ={X}. DEF:Legyen t egy X gyökerű derivációs fa.akkot t magasságát h(t) -vel, t határát fr(t)-vel jelöljük,és az alábbi módon definiáljuk: (i) Ha t=x,akkor h(t) = 0 és fr(t) = X (ii) Ha t=x[λ] akkor h(t)=1,és fr(t)= λ. (ii) Ha t= X[t 1,...,t n ],akkor h(t)= 1+ max{ h(t i ) 1 i n} és fr(t)=fr(t 1 )... fr(t n ). TÉTEL: Tetszőleges (N Σ) és α (N Σ)* esetén X *α akkor és csak akkor áll fenn, ha van olyan t D X derivációs fa amelyre fr(t)=α. BIZ: (a) Először azt igazoljuk, hogy ha X *α, akkor akkor van olyan t D X derivációs fa amelyre fr(t)=α. A feltétel azt jelenti, hogy X n α valamilyen n 0-ra. Az állítást n szerinti indukcióval bizonyítjuk. Az n=0 esetben X=α. Ezért az egyetlen szögpontú t=x fa megfelelő lesz, mert erre t D X és fr(t)=x (=α). Legyen most n 0 és tegyük fel, hogy az állítás minden n-nél nem nagyobb számra teljesül. Tegyük fel továbbá hogy X n+1 α. Akkor X X 1...X k n α 1...α k = α, ahol teljesülnek a következők: X X 1...X k egy P-beli szabály és minden 1 i k esetén X i ni α i, ahol n i n. (n=n 1 +...+n k ) Mivel n i n, az indukció feltevés miatt minden 1 i k-ra van olyan t i D Xi, hogy fr(t i )=α i. Legyen t=x[t 1,...,t k ].A derivációs fa, és határának definíciójából következik, hogy: t D X és fr(t)=fr(t 1 )...fr(t k )=α 1...α k =α. (b) Megfordítva, tegyük fel, hogy az X gyökerű t derivációs fára teljesül, hogy fr(t)=α. A t magassága szerinti indukcióval igazoljuk, hogy ekkor X *α. Legyen h(t)=0. Akkor t=x, tehát fr(t)=α=x. Következésképpen X *α (=X). Most legyen h(t)=n+1, és tegyük fel, hogy az állítás minden n-nél nem magasabb derivációs fa esetén fennáll. Akkor t=x[t 1,...,t k ], valamilyen k 1 szám és t 1 D X1,...,t k D Xk derivációs fák esetén. A fenti definíció miatt X X 1...X k P. Vezessük be az α i =fr(t i ) jelölést minden 1 i k-ra. Akkor egyrészt α=α 1...α k, másrészt az indukció feltevés miatt minden 1 i k-ra X i *α i. Következésképpen X X 1...X k *α 1...α k =α.
A10. Veremautomata fogalma, felismerés végállapottal és üres veremmel, ezek ekvivalenciája. DEF: Veremautomatának nevezzük a P=(Q,Σ,Γ,δ,q 0,Z 0,F) rendszert, ahol: Q egy véges halmaz, az állapotok halmaza Σ az input ábécé Γ a verem ábécé q 0 Q a kezdőállapot Z 0 Γ a verem kezdősyimbólum F Q a végállapotok halmaza δ: Q (Σ {λ}) Γ P f (Q Γ*) az átmenetfüggvény. DEF: A P által végállapotokkal felismert nyelven az L f (P)={w Σ* (q 0,w,Z 0 ) *(q,λ,γ), ahol q F és γ Γ*} nyelvet értjük. DEF: A P által üres veremmel felismert nyelven az L (P)={w Σ* (q 0,w,Z 0 ) *(q,λ,λ), ahol q Q} nyelvet értjük. TÉTEL: A veremautomatakkál végállapottal felismerhető nyelvek osztálya megegyezik a veremautomatával üres veremmel felismerhető nyelvek osztályával. BIZ: Először azt igazoljuk, hogy ha egy nyelv felismerhető egy P=(Q,Σ,Γ,δ,q 0,Z 0,F) veremautomata végállapotaival, akkor megadhato olyan P =(Q,Σ,Γ,δ,q 0,Z 0,F ) veremautomata amelyre L (P )=L f (P). Definiáljuk P -t úgy hogy: Q = {q 0,q e }, ahol q 0 és q e új állapotok Γ =Γ {Z 0 }, ahol Z 0 egy új szimbólum F tetszőleges részhalmaza Q -nek δ az alábbi módon definiált átmenetfüggvény: (1) δ (q 0,λ,Z 0 )={(q 0,Z 0 Z 0 )} (2) minden q Q, a (Σ {λ}), Z Γ esetén { δ(q,a,z) {(q e,λ)} ha a=λ és q F δ (q,a,z)= { { δ(q,a,z) ha a λ vagy q F. (3) minden Z Γ -re δ (q e,λ,z)={(q e,λ)}. Az L (P )=L f (P).egyenlőség a következő számolásal igazolható: w L f (P) (q 0,w,Z 0 ) P * (q,λ,γ) ahol q F (def. szerint) (q 0,w,Z 0 ) P (q 0,w,Z 0 Z 0 ) ((1) miatt) P * (q,λ,γz 0 ) ahol q F ((2) miatt) = (q,λ,z 1...Z k Z 0 ) (γ=z 1...Z 2 ) P (q e,λ,z 2...Z k Z 0 ) ((2) miatt) P * (q e,λ,λ) ((3) miatt) w L (P ). (def. szerint) A bizonyítás második részében azt kell igazolnunk, hogy ha egy nyelv felismerhető egy P=(Q,Σ,Γ,δ,q 0,Z 0,F) veremautomatával üres veremmel, akkor megadható olyan P =(Q,Σ,Γ,δ,q 0,Z 0,F ) veremautomata amelyre L f (P)=L (P). Definiáljuk P -t a következő módon: Q =Q {q 0,q f }, ahol q 0 és q f új állapotok Γ =Γ {Z 0 }, ahol Z 0 egy új szimbólum F = {q f } δ az alábbi módon definiált átmenet függvény:
(1) δ (q 0,λ,Z 0 )={(q 0,Z 0 Z 0 )} (2) minden q Q, a (Σ {λ}), Z Γ esetén δ (q,a,z)=δ(q,a,z) (3) minden q Q esetén, δ (q,λ,z 0 )={(q f,λ)} Az L f (P )=L (P) egyenlőseg a következő számolással adódik: w L (P) (q 0,w,Z 0 ) P * (q,λ,λ) ahol q Q (def. szerint) (q 0,w,Z 0 ) P (q 0,w,Z 0 Z 0 ) ((1) miatt) P * (q,λ,z 0 ) ahol q Q ((2) miatt) P (q f,λ,λ) ((3 ) miatt) w L f (P ). (def. szerint) A11. A környezetfüggetlen nyelvek veremautomatákkal való felismerhetosége. LEMMA: Tetszőleges környezetfüggetlen nyelv felismerhető veremautomatával. BIZ: Vegyünk egy tetszőleges G=(N,Σ,R,S) környezetfüggetlen nyelvtant. Legyen P=({q},Σ,Γ,δ,q,Z 0, ) az a veremautomata amelyben: Γ=N Σ Z 0 =S δ átmenetfüggvény pedig a következő módon van definiálva: (1) minden A N-re δ(q, λ,a)={(q,α) A α R} (2) minden a Σ-ra δ(q,a,a)={(q,λ)}. Megmutatjuk, hogy L (P)=L(G). Ehhez elegendő igazolni, hogy minden X (N Σ) és w Σ* esetén X *w akkor és csakis akkor áll fenn, ha (q,w,x) *(q,λ,λ) ugyanis ez az X=S esetben éppen állításunkat igazolja. Először is tegyük fel, hogy X n w valamilyen n 0-ra. Teljes indukcióval haladunk tovább. Ha n=0, akkor X=w Σ teljesül, ezért a (2) pont szerint (q,w,x)=(q,w,w) (q,λ,λ). Ha X n+1 w, akkor ez a deriváció X X 1...X k n w 1...w k =w alakban írható. Tehát X X 1...X k R és X i ni w i minden 1 i k-ra, ahol n i n. Akkor az (1) pont miatt (q,x 1...X k ) δ(q,λ,x), másrészt az indukció feltevés miatt azt kapjuk, hogy minden 1 i k esetén (q,w i,x i ) *(q,λ,λ). Innen kapjuk, hogy (q,w,x) = (q,w 1...w k,x) (q,w 1...w k,x 1...X k ) * (q,w 2...w k,x 2...X k )... *(q,w k,x k ) * (q,λ,λ). Az is megfigyelhető, hogy a felismerés során P a w-nek egy bal oldali levezetését szimulálja. A fenti gondolatnenethez hasonlóan, a (q,w,x) *(q,λ,λ) feltevésből kiindulva, az átmenetek során alkalmazott (1) típusú átmenetek száma szerinti indukcióval igazolhatjuk, hogy X *w. A12. A veremautomatákkal felismerhető nyelvek környezetfüggetlenek. LEMMA: Minden veremautomatával felismerhető nyel környezetfüggetlen. BIZ: Vegyünk egy tetszőleges P=(Q,Σ,Γ,δ,q 0,Z 0,F) veremautomatát. Megadunk hozzá egy olyan G=(N,Σ,R,S) környezetfüggetlen nyelvtant, amire teljesül L(G)=L (P). Definiáljuk G-t a következőképpen: Legyen S egy új szimbólum Legyen N={S} {[qzr] q,r Q,Z Γ} legyen R szabályok legszűkebb olyan halmaza, amire teljesülnek a következő feltételek: (1) minden q Q-ra legyen S [q 0 Z 0 q] szabály R-ben
(2) minden q Q, a (Σ {λ}), Z Γ-ra, ha (s 0,Z 1...Z k ) δ(q,a,z) (ahol k 1, Z 1,...,Z k Γ), akkor minden s 1,...,s k Q sorozatra legyen [qzs k ] a[s 0 Z 1 s 1 ]...[s k-1 Z k s k ] szabály R-ben, (3) minden q Q, a (Σ {λ}), Z Γ-ra, ha (s 0,λ) δ(q,a,z), akkor legyen [qzs 0 ] a szabály R- ben. Elegendő megmutatni, hogy minden q,r Q, Z Γ és w Σ* esetén (q,w,z) *(r,λ,λ) akkor és csak akkor áll fenn, ha [qzr] *w. (Ugyanis ezen ekvivalencia a q=q 0 és Z=Z 0 esetben éppen az L(G)=L (P) egyenlőséget jelenti.) Először tegyük fel, hogy [qzr] n w valamilyen n 1-re. Teljes indukciót alkalmazunk. Az n=1 esetben, vagyis [qzr] w esetben [qzr] w R. Ez az R szabályhalmaz definíciójának (3) pontja miatt csak úgy lehet, w=a (Σ {λ}) és (r,λ) δ(q,a,z). Következésképpen (q,w,z)=(q,a,z) (r,λ,λ). Most tegyük fel, hogy [qzr] n+1 w, ahol n 1. Akkor, figyelembe véve R definícióját, ez a deriváció az alábbi alakban írható: [qzr] a[s 0 Z 1 s 1 ]...[s k-1 Z k s k ] n aw 1...w k =w, ahol k 1, [qzr] a[s 0 Z 1 s 1 ]...[s k-1 Z k s k ] R, r=s k, minden 1 i k-ra [s i-1 Z i s i ] ni w i, és n i n. Akkor egyrészt (s 0,Z 1...Z k ) δ(q,a,z) másrészt, az indukció feltevés miatt minden 1 i k-ra (s i-1,w i,z i ) *(s i,λ,λ). Következésképpen (q,w,z) = (q,aw 1...w k,z) (s 0,w 1...w k,z 1...Z k ) * (s 1,w 2...w k,z 2...Z k ).. * (s k-1,w k,z k ) * (s k,λ,λ) = (r, λ,λ). Az ekvivalencia megfordítását hasonló módon, a (q,w,z) n (r,λ,λ) feltételben szeteplő n szerinti indukcióval bizonyíthatjuk be. A13. Pumpáló lemma környezetfüggetlen nyelvekre (Bar-Hillel lemma). LEMMA: Legyen L Σ* tetszőleges környezetfüggetlen nyelv. Akkor megadhatók olyan (L-től függő) p,q>0 egész számok, hogy minden w L esetén, ha w >p, akor vannak olyan w 1,w 2,w 3,w 4,w 5 Σ* szavak, melyekre teljesülnek az alábbi feltételek: (1) w=w 1 w 2 w 3 w 4 w 5 (2) w 2 w 3 w 4 q (3) w 2 w 4 λ (4) minden n 0-ra, w 1 w 2 n w 3 w 4 n w 5 L. BIZ: Legyen L=L(G), ahol G=(N,Σ,P,S) egy környezetfüggetlen nyelvtan. Feltehetjük, hogy G láncszabály- és λ-mentes. Legyen n= N és legyen k=max{ α A α P}. Definiáljuk a p és q számokat a következőképpen: p=k n és q=k n+1. Megmutatjuk, hogy ez a p és q megfelelő lesz. Vegyünk egy w L szót, melyre w >p. Akkor van olyan t D S derivációs fa, melyre fr(t)=w és h(t)>n. Következésképpen t-ben van olyan, S-től valamely levélhez vezető út melynek hossza legalább n+1 és amelyen ezért legalább n+1 nemterminális szimbólum szerepel. Mivel N-ben összesen n darab nemterminális van ezért van olyan nemterminális is amely ezen az úton legalább kétszer előfordul. Tekintsük ezek közül azt a nemterminálist, amelyik ezen úton a terminális levéltől indulva a gyökér felé legelőször megismétlődik, és jelöljük ezt A-val. Továbbá legyen t a t-nek azon részfája, melynek gyökere A-nak a levéltől nézett első előfordulása és legyen t a t-nek azon részfája, melynek gyökere A-nak a második előfordulása.(nyilvánvaló módon t, t D A és t a t -nek is részfája.) Legyenek w 1,w 2,w 3,w 4,w 5 Σ* szavak az alábbi feltételekkel meghatározva: w 3 =fr(t ) w 2 és w 4 olyan, hogy fr(t )=w 2 w 3 w 4 w 1 és w 5 olyan, hogy fr(t)=w 1 w 2 w 3 w 4 w 5.
Ekkor a lemmában szereplő valamennyi feltétel teljesül, mert: (1) mert: fr(t)=w (2) mert: a legelső olyan nemterminálist választottuk, amelyik ismétlődik és ezért h(t ) n+1 (3) mert: G láncszabály- és λ-mentes (4) mert: az a derivációs fa amelyet úgy kapunk, hogy t -ből töröljük t -t a gyökere kivételével tetszőleges n-szer ismételhető úgy, hogy S gyökerű derivációs fát kapunk és a kapott derivációs fa határa w 1 w 2 n w 3 w 4 n w 5 lesz. A14. A környezetfüggetlen nyelvek osztályának zártsági tulajdonságai (reguláris műveletek, Boole műveletek). TÉTEL: A környezetfüggetlen nyelvek osztálya zárt a reguláris műveletekre nézve. BIZ: Azt kell igazolni, hogy ha L 1,L 2 Σ* környezetfüggetlen nyelvek, akor L 1 L 2, L 1 L 2 és L 1 * is azok. Evégett legyenek G 1 =(N 1,Σ,P 1,S 1 ) és G 2 =(N 2,Σ,P 2,S 2 ) környezetfüggetlen nyelvtanok, melyekre L 1 =L(G 1 ) és L 2 =L(G 2 ). Az általánosság megszorítása nélkül feltehetjük, hogy N 1 N 2 =. Mindhárom müvelet esetén konstruálunk egy G környezetfüggetlen nyelvtant, amely rendre az L 1 L 2, L 1 L 2 és L 1 * nyelveket generálja. Legyen G=(N 1 N 2 {S},Σ,P 1 P 2 {S S 1,S S 2 },S), ahol S egy új szimbólum. Akkor L(G)=L 1 L 2. Legyen G=(N 1 N 2 {S},Σ,P 1 P 2 {S S 1 S 2 },S). Akkor L(G)=L 1 L 2. Legyen G=(N 1 {S},Σ,P 1 {S S 1 S,S λ},s). Akkor L(G)=L 1 *. LEMMA: A környezetfüggetlen nyelvek osztálya nem zárt a metszetre. BIZ: Megadunk két olyan örnyezetfüggetlen nyelvet, amelynek metszete nem környezetfüggetlen. Legyen L 1 ={a m b m c n m,n 0}. Akkor L 1 környezetfüggetlen mivel generálható az alábbi környezetföggetlen nyelvtannal: S AB A aab λ B cb λ. Hasonlóan látható be, hogy L 2 ={a m b n c n m,n 0} is környezetföggetlen. Legyen L=L 1 L 2 ={a n b n c n m,n 0}. Indirekt módon bebizonyítjuk, hogy L nem környezetfüggetlen. Tegyük fel, hogy L környezetfüggetlen. Akkor a Bar-Hillel lemma szerint vannak olyan p,q>0 számok, hogy minden w L szóra, melynek hossza nagyobb mint p, teljesülnek az ezen lemmában szereplő feltételek. Vegyük a w=a p b p c p szót ami nyilván L-ben van. Mivel w =3p, az is igaz, hogy w >p. Akkor a pumpáló lemma szerint w felírható w=w 1 w 2 w 3 w 4 w 5 alakban, ahol minden n 0-ra w 1 w 2 n w 3 w 4 n w 5 L. Vizsgáljuk meg hogyan helyezkedhetnek el a w 2 és w 4 részszavak a w-ben. Megállapíthatjuk, hogy sem w 2, sem w 4 nem tartalmazhat két különböző betűt, mert ekkor például a w 1 w 2 w 2 w 3 w 4 w 4 w 5 szóban a betűk sorrendje nem abc lenne. Tehát mind w 2 mind w 4 legfeljebb egy fajta betűt tartalmaz. Ez viszont ellentmondáshoz vezet, mert ha így van, akkor n-et növelve a w 1 w 2 n w 3 w 4 n w 5 szóban csak legfeljebb két fajta betűnek a száma növekszik, ami ellent mond annak, hogy w 1 w 2 n w 3 w 4 n w 5 L. LEMMA: A környezetfüggetlen nyelvek osztálya nem zárt a komplementer műveletre. BIZ: Legyenek L 1,L 2 Σ* környezetfüggetlen nyelvek. A de Morgan azonosság szerint L 1 L 2 = L 1 L 2.(!!!Az egész jobb oldal fölött egy vonalnak kellene lennie!!!) Továbbá, a környezetfüggetlen nyelvek osztálya zárt az egyesítésre. Ezért, ha a komplementer képzésre zárt lenne, akkor zárt lenne az metszésre is, ami viszont ellentmondáshoz vezetne.
B1. Szintaxis megadása környezetfüggetlen nyelvtannal, az elemzés alapfeladata. A környezetfüggetlen nyelvtanok alkalmasak progamozási nyelvek szintaxisának a megadására. Egy PL programozási nyelv szintaxisát le lehet írni egy G PL =(N,Σ,P,S) környezetfüggetlen nyelvtannal, ahol a PL nyeelvű programok Σ* azon elemei amelyek levezethetők S-ből a P-beli szabályok segítségével. Ismert jelöléseinket alkalmazva azt mondhatjuk, hogy a PL nyelvű programok éppen L(G PL ) elemei. A gyakorlatban fontos feladat annak eldöntése, hogy egy, a felhasználó által megírt program megfelel-e a szintaktikai előírásoknak, hiszen csak ebben az esetben tudja a számítógép aztelfogadni és végrehajtani. Mi felel meg a felhasználó által írt programnak? Nem más, mint Σ* egy w eleme. Tehát annak eldöntése, hogy w megfelel-e PL szintexisának, vagyis, hogy szintaktikusan helyes-e, ekvivalens annak a kérdésnek a megválaszolásával, hogy w L(G PL ) teljesül-e. Ez a w szó elemzésével válaszolható meg. Az elemzés alapfeladata: Adjunk meg olyan algoritmust, amely tetszőleges G=(N,Σ,P,S) környezetfüggetlen nyelvtan és w Σ* szó esetén eldönti, hogy w L(G) teljesül-e! Olyan algoritmusokat keresünk tehát, amelyeknek inputként adható egy G nyelvtan és egy w Σ* szó, outputként pedig igen vagy nem választ adnak aszerint, hogy w L(G) vagy w L(G). Az ilyen algoritmusokat elemzési algoritmusoknak nevezzük. Az elemzési algoritmusok egyfajta csoprtosítása a következő lehet: felülről-lefelé (top-down) algoritmusok. alulról-felfelé (bottom-up) algoritmusok. B2. Az általános felülről lefelé haladó elemzési algoritmus. ALGORITMUS: Felülről lefelé haladó általános elemzési algoritmus. Input: Egy nem balrekurzív G=(N,Σ,P,S) környezetfüggetlen nyelvtan és egy w=a 1...a n, n 0 input szó. Output: Igen jelzés és a w szónak egy baloldali levezetése, ha w L(G). Különben nem jelzés. Módszer: Minden A N esetében rögzítsük le A alternatíváinak egy sorrendjét A γ 1 γ 2... γ k alakban. Az A i- edik alternatívájára A i -vel hivatkozunk. Az elemzés (s,i,α,β) alakú konfigurációk sorozata, ahol: s {q,t,b} az elemzés állapota. Értéke lehet q (normál), t (elfogadó) vagy b (backtrack). Kezdőértéke q. i egy pointer melynek értéke 1 i n+1, ahol n az input szó hossza. Ha 1 i n, akkor i pointer a i - re mutat. Ha i=n+1, akkor a n+1 =$, ahol $ egy olyan szimbólum ami nincs Σ-ban. Az i kezdőértéke: 1. α egy verem, melynek teteje a jobb végén van. Tartalmazza az elemzés mindenkori történetét, hogy backtrack esetén tudjuk mely alternatívákat választottuk korábban és, hogy elfogadás esetén rendelkezésünkre álljon a bal oldali levezetés. Ezt a vermet passzív veremnek nevezzük. Kezdőértéke: λ. β egy verem, mejnek teteje a bal végén van. Tartalmazza a levezetett bal oldali mondatformának azt a részét amelyet még ki kell terjeszteni. Ezt a vermet aktív veremnek nevezzük, a tetején lévő szimbólumot pedig aktív szimbólumnak, amit vagyx illeszteni kell (ha terminális), vagy kiterjeszteni (ha nemterminális). Kezdőértéke: S. A konfigurációk halmazán megadunk egy átmeneti relációt. Minden (s,i,α,β) konfigurációhoz legfeljebb egy (s,i,α,β ) konfiguráció van, melyre (s,i,α,β) (s,i,α,β ). Ezen konfigurációt a következőképpen határozható meg: Az átmeneti relációt definiáló rész (1) pontjából indulva megkeressük az első olyan pontot, melyben szereplő feltétel teljesül (s,i,α,β)-ra. Ezen őpontban leírtaknak megfelelően számítjuk ki a rákövetkező (s,i,α,β ) konfigurációt.
Kezdő konfiguráció: (q,1,λ,s). A befejező konfigurációk alakja: (t,n+1,α,λ), ahol α egy terminálisokból és alternatívákból álló sorozat. Az teljesül, hogy: w L(G) akkor és csakis akkor áll fenn, ha (q,1,λ,s). *(t,n+1,α,λ). Az elemzési algoritmus: 1. C:= (q,1,λ,s); 2. Amíg van olyan C, melyre C C, legyen C:=C ; 3. Ha C:=(t,n+1,α,λ) valamely α-ra, akkor az output: igen, különben nem. Amennyiben az output igen, α-ból törölve a terminális szimbólumokat, a megmaradó alternatíva sorozat w- nek egy bal oldali levezetését adja. Átmeneti reláció: (1) Kiterjesztés: Ha a C=(q,i,α,Aβ), vagyis az aktív szimbólum nemterminális, akkor C C, ahol C =(q,i,αa 1,γ 1 β), és γ 1 az A első alternatívája. (2) Sikeres input illesztés: Ha C=(q,i,α,aβ) és a=a i, vagyis az aktív szimbólum terminális és illeszkedik és illeszkedik az input pointer által mutatott input szimbólumhoz, akkor C C, ahol C =(q,i+1,αa,β). (3) Sikeres elemzés: Ha C=(q,n+1,α,λ), akkor C C, ahol C =(t,n+1,α,λ), vagyis elérjük a befejező konfigurációt. (4) Sikertelen input illesztés: Ha C=(q,i,α,aβ) de a a i, vagyis az aktív szimbólum terminális, de nem illeszkedik az input pointer által mutatott input szimbólumhoz, akkor C C, ahol C =(b,i,α,aβ). (5) Backtrack az inputban: Ha C=(b,i,αa,β), akkor C C, ahol C =(b,i-1,α,aβ) (6) Ha C=(b,i,αA j+1,γ j+1 β) akkor az alábbi esetek lehetségesek: (i) Ha A-nak van j+1-edik alternatívája is, akkor C C, ahol C =(q,i,αa j+1,γ j+1 β). (ii) Ha i=1, A=S és S-nek csak j alternatívája van, akkor nincs átmenet semelyik konfigurációba. (iii) Ha az előző feltételek egyike sem teljesül, akkor C C, ahol C =(b,i,α,aβ). DEF: Legyen k 0 egy egész szám. Akkor: tetszőleges α (N Σ)*-ra: FI k (α)={w α *wx Σ* és w =k vagy ( w <k és x=λ)} tetszőleges L (N Σ)*-ra FI k (L)= α L FI k (α) tetszőleges u Σ*-ra {{u}, ha u <k FI k (u)= { {{w}, ha u=wx, ahol w =k. DEF: Legyenek L 1, L 2 Σ* nyelvek,és k 0.Akkor L 1 k L 2 ={ FI k (xy) x L 1,y L 2 } ALGORITMUS: FI k (A) halmazok kiszámítása. Input: Egy G környezetfüggetlen nyelvtan. Output: Minden A N-re FI k (A) halmaz. Módszer: FI k (A)-t iteráljuk a H 0 (A),H 1 (A),... sorozattal. Algoritmus: (1) Legyen minden a Σ és i 0 esetén H i (a)={a}. (2) Legyen minden A N-re H 0 (A)={x Σ* A xα P ahol ( x =k) vagy ( x <k és α=λ)} és legyen i=0. (3) Minden A N-re H 0 (A),...,H i (A) már ismertek. Legyen
H i+1 (A)=H i (A) {x Σ* x H i (X 1 ) k... k H i (X n ) valamely A X 1...X n esetén}. (4) Ha minden A N-re H i (A)= H i+1 (A), akkor álljunk meg, különben legyen i=i+1 és menjünk vissza (3)-ra. DEF: Legyen A N és k 1. Akkor FO k (A)= {FI k (β) S *αaβ, valamilyen α,β (N Σ)*-ra}. ALGORTMUS: A FO k (A) halmazok kiszámítása. Input: Egy G környezetfüggetlen nyelvtan és egy k 1 egész szám. Output: Minden A N-re FO k (A). Módszer: FO k (A)-t iteráljuk a H 0 (A),H 1 (A),... sorozattal. Algoritmus: (1) Legyen i=0, H 0 (S)={λ} és minden A S-re H 0 (A)=. (2) Mnden A N-re H 0 (A),...,H i (A) már ismertek. Legyen H i+1 (A)=H i (A) {x Σ* x FI k (βh i (B)) valamely B αaβ szabály esetén}. (3) Ha minden A N-re H i (A)= H i+1 (A), akkor álljunk meg, különben legyen i=i+1 és menjün (2)-re. Mivel minden A N-re H i (A) Σ*,k,nyilvánvaló,hogy az algoritmus véges sok lépés után vmely i-re megáll. B4. Az LL(k) és az erősen LL(k) nyelvek definíciója, és ekvivalanciájuk a k=1 esetben. Az erősen LL(k) feltétel eldönthetősége. DEF: Legyen k 1 egy egész szám. Azt mondjuk, hogy a G nyelvtan LL(k), ha valahányszor teljesülnek az S l *waα wβα *wx S l *waα wγα *wy FI k (x)=fi k (y) feltételek, mindannyiszor β=γ. DEF: Legyen k 1. Azt mondjuk, hogy G erősen LL(k), ha tetszőleges A N és A β, A γ különböző szabályok esetén teljesül, hogy FI k (βfo k (A)) FI k (γfo k (A))=, ahol βfo k (A)={βx x FO k (A)}. TÉTEL: G akkor és csakis akkor erősen LL(1), ha LL(1). BIZ: Egy korábbi tételből tudjuk, hogy ha G erősen LL(1), akkor LL(1) is. A megfordítást indirekt módon bizonyítjuk, vagyis feltesszük, hogy G nyelvtan LL(1), de nem erősen LL(1). Ez esetben van két olyan különböző A β és A γ szabály melyekre FI 1 (βfo 1 (A)) FI 1 (γfo 1 (A))=, vagyis van olyyan a (Σ {λ}), hogy a FI 1 (βfo 1 (A)) FI 1 (γfo 1 (A)). A következő esetek lehetségesek: (a) a Σ. ekkor az a FI 1 (βfo 1 (A)) FI 1 (γfo 1 (A)) tartalmazás négyféleképpen valósulhat meg, melyek mindegyike ellentmondáshoz fog vezetni. (a1) a FI 1 (β) és a FI 1 (γ). Ekkor léteznek az S l *waα wβα *wax S l *waα wγα *way levezetések, továbbá teljesül FI 1 (ax )=FI 1 (ay )=a. Ezért mivel G nyelvtan LL(1), β=γ-nak is teljesülnie kell, ami ellentmondás. (a2) β *λ, a FO 1 (A) és a FI 1 (γ). Ekkor léteznek az S l *waα wβα *wα *wax S l *waα wγα *way levezetések, továbbá teljesül FI 1 (ax )=FI 1 (ay ). Ezért mivel G nyelvtan LL(1), β=γnak is teljesülnie kell, ami ellentmondás. (a3) γ *λ, a FO 1 (A) és a FI 1 (β). Ennek az esetnek a bizonyítása az (a2)-höz hasonlóan történik. (a4) β *λ, a FO 1 (A) γ *λ. Ekkor léteznek az S l *waα wβα *wα *wax S l *waα wγα *wα *wax levezetések, továbbá teljesül FI 1 (ax )=FI 1 (ax ). Ezért mivel G nyelvtan LL(1), β=γ-nak is teljesülnie kell, ami ellentmondás.
(b) a=λ.ekkor a λ FI 1 (βfo 1 (A)) FI 1 (γfo 1 (A)) tartalmazás úgy valósulhat meg, hogy β *λ, γ *λ, továbbá λ FO 1 (A). Ezért léteznek az (c) S l *waα wβα *wα *w S l *waα wγα *wα *w levezetések, továbbá w után λ áll és teljesül, hogy FI 1 (λ)=fi 1 (λ). Ezért mivel G nyelvtan LL(1), β=γ-nak is teljesülnie kell, ami megintcsak ellentmondás. ALGORITMUS: Az erősen LL(k) feltétel eldöntése. Input: Egy G környezetfüggetlen nyelvtan és k 1 egész szám. Output: Igen, ha G erősen LL(k), különben nem. Algoritmus: (1) Válasszunk egy olyan A nemterminálist melynek legalább két alternatívája van. (2) Válasszunk két különböző A β és Aβγ szabályt és számoljuk ki a (FI k (βfo k (A))) (FI k (γfo k (A))) halmazt. Amennyiben ez a metszet nem üres, akkor G nem lehet erősen LL(k), tehát áljjunk meg és adjunk az outputra nem jelzést. (3) Ha választható A-nak újabb két alternatíva-párja, akkor ismétejük (2)-t. (4) Ha választható újabb nemterminális, akkor ismétejük (1)-et. (5)Adjunk az outputra igen jelzést. B5. Az erősen LL(k) nyelvek elemzése: elemző tábla kosntukciója és az elemzési algoritmus. Az M elemző tábla a következőképpen konstruálható: M sorai az N Σ {$} halmaz elemeivel, oszlopai pedig a Σ*,k halmaz elemeivel vanna kcímkézve. Ha A N, akkor M-nek az A sorhoz és u Σ*,k oszlophoz tartozó M(A,u) eleme azt a tevékenységet írja le amit akkor kell végezni, ha az elemzés során A-t kell kiterjeszteni és u az előre nézett szó. Ha pedig a Σ, akkor M-nek az a sorhoz és az u Σ*,k oszlophoz tartozó M(A,u) eleme azt adja meg, hogy mit kell csinálni, ha az előre nézett szó u és a-t kell illeszteni az elemzendő szóhoz. Ennek megfelelően M definíciója a következő: (1) Minde A N és u Σ*,k esetén, ha u FI k (βfo k (A)) és A β a j-edik szabály, akkor M(A,u)=(β,j) (2) Minden a Σ és u Σ*,k esetén, ha u=av, akkor legyen M(a,u)=pop (3) Legyen M($,λ)=elfogadás (4) Minden más X (N Σ {$}) és u Σ*,k esetén legyen M(X,u)=hiba. ALGORITMUS: Erősen LL(k) elemzési algoritmus. Input: G nyelvtan (ami erősen LL(k)) M elemző táblája és z Σ* szó. Output: Igen, ha z L(G). Különben nem. Módszer: Sorszámozzuk meg G szabályait Az elemzés (x,a$,π) alakú konfigurációk sorozata, ahol x Σ* egy szó, az elemzendő szó hátralevő része α (N Σ)* a levezetett bal mondatforma azon része, amely még további kiterjesztéseket és illesztéseket tartalmaz. Egy veremnek tekintjük, melynek teteje a bal végén van. $ az elemzendő szó végét jelző szimbólum, $ (N Σ). π szabályok sorszámaiból alkotott sorozat. Egy sornak tekintjük, melynek eleje π jobb oldali végén van. Kezdő konfiguráció: (z,s$,λ). A befejező konfigurációk (λ,$,π) alakúak. A konfigurációk közötti átmenetet -val jelöljük. Az átmeneti reláció úgy van definiálva, hogy z L(G) akkor és csakis akkor teljesül, ha (z,s$,λ) *(λ,$,π). Az elemzési algoritmus: (1) C:=(z,S$,λ) (2) Amíg van olyan C, melyre C C, legyen C:=C
(3) Ha C=(λ,$,π) alakú, valamely π-re, akkor output: igen, különben nem. Amennyiben az output igen, π adja z egy bal oldali levezetését. Átmeneti reláció: Tegyük fel, hogy az (x,xα,π) konfigurációban vagyunk, ahol Xα (N Σ)*$. Képezzük u=fi k (x)-et. (1) Ha X=A N és M(A,u)=(β,j), akkor (x,xα,π) (x,βα,πj). (a verem tetjén egy nemterminális állt amelyet kiterjesztettünk.az alkalmazott szabály sorszámát outpuutra adjuk) (2) Ha X=a Σ és M(A,u)=pop, akkor (x,xα,π) (x,α,π), ahol x=ax.(az illesztendő terminális illeszkedik az elemzendő szóhoz.) (3) Ha M(X,u)=elfogadás (X=$, α=λ és u=λ egyidejűleg teljesülnek), akkor nincs átmenet. (4) Ha M(X,u)=hiba, akkor nincs átmenet. B6. Az általános alulról felfelé haladó elemzési algoritmus. ALGORITMUS: Alulról felfelé haladó általános elemzési algoritmus. Input: Egy G=(N,Σ,P,S) ciklusmentes és λ-mentes környezetfüggetlen nyelvtan és egy w=a 1...a n Σ*, n 1 szó. Output: Igen jelzés és a w szónak egy jobb oldali levezetése, ha w L(G). Különben nem jelzés. Módszer:: Rögzítsük le a szabályok egy sorrendjét. Az elemzés (p,i,α,β) alakú konfigurációk sorozata, ahol p {q,b,t}, az elemzés állapota. Értéke q=normál, t=elfogadó vagy b=backtrack állapot. Kezdő értéke: q. i az input szóba mutató pointer, melynek értéke 1 i n+1, ahol n az input szó hossza. Kezdő értéke: 1. α egy verem, melynek teteje jobb végén van. Tartalmazza az input szó elolvasott részéből redukálásokkal keletkezett (N Σ)*-beli szót. Kezdő értéke: λ. β egy verem, melynek teteje a bal végén van. Tartalmazza az elemzés történetét, vagyis a végrehajtott shiftelések és redukálások sorozatát. Kezdő értéke: λ. A konfigurációk sorozatán megadunk egy átmeneti relációt, amely egyértelműen megadja, hogy egy (p,i,α,β) konfigurációból mely (p,i,α,β ) konfigurációba megyünk át. Ha egy konfigurációban vagyunk, akkor az átmeneti relációt definiáló rész (1) lépésétől elindulva az első olyan lépést alkalmazzuk, ami alkalmazható a konfigurációra. Ez a lépés határozza meg a következő konfigurációt. Kezdő konfiguráció: (q,1,λ,λ). A befejező konfigurációk alakja (t,n+1,s,γ) ahol γ egy s (shift) szimbólumból és szabályok sorszámaiból képzett sorozat. Az teljesül, hogy w L(G) akkor és csakis akkor, ha (q,1,λ,λ) *(t,n+1,s,γ). Az elemzési algoritmus: (0) Kezdő konfiguráció beállítása: C : =(q,1,λ,λ). (1) Redukálási kísérlet: Amíg redukálni lehet, vagyis C=(q,i,αγ,β)alakú és van olyan szabály ami A γ alakú, addig C C, ahol C =(q,i,αa,jβ) és ahol j az A γ szabály sorszáma, és ez a legelső olyan szabály, amely szerint redukálás hajtható végre. Ha már nem lehet redukálni, akkor továbblépünk. (2) Shiftelés: Ha C=(q,i,α,β) és i n+1, akkor C C, ahol C =(q,i+1,αa i,sβ), ahol a i az elemzendő szó i- edik betűje. Menjünk (1)-re. (mert ha lehet akkor redukáljuk) (3) Elfogadás: Ha C=(q,n+1,S,β), vagyis az inputot végigolvastuk, és az első veremben S van, akkor C C, ahol C =(t,n+1,s,β). Az algoritmus álljon le és adjon igen jelzést az outputra. A második veremből törölve az s-eket a megmaradó szabály sorszámokból álló sorozat w-nek egy jobb oldali levezetését adja. (4) Átmenet backtrack állapotba: Ha C=(q,n+1,α,β), de α S, akkor C C, ahol C =(b,n+1,α,β). (5) Backtrack vérehajtása: (egymást kizáró esetek:) (i) Ha C=(b,i,αA,jβ), a j-edik szabály A γ és az αγ redukálható egy további B γ szabály szerint is, akkor C C, ahol C =(q,i,α B,kβ) és k>j a B γ szabály sorszáma és a j-edik után ez a legelső olyan szabály, amely szerint αγ szón redukálás hajtható végre. Menjünk (1)- re.
(ii) Ha C=(b,i,αA,jβ), a j-edik szabály A γ és i n+1 de αγ nem redukálható más szabállyal, akkor a redukálást állítsuk vissza és shifteljünk, vagyis legyen C C, ahol C =(q,i+1,αγa i,sβ). Menjünk (1)-re. (iii) Ha C=(b,n+1,αA,jβ), a j-edik szabály A γ de αγ nem redukálható más szabállyal és már shiftelni sem tudunk, akkor a redukálást állítsuk vissza és maradjunk backtrack állapotban, vagyis legyen C C, ahol C =(b,n+1,αγ,β). Menjünk (5)-re. (iv) Ha C=(b,i,αa,sβ) és i>1, akkor állítsuk vissza a shiftelést, vagyis legyen C C, ahol C =(b,i-1,α,β). Menjünk (5)-re. (v) Ha egyik feltétel sem teljesül, akkor w L(G), ezért az algoritmus álljon le, és adjon nem jelzést az outputra. B7. Az LR(k) nyelvtan definíciója és az LR(k) elemzéshez szükséges fogalmak bevezetése (nyél, járható prefix, LR(k) elem, érvényesség, LR(k) táblák és azok kiszámítása). DEF:Alulról felfelé elemzések esetében fontos fogalom a nyél, ami nem más, mint egy jobb mondatforma levezetésében a legutoljára alkalmazott szabály jobb oldala. DEF: Legyen k 0 egész szám. Azt mondjuk, hogy a G nyelvtan LR(k), ha valahányszor teljesülnek az S r *αaw r αβw S r *γbx r γδx=αβy FI k (w)=fi k (y) feltételek, mindannyiszor α=γ, A=B és β=δ. DEF: Legyen γ jobb mondatforma, γ S. Azt mondjuk, hogy β a γ nyele, ha van olyan A β szabály, melyre S r *αaw r αβw=γ. DEF: Azt mondjuk, hogy γ (N Σ)* járható prefix,ha van olyan αβw jobb mondatformamelynek nyelve β és teljesül rá, hogy γ prefixe αβ-nak. DEF: Az [A β 1.β 2,u] alakú párokat LR(k) elemeknek nevezzük, ahol A β 1 β 2 P és u Σ*, k. DEF: Azt mondjuk, hogy az [A β 1.β 2,u] LR(k) elem érvényes az αβ 1 járható prefixre, ha létezik S r *αaw αβ 1 β 2 w deriváció úgy, hogy u=fi k (w). LR(k) táblák: Adott γ járható prefix esetén a γ-ra érvényes LR(k) elemek halmazát V k (γ)-val jelöljök. Minden γ-ra V k (γ) véges halmaz. A V k (γ)-kat LR(k) tábláknak hívjuk. Egy V k (γ) halmazban lévő járható prefixeket egymás alá írva táblázatszerű elrendezést kapunk. Bevezetjük a τ = {V k (γ) γ járható prefix} jelölést. ALGORITMUS: V k (γ) meghatározása. Input: G nyelvtan és γ=x 1...X n szó,ahol X 1...X n (N Σ). Output: V k (γ) halmaz Módszer:: Kiszámoljuk a V k (λ),v k (X 1 ),..., V k (X 1...X n ) halmazokat. Algoritmus:: (a) V k (λ) kiszámítása (1) (Inicializálás.)Minden S α P esetén legyen [ S.α ] V k (λ). (2) (Lezárás) Mindaddig, amíg V k (λ) bővíthető, a V k (λ) minden [A.Bβ,u] alakú elemére és B δ P - beli szabályra,legyen [B.δ,v] V k (λ) minden v Fi k (βu) -ra (b) Tegyük fel, hogy V k (X 1...X i-1 ) -et már kiszámoltuk.ekkor kiszámítjuk a V k (X 1...X i ) -t. (1) (Léptetés) Minden [A α. X i β,u] alakú V k (X 1...X i-1 ) -beli elem esetén legyen [A α. X i β,u] V k (X 1...X i ). (1) (2) (Lezárás) Mindaddig,amíg V k (X 1...X i ) bővíthető, a V k (X 1...X i ) minden [A α.bβ,u] alakú elemére, és B δ P-beli szabályra,legyen [B.δ,v] V k (X 1...X i ) minden v Fi k (βu) -ra.
B8. Az LR(k) feltétel átfogalmazása (LR(k) tétel), a tevékenység és a goto táblák definíciója. Az LR(k) elemzési algoritmus. TÉTEL: G akkor és csakis akkor LR(k), ha minden T τ LR(k) táblára igaz, hogy ha T-ben van [A β.,u] alakú elem, akkor nincs benne egy olyan másik [B β 1.β 2,v] elem, melyre u EFF k (β 2 v). (Röviden: minden LR(k) tábla konzisztens.) Tevékenység tábla: az f tevékenység tábla oszlopai Σ*,k elemeivel vannak címkézve. A T τ sorhoz és az u Σ*,k oszlophoz tarozó f(t,u) sor azt írja le, hogy mit kell tenni, ha a vizsgált járható prefixre LR(k) elemek halmaza T, az előrenézett szó pedig u. Goto tábla: A g goto tábla oszlopai N Σ elemeivel vannak címkézve. A T=V k (γ) sor és az X oszlop által meghatározott elem V k (γx), tehát g(t,x)=v k (γx). ALGORITMUS: LR(k) elemzési algoritmus. Input: G (LR(k)) nyelvtan LR(k) elemző (tevékenység, goto) táblája és w Σ* szó. Output: Igen,ha w L(G), különben nem. Módszer: Az elemzés (x,αt,π) alakú konfigurációk sorozata, ahol: x Σ* egy szó, az elemzendő szó hátralévő része. αt (τ N Σ)*, ahol α tartalmazza a járható prefixet úgy, hogy ennek minden prefixe után α- ban benne van a rá érvényes LR(k) tábla is. Egy veremnek tekintjük, melynek teteje a jobb végén van. π egy, a szabályok sorszámaiból alkotott sorozat. Egy sornak tekintjük, melynek teteje a bal végén van. Kezdő konfiguráció: (w,t 0,λ), ahol T 0 =V k (λ). A befejező konfigurációk (λ,t 0 αt,π) alakúak. A konfigurációk közötti átmenetet -val jelöljük. Az átmeneti reláció úgy van definiálva, hogy w L(G) akkor és csakis akkor teljesül, ha a kezdő konfigurációból elértünk egy olyan (λ,t 0 αt,π) konfigurációt, melyre f(t,λ)=elfogadás. Az elemzési algoritmus: (1) C:=(w,T 0,λ) (2) Amíg van olyan C, melyre C C, legyen C:=C. (3) Ha C=(λ,T 0 αt,π) alakú, valamely π-re, és f(t,λ)=elfogadás, akkor output: igen, különben nem. Amennyiben az output igen, akkor 1π adja w egy jobb oldali levezetését, ahol 1 az egyetlen S bal oldalú szabály sorszáma. Átmeneti reláció: Tegyük fel, hogy az (x,αt,π) konfigurációban vagyunk. Képezzük u=fi k (x)-et. (1) f(t,u)=(redukálás,j), akkor αt veremből törlünk 2 β darab szimbólumot, ahol A β a j-edik szabály. Tegyük fel, hogy a veremben marad γt. Akkor (x,αt,π) (x,γt AT,jπ) ahol T =g(t,a). (2) Ha f(t,u)=shift, akkor
(x,αt,π) (x,αtat,π) ahol x=ax és T =g(t,a) (3) Ha f(t,u)=elfogadás (csak úgy lehet,ha T-ben van [S α.,λ] alakú elem és u=λ egyidejűleg teljesülnek), akkor nincs átmenet. (4) Ha f(t,u)=hiba, akkor nincs átmenet. B9. Egyszerű precedencia nyelvtanok definíciója, eldönthetősége. Egyszerű precedencia elemzési algoritmus. DEF: Egy G=(N,Σ,P,S) környezetfüggetlen nyelvtan egyszerű precedencia nyelvtan, ha rá a következők teljesülnek: G ciklusmentes és λ-mentes G egyértelműen redukálható minden X,Y (N Σ)-ra a <,= és > relációk közül legfeljebb egy áll fenn X és Y között. KÖVETKEZMÉNY: Tetszőleges G környezetfüggetlen nyelvtanról eldönthető, hogy egyszerű precedencia nyelvtan-e. ALGORITMUS: Egyszerű precedencia elemzési algoritmus. Input: G egyszerű precedencia nyelvtan, precedencia mátrix és w Σ* szó. Feltesszük továbbá, hogy G szabályai meg vannak számozva. Output: Igen, ha w L(G), különben nem. Módszer: Az elemzés ($α,x$,π) alakú konfigurációk sorozata, ahol: α (N Σ)*, az elemzendő szó már beolvasott részéből redukált járható prefix. Egy veremnek tekintjük, melynek teteje a jobb végén van. x Σ* egy szó, az elemzendő szó hátralévő része. teljesül továbbá, hogy αx r *w π szabályok sorszámaiból alkotott sorozat. Egy sornak tekintjük, melynek teteje a bal végén van. Kezdő konfiguráció: ($,w$,λ). A befejező konfigurációk ($S,$,π) alakúak. A konfigurációk közötti átmenetet -val jelöljük. Az átmeneti reláció úgy van definiálva, hogy w L(G) akkor és csakis akkor teljesül, ha ($,w$,λ) *($S,$,π) valamely π-re és ekkor π adja w egy jobb oldali levezetését. Az elemzési algoritmus: (1) C:=($,w$,λ) (2) amíg van olyan C, melyre C C, legyen C:=C (3) Ha C=($S,$,π) alakú, valamely π-re, akkor az output igen, különben nem. Amennyiben az output igen, akkor π adja w egy jobb oldali levezetését. Átmeneti reláció: Tegyük fel, hogy a C=($α,x$,π) konfigurációban vagyunk, ahol α (N Σ)* és x Σ*. Legyen X a $α verem tetején lévő szimbólum (vagyis $α=α X) és legyen a az x$ első betűje.(vagyis ax =x$) (1) Ha (precedencia mátrix szerint) X<a vagy X=a, akkor C C, ahol C =($αa,x,π). (2) Ha (precedencia mátrix szerint) X>a, akkor keressük mega $a veremben fölülről lefelé az első olyan helyet, ahol két veremszimbólum között < áll fenn, vagyis legyen β a legrövidebb szó, melyre $α=α β és α utolsó és β első betűje között < áll fenn. Ekkor: ha β egy A β szabály jobb oldala, akkor redukáljunk, vagyis C C, ahol C =(α A,x$,jπ) különben,vagyis ha β egyetlen szabálynak sem jobb oldala, akkor nincs átmenet. (3) Különben nincs átmenet.