7. előadás dr. Kallós Gábor 2017 2018
Tartalom Bevezető Deriváció Előállított szó és nyelv Levezetési sorozat Reguláris nyelvtanok Reguláris nyelvekre vonatkozó 2. ekvivalencia tétel Konstrukciók (NVA RG, RG NVA) 2
Bevezető Eml.: Nyelvfelismerő eszközök (1) vs. nyelvgenerátorok (2) (1): Olyan eszköz, amely érvényes sztringeket fogad el, pl. DVA, NVA (2): Olyan eszköz, amely képes érvényes sztringeket előállítani, pl. reguláris kifejezés (Nem formális nyelvi környezetben mi is tudjuk mindezt :-)) A reguláris kifejezések nyelvgenerátorok Működésük nincs teljesen pontosan meghatározva, de szabályok korlátozzák Példa: RE1 = a(a* b*)b Működés Először kiírunk egy a -t Ezután kiírunk valamennyi a -t, vagy valamennyi b -t Végül kiírunk egy b -t Vannak összetettebb nyelvgenerátorok is, ezek a környezetfüggetlen nyelvtanok (CFG) 3
CFG példa: az előző nyelv előállítása, RE1 = a(a* b*)b Minden ilyen szó három részre bontható Vezető a, majd középső rész, végül záró b A CFG-k szabályokat alkalmaznak a sztringek előállítására Nincs pontosan előírva, hogy éppen melyik szabályt kell használni Első szabály: S amb jelentése: lehet S és M új szimbólum a nyelv egy szavára, ill. a szó középső részére Az új szimbólumok jelentését a szabályok fejezik ki Eszerint: a nyelv egy szava a -val kezdődik, Következő szabályok: M A és M B A és B megint új szimbólumok (valamennyi egymás utáni a, illetve b ) A és B még nincs végleges formában Eszerint: a középső rész lehet valamennyi egymás ut. a, vagy b A vagy kapcsolat két szabállyal írható le 4
CFG példa (folyt.) Eddigi szabályok (eml.) S amb, M A és M B További szabályok A e Azaz: a valamennyi egymást követő a akár lehet e is A aa Azaz: a valamennyi egymást köv. a lehet olyan is, hogy 1 db a után még további a -k következnek És hasonlóan B e B bb Egyszerűen igazolható, hogy a most bevezetett CFG ugyanazt e nyelvet generálja, mint RE1 Pontos definíció és jelölésrendszer hamarosan (nagybetűk = nemterminálisok stb.) 5
Bevezető és CFG példa (folyt.) A CFG működését általánosan leíró algoritmus Állítsuk elő az előző nyelvtannal aaab-t! (Szabályok: S amb, M A, M B, A e, A aa, B e, B bb) S-ből indulunk, és sorra alkalmazzuk a szabályokat S amb eredménye amb M A hatására aab keletkezik A aa alkalmazása aaab-t állítja elő, újra A aa-val létrejön aaaab Végül az A e szabállyal aaab-t kapjuk 6
Bevezető és CFG példa (folyt.) Miért is környezetfüggetlen a CFG? Tekintsük az előző példából w = aaab-t! Eml.: A aa alkalmazása aaab-t állítja elő, újra A aa-val létrejön aaaab Az aa és b szócskákat, amik körbeveszik A -t, A környezetének hívjuk w-ben De szintén A környezete a és e is Az A aa szabály azt mondja, hogy A mindig helyettesíthető (!) aa -val, függetlenül attól, hogy mi A környezete Nem minden nyelvtan ilyen (lásd később Chomsky 1 és Chomsky 0 kategória) Példa szabályokra, amelyek nem lehetnek benne egy CFG-ben aaab aba, SaS bba Itt az átírás függ a környezettől 7
Definíció (CFG) Környezetfüggetlen nyelvtan (Chomsky 2-típusú nyelvtan) (Context-Free Grammar, CFG): G = (V, Σ, R, S) egy rendezett négyes, ahol V egy ábécé Σ Va terminálisok halmaza R (V Σ) V* a szabályok halmaza (Itt V Σa nemterminálisok halmaza) S V Σa kezdőszimbólum Megjegyzések A nyelv egy szava csak (tiszta) terminálisokat tartalmaz A szabályok baloldalán most csak egy db nemterminális van; a jobboldalon tetsz. V*-beli szó állhat (CFG-nél) A nyelvtanok máskor is (általánosabb esetek) ilyen négyesek, csak a szabályok mások Más gyakori megadás a nyelvtanra G = (N, T, P, S), ahol N nemterminálisok, T terminálisok, P szabályok (pl. F. Z.) Egy (A, u) R szabály írható A G u alakba is 8
Definíció (deriváció, előállítás, egy lépésben) Egy lépésben történő előállítás, deriváció (one step derivation), G : Legyen x, y, z V*, A V Σ Ha A G y R, akkor xaz G xyz Jelölés: u = xaz, v = xyz esetén u G v írható Megjegyzések Ha nyilvánvaló, hogy melyik nyelvtanra hivatkozunk, akkor A y, xaz xyz és u v írható a fentiek helyett A környezet akár e is lehet A definíció nemcsak CFG-k esetén, hanem általánosabban is érvényes (lásd később) Példák S as esetén S as is érvényes, a környezetek e -k Ugyanekkor asa aasa is igaz, ekkor a környezetek a -k Hasonlóan, asbc aasbc érvényes, a környezetek a és BC 9
Definíció (deriváció, előállítás, általánosan) Valahány lépésben történő előállítás, ált. deriváció (derivation), G *: G reflexív, tranzitív lezártja A w 0 G w 1 G G w n sorozatot w n (szó) w 0 -ból történő (egy) levezetésének hívjuk (G-ben) Itt w 0, w 1,, w n V* Ha a deriváció pontosan n lépésből áll, akkor külön hangsúlyozható, hogy w 0 n w n Megjegyzések Az utolsó kivételével az összes w i biztosan tartalmaz nemterminálist Ha nyilvánvaló, hogy melyik nyelvtanra hivatkozunk, akkor w 0 w 1 stb. írható Ez a definíció is érvényes általánosabban is (lásd később) Példák Csak S as alkalmazásával S as aas aaas adódik, ez pl. egy S e-vel zárható Az előző nyelvtanra: S amb aab aaab aaaab aaab 10
Definíció (CFG által előállított szó, nyelv) G nyelvtan által előállított szó (string/word generated by G): w L(G), ha S G * w G nyelvtan által generált nyelv (language generated by G), L(G): Az előző w szavak halmaza, {w Σ* S G * w} Környezetfüggetlen nyelv (context-free language, CFL): Olyan L nyelv, amelyhez található G környezetfüggetlen nyelvtan úgy, hogy L = L(G) Megjegyzések Figyeljünk: a nyelvtan és a nyelv két különböző fogalom! Vannak általánosabb és speciálisabb nyelvtanok/nyelvek is; a reguláris nyelveket pl. speciálisabb nyelvtanok is előállítják (lásd később) 11
Példa (CFG megadása) Adjunk meg olyan G(V,Σ, R, S) nyelvtant, amire L = {a n b n Σ* n 0}! Itt Σ = {a, b}. Megoldás V = {S, a, b} R = {S asb, S e} Rövidebben/tömörebben: S asb e Egyszerűen igazolható (pl. indukcióval), hogy ez a nyelvtan valóban L-t állítja elő Levezetés példa: S asb aasbb aabb Először az S asb szabályt használtuk (2 ), majd végül S e-t Látjuk, hogy ez a nyelvtan egy nemreguláris nyelvet állít elő! Tehát van olyan CF nyelv, ami nemreguláris (de reguláris nyelv CF) 12
Példa (CFG-beli levezetés) Mely szavak vezethetők le legfeljebb 4 lépésben S-ből indulva a következő G = {V, Σ, R, S} nyelvtannal? V = {a, b, A, B, S} Σ = {a, b} R = {S A, S aba, S ab, A a, B Sb} Megoldás S G A G a S G ab G asb G aab G aab S G ab G asb G aabab G aabab S G ab G asb G aabb G aasbb (Nem érünk célhoz 4 lépésben) S G aba G aba Négy sikeres levezetést tudunk adni 13
Példa ( Miniangol ) Készítsünk CF (részleges) angol nyelvtant! Itt W = {S, A, N, V, P} Σ S a mondat (sentence), A a jelző (melléknév; adjective), N a főnév (noun), V az ige (verb), és P a kifejezés (phrase) Σ = {Jim, big, green, cheese, ate} Vigyázzunk, Σ elemei (angol) szavak! R = {P N AP, S PVP, A big green, N cheese Jim, V ate} A következők legális sztringek (szavak) L(G)-ben Jim ate cheese big Jim ate green cheese big cheese ate Jim Sajnos azonban a következők is big cheese ate green green big green big cheese green Jim ate green big Jim Tanulság: egy valós nyelv nem írható le (korrekt módon) CF nyelvtannal Lásd még: minimagyar (B. I. 18 20.) 14
Példa (programozási nyelv részlet) Készítsünk olyan G CF nyelvtant, amelyik elő tud állítani egyszerű szintaktikailag helyes aritmetikai kifejezéseket! Mint például: (id * id + id)*(id + id), de nem *id + Itt id tetsz. azonosító (identifier) lehet, például változónév, foglalt (nyelvi) szó vagy konstans G = (V, Σ, R, E), ahol V = {+,*, (, ), id, T, F, E} E kifejezés (expression), T tag (term), F faktor (factor) Σ = {+,*, (, ), id} R = {E E+T, E T, T T*F, T F, F (E), F id} (R1) (R2) (R3) (R4) (R5) (R6) 15
Példa (programozási nyelv részlet) Az (id * id + id)*(id + id) kifejezés előállítása (eml.: szabályok) E T (R2)-ből T * F (R3)-ból T * (E) (R5)-ből T * (E + T) (R1)-ből T * (T + T) (R2)-ből T * (F + T) (R4)-ből T * (id + T) (R6)-ból T * (id + F) (R4)-ből T *(id + id) (R6)-ból F *(id + id) (R4)-ből (E) *(id + id) (R5)-ből (E + T) *(id + id) (R1)-ből (E + F) *(id + id) (R4)-ből (E + id) *(id + id) (R6)-ból (T + id) *(id + id) (R2)-ből (T * F + id) *(id + id) (R3)-ból (id * id + id)*(id + id) (R6)-ból 16
Reguláris nyelvtanok Definíció (reguláris nyelvtan) Reguláris nyelvtan (Chomsky 3-típusú nyelvtan, jobblineáris nyt.) (Regular Grammar, RG): Egy speciális CFG, G = (V, Σ, R, S), ahol V, Σ és S ugyanaz, mint korábban (ábécé, terminálisok, kezdőszimb.) R (V Σ) Σ*(V Σ {e}) a szabályok halmaza (Itt V Σa nemterminálisok halmaza) Azaz: olyan CFG, ahol a szabályok jobboldalán csak max. egy nemterminális lehet, és az is csak a jobb szélen Példa G = (V, Σ, R, S), ahol V = {S, A, B, a, b} Σ = {a, b} R = {S ba ab e, A abas, B babs} Megj.: A e alakú szabályok megengedettek CFG és RG esetén is 17
Reguláris nyelvtanok Reguláris nyelvekre vonatkozó 2. ekvivalencia tétel Tétel: egy nyelv reguláris előállítható reguláris nyelvtannal Következmény: nyilván CFG-vel is előállíthatók a reguláris nyelvek! Bizonyítás, konstrukció Tfh. L reguláris, ekkor véges automatával felismerhető (eml.: 1. ekv. tétel); Legyen M(K, Σ,, s, F) olyan NVA, amire L = L(M) Készítsünk olyan G(V, Σ, R, S) RG-t, amire L(M) = L(G)! Legyen V = K Σ S = s K elemei lesznek G nemterminálisai (V Σ; Σ elemei a terminálisok) R = {q xp (q, x, p) } {q e q F}, azaz minden q pátmenetre x Σ(vagy esetleg Σ*) olvasásával található R-ben q xp szabály Megj.: Az automata átmenetei direkt módon nyelvtani szabályokká alakíthatók; egyszerű esetben ún. redukált nyelvtant kapunk Lásd még F. Z., körbebizonyítás 18
Reguláris nyelvtanok 2. ekvivalencia tétel (RL), bizonyítás (folyt.), ekvivalens működés igazolása (NVA RG) Tfh. w L(M)! w L(M) (s, w) w* (p, e), p F (elfogadás definíciójából) (p 0, w 1 w 2 w n ) w (p 1, w 2 w n ) w w (p n, e), p n F (a tranzitivitás miatt) Itt w = w 1 w 2 w n, p 0, p 1,... p n K, p 0 = s, p n = p (p 0, w 1 w 2 w n ) w (p 1, w 2 w n ), (p 1, w 2 w 3 w n ) w (p 2, w 3 w n ), átmenetek (p 0, w 1, p 1 ), (p 1, w 2, p 2 ),... (az egy lépésben történő előállítás (yield) definíciójából) átmenetek... szabályok: p 0 w 1 p 1, p 1 w 2 p 2, (G felépítéséből) szabályok p 0 w 1 p 1 w 1 w 2 p 2 w 1 w 2 w n p n s * wp n (az egy lépésben történő deriváció def.-ból és a tranzitivitásból; itt p 0,... p n V Σ) p n F p n e szabály (G felépítéséből) (p n e) (wp n we) (az egy lépésben történő előállítás (yield) def.-ból) s * wp n, wp n w s * w (a tranzitivitásból) s * w w L(G) (a G által generált sztring definíciójából) 19
Reguláris nyelvtanok 2. ekvivalencia tétel (RL),, konstrukció példa (NVA RG) Készítsünk olyan G = (V, Σ, R, S) RG-t, ami ekvivalens működésű az adott NVA-val! Eml.: V = K Σ; R = {q xp (q, x, p) } {q e q F} Megoldás V = {P, Q, a, b} Σ = {a, b} S = P R = {P ap, P bp, P abaq, Q aq, Q bq, Q e} a, b a, b aba Megj.: az aba átmenet (természetesen) feldarabolható, új állapotok bevezetésével Adjuk meg a számítási sorozatot és az előállítást a w = ababb szóra! Az automatára: (p, ababb) w (q, bb) w (q, b) w (q, e) A nyelvtanra: S = P abaq ababq ababbq ababb p q 20
Reguláris nyelvtanok 2. ekvivalencia tétel (RL),, konstrukció példa (NVA RG) Készítsünk olyan G = (V, Σ, R, S) RG-t, ami ekvivalens működésű az adott NVA-val! Eml.: V = K Σ; R = {q xp (q, x, p) } {q e q F} Megoldás V = {A, B, S, a, b} Σ = {a, b}, S = S R = {S as ba, A ab ba, B as ba, B e, S e} Adjuk meg a számítási sorozatot és az előállítást a w = babaa szóra! Az automatára: (S, babaa) w (A, abaa) w (B, baa) w (A, aa) w (B, a) w (S, e) A nyelvtanra: S ba bab baba babab babaas babaa S a a b B b b A a 21
Reguláris nyelvtanok 2. ekvivalencia tétel (RL) Eml.: egy nyelv reguláris előállítható reguláris nyelvtannal Bizonyítás (folyt.), konstrukció Tfh. L-et előállítja valamely G(V, Σ, R, S) RG Készítsünk olyan M(K, Σ,, s, F) NVA-t, amire L(M) = L(G)! Legyen K = (V Σ) {f}, ahol f V S = s F = {f} = {(A, w, B) A wb R; A, B V Σ; w Σ*} {(A, w, f) A w R; A V Σ; w Σ*}, azaz: a nyelvtan szabályai direkt módon automatásíthatóak Megj.: Ha -ban w Σ*-nál el akarjuk kerülni a sztring-címkéjű éleket, akkor a nyelvtan redukálható (ekvivalens nyelvtan) Lásd még F. Z., körbebizonyítás 22
Reguláris nyelvtanok 2. ekvivalencia tétel (RL), bizonyítás (folyt.), ekvivalens működés igazolása (RG NVA) Tfh. w L(G)! w L(G) S * w (a G által generált sztring definíciójából) S * w A 1 w 1 A 2 w 1 w 2 A 3 w 1 w 2 w n-1 A n w 1 w 2 w n (a tranzitivitásból) Ha w elérhető n lépésben, akkor ezek a lépések leírhatók egymás után Itt A 1, A 2, A n V Σ, A 1 = S, w = w 1 w 2 w n A 1 w 1 A 2 A 1 w 1 A 2, A 2 w 2 A 3,..., A n w n R szabályok (az egy lépésben történő deriváció def.-ból) szabályok (A 1, w 1, A 2 ), (A 2, w 2, A 3 ),... átmenetek (M felépítéséből) átmenetek... (A 1, w 1 w 2 w n ) w (A 2, w 2 w 3 w n ) w w (A n, w n ) (S, w) w* (A n, w n ) (az egy lépésben történő előállítás (yield) definíciójából) A n w n szabály (A n, w n, f) (M felépítéséből) (A n, w n, f) (A n, w n ) w (f, e) (az egy lépésben történő előállítás (yield) definíciójából) (S, w) w* (A n, w n ), (A n, w n ) w (f, e) (S, w) w* (f, e) (a tranzitivitásból) (S, w) w* (f, e), f F w L(M) (az elfogadás definíciójából) 23
Reguláris nyelvtanok 2. ekvivalencia tétel (RL),, konstrukció példa (RG NVA) Készítsünk olyan M NVA-t, ami ekvivalens működésű az adott G = (V, Σ, R, S) RG-vel! RG: Eml.: K = (V Σ) {f}, ahol f V, F = {f} = {(A, w, B) A wb R} {(A, w, f) A w R} V = {A, B, S, a, b} Σ = {a, b} S = S R = {S aa bb e, A abs, B bas a} Itt L(G) = (aab bba)*(ba e) Megoldás Adjuk meg az előállítást és a számítási sorozatot a w = aabbba szóra! Nyelvtan: S aa aabs aabbb aabbbas aabbba Automata: (S, aabbba) w (A, abbba) w (S, bba) w (B, ba) w (S, e) w (f, e) f e S ab a A b ba a B 24
Ajánlott irodalom Harry R. Lewis, Christos H. Papadimitriou: Elements of the Theory of Computation (2 nd ed.), Prentice-Hall, Upper Saddle River, 1998 Fülöp Zoltán: Formális nyelvek és szintaktikus elemzésük, Polygon, Szeged, 2001 Dömösi Pál és társai: Formális nyelvek és automaták, Elektronikus jegyzet, 2011 Bach Iván: Formális nyelvek, Typotex kiadó, Budapest, 2002 Alan P. Parkes: A Concise Introduction to Languages and Machines, Springer, London, 2008 25