5. előadás Reguláris kifejezések, a reguláris nyelvek jellemzése 1.

Hasonló dokumentumok
6. előadás A reguláris nyelvek jellemzése 2.

6. előadás A reguláris nyelvek jellemzése 2.

Házi feladatok megoldása. Nyelvek felismerése. Házi feladatok megoldása. Házi feladatok megoldása. Formális nyelvek, 5. gyakorlat

Chomsky-féle hierarchia

A Formális nyelvek vizsga teljesítése. a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon:

A Formális nyelvek vizsga teljesítése. a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon:

Chomsky-féle hierarchia

Házi feladatok megoldása. Nyelvtani transzformációk. Házi feladatok megoldása. Házi feladatok megoldása. Formális nyelvek, 6. gyakorlat.

Formális nyelvek - 5.

Feladatok. 6. A CYK algoritmus segítségével döntsük el, hogy aabbcc eleme-e a G = {a, b, c}, {S, A, B, C}, P, S nyelvtan által generált nyelvnek!

Formális nyelvek és automaták

Formális nyelvek és automaták vizsgához statisztikailag igazolt várható vizsgakérdések

Automaták és formális nyelvek

Halmazelmélet. 1. előadás. Farkas István. DE ATC Gazdaságelemzési és Statisztikai Tanszék. Halmazelmélet p. 1/1

A digitális számítás elmélete

Formális nyelvek - 9.

7. előadás Környezetfüggetlen nyelvtanok

1. Részcsoportok (1) C + R + Q + Z +. (2) C R Q. (3) Q nem részcsoportja C + -nak, mert más a művelet!

Formális Nyelvek - 1. Előadás

1. előadás: Halmazelmélet, számfogalom, teljes

MintaFeladatok 1.ZH Megoldások

Automaták mint elfogadók (akceptorok)

9. előadás Környezetfüggetlen nyelvek

Gy ur uk aprilis 11.

Emlékeztető: LR(0) elemzés. LR elemzések (SLR(1) és LR(1) elemzések)

1 2. gyakorlat Matematikai és nyelvi alapfogalmak. dr. Kallós Gábor

A számítógépes nyelvészet elmélete és gyakorlata. Formális nyelvek elmélete

MintaFeladatok 1.ZH Megoldások

Véges automaták, reguláris nyelvek

Logika és számításelmélet. 10. előadás

KOVÁCS BÉLA, MATEMATIKA I.

Diszkrét matematika I., 12. előadás Dr. Takách Géza NyME FMK Informatikai Intézet takach november 30.

Diszkrét matematika 2. estis képzés

Diszkrét matematika II., 8. előadás. Vektorterek

Klasszikus algebra előadás. Waldhauser Tamás április 28.

ZH feladatok megoldásai

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

A 2015/2016. tanévi Országos Középiskolai Tanulmányi Verseny döntő forduló MATEMATIKA III. KATEGÓRIA (a speciális tanterv szerint haladó gimnazisták)

MintaFeladatok 2.ZH Megoldások

KOVÁCS BÉLA, MATEMATIKA I.

Feladatok: 1. Add meg a következ balreguláris nyelvtannak megfelel jobbreguláris nyelvtant!

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé.

2. Ítéletkalkulus szintaxisa

Feladatok. BNF,EBNF,szintaxisgráf

Relációk Függvények. A diákon megjelenő szövegek és képek csak a szerző (Kocsis Imre, DE MFK) engedélyével használhatók fel!

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé. (Albert Einstein) Halmazok 1

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Számelmélet I.

10. előadás. Konvex halmazok

3. Fuzzy aritmetika. Gépi intelligencia I. Fodor János NIMGI1MIEM BMF NIK IMRI

A valós számok halmaza 5. I. rész MATEMATIKAI ANALÍZIS

Csempe átíró nyelvtanok

Formális nyelvek és automaták előadások

ALGEBRAI NYELV- ÉS KÓDELMÉLET. Babcsányi István

Formális nyelvek és gépek (definíciós és tétel lista - 09/10/2)

RE 1. Relációk Függvények. A diákon megjelenő szövegek és képek csak a szerző (Kocsis Imre, DE MFK) engedélyével használhatók fel!

A valós számok halmaza

Csima Judit november 15.

KOVÁCS BÉLA, MATEMATIKA I.

Az R halmazt a valós számok halmazának nevezzük, ha teljesíti az alábbi 3 axiómacsoport axiómáit.

OSZTHATÓSÁG. Osztók és többszörösök : a 3 többszörösei : a 4 többszörösei Ahol mindkét jel megtalálható a 12 többszöröseit találjuk.

Bevezetés. 1. fejezet. Algebrai feladatok. Feladatok

1. A polinom fogalma. Számolás formális kifejezésekkel. Feladat Oldjuk meg az x2 + x + 1 x + 1. = x egyenletet.

Halmaz: alapfogalom, bizonyos elemek (matematikai objektumok) Egy halmaz akkor adott, ha minden objektumról eldönthető, hogy

A SZÁMÍTÁSTUDOMÁNY ALAPJAI

Arany Dániel Matematikai Tanulóverseny 2015/2016-os tanév 1. forduló Haladók III. kategória

Házi feladatok megoldása. Nyelvek használata adatszerkezetek, képek leírására

Formális nyelvek előadások tavaszi félév

Műveletek mátrixokkal. Kalkulus. 2018/2019 ősz

Hatványozás. A hatványozás azonosságai

Bizonyítási módszerek - megoldások. 1. Igazoljuk, hogy menden természetes szám esetén ha. Megoldás: 9 n n = 9k = 3 3k 3 n.

Segédanyagok. Formális nyelvek a gyakorlatban. Szintaktikai helyesség. Fordítóprogramok. Formális nyelvek, 1. gyakorlat

Diszkrét matematika I.

MATE-INFO UBB verseny, március 25. MATEMATIKA írásbeli vizsga

Alap fatranszformátorok II

Vizsgatematika Bevezetés a matematikába II tárgyhoz tavasz esti tagozat

Nagy Gábor compalg.inf.elte.hu/ nagy

Atomataelmélet: A Rabin Scott-automata

f(x) vagy f(x) a (x x 0 )-t használjuk. lim melyekre Mivel itt ɛ > 0 tetszőlegesen kicsi, így a a = 0, a = a, ami ellentmondás, bizonyítva

VEKTORTEREK I. VEKTORTÉR, ALTÉR, GENERÁTORRENDSZER október 15. Irodalom. További ajánlott feladatok

HALMAZOK. A racionális számok halmazát olyan számok alkotják, amelyek felírhatók b. jele:. A racionális számok halmazának végtelen sok eleme van.

Csima Judit BME, VIK, november 9. és 16.

Diszkrét matematika 1. estis képzés

Diszkrét matematika 2. estis képzés

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

Ítéletkalkulus. 1. Bevezet. 2. Ítéletkalkulus

út hosszát. Ha a két várost nem köti össze út, akkor legyen c ij = W, ahol W már az előzőekben is alkalmazott megfelelően nagy szám.

Matematika III. 2. Eseményalgebra Prof. Dr. Závoti, József

Reguláris kifejezések 1.

A Számítástudomány alapjai

DISZKRÉT MATEMATIKA: STRUKTÚRÁK Előadáson mutatott példa: Bércesné Novák Ágnes

KOVÁCS BÉLA, MATEMATIKA I.

1. Mondjon legalább három példát predikátumra. 4. Mikor van egy változó egy kvantor hatáskörében?

Negatív alapú számrendszerek

Analízis I. Vizsgatételsor

1. Halmazok, számhalmazok, alapműveletek

Az Országos Középiskolai Tanulmányi Verseny tanévi második fordulójának feladatmegoldásai. x 2 sin x cos (2x) < 1 x.

Logika es sz am ıt aselm elet I. r esz Logika 1/36

A számítógépes nyelvészet elmélete és gyakorlata. Automaták

1. Interpoláció. Egyértelműség Ha f és g ilyen polinomok, akkor n helyen megegyeznek, így a polinomok azonossági tétele miatt egyenlők.

Matematikai logika és halmazelmélet

Átírás:

5. előadás Reguláris kifejezések, a reguláris nyelvek jellemzése 1. Dr. Kallós Gábor 2014 2015 1

Tartalom Reguláris kifejezések Meghatározás, tulajdonságok Kapcsolat a reguláris nyelvekkel A reguláris nyelvek általános tulajdonságai A reguláris nyelvek osztályának jellemzése a körbebizonyítás Az 1. állítás és igazolása Ekvivalens reguláris és 3-típusú nyelvek Feladatok 2

Reguláris kifejezések Reguláris nyelvek Eddig: generáló reguláris nyelvtannal Most: új előállítási módszer (a reguláris kifejezés egy formula, amely szavakat állít elő) Legyen X egy ábécé Az alap ábécé jelölésére X helyett Ʃ is szokásos Definíció: Az X feletti reguláris kifejezések (Regular Expression, RE) halmaza az (X {, (, ), +, *})* halmaz legszűkebb olyan U részhalmaza, amelyre teljesül: U (λ U), a X-re a U, ha R 1, R 2 U, akkor (R 1 ) + (R 2 ), (R 1 ) (R 2 ) és (R 1 )* is elemei U-nak. (R 1 ) + (R 2 ): unió művelet (R 1 ) (R 2 ): konkatenáció művelet (a elhagyható) (R 1 )*: iteráció művelet (vagy: tranzitív lezárás, Kleene csillag) Kérdés: λ U-t nem kell feltétlenül kiírni (ha legalább egy a U található). Miért? Az X feletti reguláris kifejezések tehát az X elemeiből, valamint a, (, ), +, * (és esetleg ) szimbólumokból álló bizonyos szavak Alternatív definíció: X ábécé felett reguláris kifejezés, λ reguláris kifejezés, a X-re a reguláris kifejezés, amennyiben p és q reguláris kifejezések X felett, akkor p + q, p q és p* is reguláris kifejezések. 3

Reguláris kifejezések Megjegyzések A zárójelek itt ha ez nem okoz gondot elhagyhatók, precedencia a műveletekre: * (iteráció), majd konkatenáció, végül unióképzés (tudjuk már; lényegében: ^,, +) Például (A + B) (C + D) = AC + AD + BC + BD De vigyázzunk, ha A B, akkor A + B = B Hasonlóan: (a + ((b*)c)) = a + ((b*)c) = a + (b*)c = a + b*c A precedencia itt is megváltoztatható zárójelezéssel A reguláris kifejezések megadása környezetenként lehet kissé eltérő (gyakran: használható a vagy / unió kapcsolatra; ill. a + művelet -val is jelölhető), de ez nem okoz zavart Példák Legyen X = {a, b, c}. Ekkor (a + b c)* (c + ) reguláris kifejezés X felett, (a + b +) nem reguláris kifejezés. Adjunk meg további példákat reguláris és nem reguláris kifejezésre X felett! Legyen X = {0, 1}. Ekkor a 010 részt tartalmazó szavakat definiáló reguláris kifejezés megadható a következő módokon: (((0) + (1))*) (010) (((0) + (1))*) ((0) + (1))* (010) ((0) + (1))* (0 + 1)* (010) (0 + 1)* (0 + 1)* 010 (0 + 1)* vagy: (0 + 1)*(010)(0 + 1)* (0 1)* 010 (0 1)*. A kifejezést kielégítő szó: 00101011. 4

Reguláris kifejezések és reguláris nyelvek Minden X feletti R reguláris kifejezés meghatároz (reprezentál) egy X feletti nyelvet Definíciók: Legyen R egy X feletti reguláris kifejezés. Az R által meghatározott (reprezentált) R nyelvet indukcióval a következőképpen definiáljuk: Ha R = (szimbólum), akkor R = (nyelv), Ha R = a (szimbólum), akkor R = {a} (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 *. Egy L X * nyelvről azt mondjuk, hogy reguláris nyelv, ha reprezentálható reguláris kifejezéssel, vagyis, ha van olyan X feletti R reguláris kifejezés, amelyre L = R Igazoljuk majd, hogy ez konzekvens a korábbi meghatározással (korábban: 3-típusú, jobblineáris, reguláris) Megjegyzés R helyett az L(R) jelölés is használatos, ekkor L( ) =, L(λ) = {λ}, L(a) = {a} L(R 1 + R 2 ) = L(R 1 ) L(R 2 ) L(R 1 R 2 ) = L(R 1 ) L(R 2 ) L((R 1 )*) = (L(R 1 ))* 5

Reguláris kifejezések és reguláris nyelvek Az unió és a konkatenáció műveletek tartják a végességet, vagyis ha a * művelet nem szerepel egy reguláris kifejezésben, akkor az általa leírt nyelv véges Így pontosan a véges nyelvek egy jellemzését kapjuk (lásd 15. slide) Definíció: Két reguláris kifejezés ekvivalens, ha ugyanazt a nyelvet generálják Formális jelöléssel: p q, ha L(p) = L(q) Egy reguláris nyelvhez általában több generáló reguláris kifejezés is található (Érdekes problémák: El lehet-e dönteni algoritmussal, hogy két reguláris kifejezés ugyanazt a nyelvet állítja-e elő? Van-e egy adott nyelvhez őt előállító minimális legrövidebb reguláris kifejezés? A válasz mindkét kérdésre igen, lásd lent.) A definíciókból az is következik, hogy az X feletti reguláris nyelvek pontosan azok a nyelvek, amelyek előállnak az üres halmazból (mint nyelvből), és az {a} alakú elemi nyelvekből (ahol a X) az egyesítés, a konkatenáció és az iteráció műveletek véges sokszori alkalmazásával (Lásd még: zártság, 13. slide) Ezt a tulajdonságot fel fogjuk használni a későbbiekben 6

Reguláris kifejezések és reguláris nyelvek Példák Reprezentált nyelvek megadása szavak felsorolásával (Legyen X = {a, b}) ( )* = * = * = {λ} = {λ} (a + b)* = a + b * = {a, b}* = tudjuk (ab) (a)* = (ab) (a)* = a b (a) * = a b a * = {a}{b}{a}* = = {ab}{λ, a, aa, } = {ab, aba, abaa, } L((a + b) a*) = L(a + b) L(a*) = (L(a) L(b)) (L(a))* = = ({a} {b})({a})* = {a, b}{λ, a, aa, aaa, } = Az utóbbi nyelvet adjuk meg halmaz definícióval is! Reprezentált nyelvek megadása halmaz definícióval L(a* b (a + b)) = {a n ba, a n bb n 0} L((aa)*(bb)*b) = {a 2n b 2m b n, m 0} (Legyen X = {0, 1}) L(0* 0 1* 1 0) = {0 n 1 m 0 n 1, m 1} Reprezentált nyelvek megadása szóbeli leírással L(0 (0 + 1) (0 + 1)*) = {0-val kezdődő, legalább 2 hosszú szavak} L(0 (0 + 1)* 1 (0 + 1)* 1 (0 + 1)*) = {0-val kezdődő, legalább két 1-est tartalmazó szavak} 7

Reguláris kifejezések és reguláris nyelvek Feladatok Adjuk meg az L((a + b c)*) nyelvet! Adjuk meg az L((a + b)*(a + bb)) nyelvet! Adjuk meg az L((a c + b c)*) nyelvet! Szerepelhet a nyelv valamely szavában az ab részszó? Milyen nyelveket definiálnak a következő reguláris kifejezések: (a + b)* (aa + bb)(a + b)* (a + b)* (aa (b + a)* bb + bb (a + b)* aa) (a + b)* Írjuk le szavakkal vagy halmaz definícióval az alábbi reguláris kifejezésekkel meghatározott nyelveket! 0 (0 + 1)*1 (a + b)* a (a + b)* (λ + 1)* 0* 001 (111)* Adjunk meg ekvivalens reguláris kifejezést a következőkhöz! (Lásd köv. old.) (a + b + aa + bb), (a + b) (a + bb) (a + b) a*, (a + b)*(a + bb) (a c + b c)*, (aa)*(bb)*b Mely esetekben lesz a generált nyelv véges? 8

Reguláris kifejezések és reguláris nyelvek Általános ekvivalenciák Itt P, Q, R és T tetszőleges reguláris kifejezések: P P +, P + Q Q + P, (P + Q) + R P + (Q + R), (P Q) R P (Q R), (P + Q) (R + T) (PR + PT + QR + QT), (ebből több másik ekvivalencia is következik, lásd lent) (P + Q)* (P* + Q)* (P + Q*)* (P* + Q*)*, (P*)* P*, RR* R*R, RR* + λ R*. Írjuk le, hogy mi adódik (P + Q) (R + T) -ból, ha Q = vagy T =! Emellett egyéb ekvivalenciák is felírhatók, pl. * λ(7. slide) Példák ekvivalens kifejezésekre Az {a, ab} ( szegényes ) nyelvhez (a *) + (a b) = {a, ab}, és a + a b = {a, ab} 1*1* 1*, 1*(1 + *) 1* 9

Reguláris kifejezések és reguláris nyelvek Feladatok Adjuk meg reguláris kifejezéssel azt a nyelvet az X = {0, 1} ábécé felett, amely azon szavakból áll, amelyek tartalmazzák részszóként a 010 szót! Megoldás: L = ((0) + (1))* (010) ((0) + (1))* = (0 + 1)*(010) (0 + 1)* Vagy másként, csak a definiáló reguláris kifejezés (2. jelölésmód): R = (0 1)*(010) (0 1)* amely azon szavakból áll, amelyek tartalmazzák részszóként a 000 vagy az 111 szót! Megoldás: L = ((0) + (1))* ((000) + (111)) ((0) + (1))* = = (0 + 1)*(000 + 111) (0 + 1)* Csak a definiáló reguláris kifejezés (2. jelölésmód): R = (0 1)*(000 111) (0 1)* amely azon 1-esre végződő szavakból áll, amelyek nem tartalmazzák részszóként a 00 szót! Megoldás: L = ((1) + (01))* = (1 + 01)* amely azon szavakból áll, amelyek hárommal osztható számú egyest tartalmaznak! Megoldás: L = ((0)* (1) (0)* (1) (0)* (1) (0)*)* = (0* 1 0* 1 0* 1 0*)* amely azon szavakból áll, amelyek 3. betűje 0! amely azon szavakból áll, amelyek tartalmaznak legalább három egyest! További feladatok Egyszerűsítsük a felesleges zárójeleket tartalmazó alakokat! Próbáljunk ekvivalens kifejezéseket is keresni! (pl. utolsó előtti feladat) 10

Reguláris kifejezések és reguláris nyelvek Feladatok haladóknak Vizsgáljuk meg az a*(ba*)* és a b*(ab*)* kifejezések által előállított nyelveket! Azonosak-e? (Útm.: Próbáljuk ki sorban az {a, b}* feletti szavak előállítását) Mondhatjuk-e, hogy az előállított nyelv {a, b}*? Ha nem, akkor keressünk ekvivalens reguláris kifejezést {a, b}* előállítására! *Próbáljunk minél egyszerűbb kifejezést megadni! Adjunk meg két különböző reguláris kifejezést {0, 1}* felett a páros számú egyest tartalmazó szavak előállítására! Adjunk reguláris kifejezést a legfeljebb egy, ill. legfeljebb három db a-t tartalmazó {a, b}*-beli szavak előállítására! Hogyan lehetne megadni reguláris kifejezéssel egy előjeles egész számot (tízes számrendszerben)? Milyen problémákba ütközünk, milyen megoldás jöhet szóba? Bővítsük a megoldást úgy, hogy törtszámokat is tudjunk kezelni! Konstruáljunk olyan példát, hogy egy általunk választott hosszú (pl. 15-20 karakternél hosszabb) és egy rövid reguláris kifejezés ekvivalens! Ellenőrizzük a konstrukciónkat! 11

Reguláris kifejezések Példa (alkalmazás) (A reguláris kifejezések nyelveket határoznak meg, azok pedig felismerhetők automatákkal, lásd lent) A lexikális elemző (lásd később, fordítás) egy olyan az eredeti programszövegből előállított karaktersorozatot dolgoz fel, amely szintén megadható reguláris kifejezések segítségével Jelöljön most D egy tetszőleges számjegyet és L egy tetszőleges betűt, azaz D {0, 1,, 9} és L {a, b,, z, A, B,, Z}. A nem látható karaktereket jelöljük a rövid nevükkel (pl. space, Eof, Eol). Néhány szimbólum megadása reguláris kifejezéssel Egész szám: (+ λ) D + Vagy: (+ λ) DD* Pozitív egész és valós szám: (D + ( λ.)) (D*. D + ) Kitevő részt is tartalmazó valós szám: (+ λ) D +. D + (E(+ λ) D + λ) Egyszerű azonosító szimbólum: L (L D)* Azonosító szimbólum: L ((_ λ) (D L))* Komment: // (Not(Eol))*Eol ## karakterpárokkal határolt komment: ## ((# λ) Not(#))* ## Kérdés: Mi itt a belső blokk szerepe? Feladat: Adjuk meg az 1., 2., 4., 5., 6. és 7. kifejezésekhez konstruálható determinisztikus véges automatákat! (Cs. Z. 16.) 12

A reguláris nyelvek tulajdonságai Eml.: Mit jelent a zártság? Veszünk egy (vagy kettő, három, ) tetszőleges nyelvet az adott típusból Alkalmazzuk a nyelvre/nyelvekre a megfelelő műveletet Ha igazolni tudjuk, hogy az eredményül kapott nyelv szintén mindig beletartozik az adott típusba, akkor az adott típusú nyelvek zártak (azaz maga a nyelvosztály zárt) az adott műveletre Eml.: Mire jó a zártság? Egyszerűen igazolható sokféle származtatott nyelv adott típusba tartozása Nyelvosztály általános jellemzéséhez stb. Tétel: A reguláris nyelvek osztálya zárt a reguláris műveletekre nézve Bizonyítás: Meg kell mutatni, hogy ha L, L 1, L 2 X * reguláris nyelvek, akkor L 1 L 2, L 1 L 2 és L* is azok. (Eml.: Egy nyelv reguláris, ha van olyan X feletti reg. kif., ami előállítja.) Legyenek tehát R, R 1 és R 2 olyan reguláris kifejezések, amelyekre R = L, R 1 = L 1 és R 2 = L 2 (ilyenek találhatók). A reguláris kifejezések definíciója szerint (R 1 ) + (R 2 ), (R 1 ) (R 2 ) és (R)* is reguláris kifejezések. Továbbá, a reprezentált nyelv definíciója szerint (R 1 ) + (R 2 ) = L 1 L 2, (R 1 ) (R 2 ) = L 1 L 2, (R)* = L*. Tehát az L 1 L 2, L 1 L 2 és L* nyelvek reprezentálhatók reguláris kifejezésekkel, így regulárisak. Megj.: A reguláris műveletekre a többi nyelvosztály is zárt (kivéve 2.5 típ., lásd D. P.) 13

Formális nyelvek A reguláris nyelvek tulajdonságai Állítás: Az X* feletti nyelvek nyelvalgebrát alkotnak. Azaz: Az L, L 1, L 2 és L 3 X* reguláris (kifejezések által definiált) nyelvekre érvényesek a következő tulajdonságok: L 1 L 2 = L 2 L 1 (az összeadás kommutatív) (L 1 L 2 ) L 3 = L 1 (L 2 L 3 ) (az összeadás asszociatív) L = L (létezik additív egységelem) (L 1 L 2 )L 3 = L 1 (L 2 L 3 ) (a szorzás asszociatív) L{λ} = {λ}l = L (létezik multiplikatív egységelem) (L 1 L 2 )L 3 = L 1 L 3 L 2 L 3 (baloldali disztributivitás) L 1 (L 2 L 3 ) = L 1 L 2 L 1 L 3 (jobboldali disztributivitás) {λ}* = {λ}, * = {λ} LL* = L*L, L* = {λ} LL* (eml.: L + = LL*) (L 1 L 2 )* = (L 1 * L 2 *)* (unió kiváltása) k = ( ) U k i L L L, k 1 i= 1 Igazolás (*csak az utolsó kifejezésre): Bal oldali szavak: üres szó, és p = p 1 p 2 p n (n 1) alakúak, ahol p 1, p 2,, p n L, és van nem üres szó a p i -k között Legyen most n = uk + v, ahol 0 v < k. Ekkor p = q 1 q 2, ahol vagy q 1 = λ (ekkor u = 0), vagy pedig q 1 = p 1 p 2 p uk, ahol p 1, p 2,, p uk L, (ha u 0), és ugyanekkor vagy q 2 = λ (ekkor v = 0), vagy q 2 = p uk+1 p uk+2 p uk+v, ahol p uk+1, p uk+2,, p uk+v L, (ha v 0). Mindenképpen fennáll, hogy q 1 (L k )*, és q 2 L v (0 v < k), azaz p = q 1 q 2 (L k )*L v. Így tehát p mindkét oldalnak eleme. 14

A reguláris nyelvek tulajdonságai Állítás: Minden véges nyelv reguláris Bizonyítás: Legyen X egy ábécé és L X* egy véges nyelv. Ha L =, akkor L nyilván reguláris, hiszen L = R, ahol R =. Különben megadható L = {x 1, x 2,, x n }, ahol n 1 (a szavak felsorolhatók). Mivel L = {x 1 } {x 2 } {x n }, és a reguláris nyelvek zártak az unió műveletre, elegendő igazolni, hogy az {x i } alakú nyelvek regulárisak. Ha x i = λ, akkor {x i } = R i, ahol R i = ( )*, azaz {x i } reguláris. Különben x i = a i1 a i2 a im, ahol m 1, és a i1, a i2,, a im X. Az {a i1 }, {a i2 },, {a im } betűkhöz tartozó nyelvek regulárisak (a definícióból), így az {x i } = {a i1 }{a i2 } {a im } nyelv is reguláris, mert a reguláris nyelvek zártak a konkatenációra. Alternatív bizonyítás: Legyen L = {w 1, w 2,, w n } véges nyelv (megadhatjuk az elemeinek a felsorolásával) valamilyen T ábécé felett, ekkor a G = ({S}, T, S, {S w i w i L}) (nagyon egyszerű) nyelvtan pontosan L-t generálja. Másrészt G minden szabályára igaz, hogy a jobboldalon csak terminálisok szerepelhetnek, így a G reguláris. (Ez a bizonyítás felhasználja, hogy a 3-típusú nyelvek osztálya megegyezik a reguláris nyelvek osztályával, lásd körbebiz. vége) Megjegyzések Tudjuk, hogy vannak végtelen reguláris nyelvek is (lásd 2. slidesor., ill. lent) (Azaz: nem minden reguláris nyelv véges, itt tehát valódi tartalmazás áll fent!) Példa: végtelen reguláris nyelv Az (aa)* reguláris kifejezés által generált nyelv: L = {a 2n n 0} Ugyanez a nyelv a G = ({S}, {a}, S, {S aas, S λ}) nyelvtannal is megadható 15

A reguláris nyelvek osztályának jellemzése A továbbiakban megmutatjuk, hogy Tétel: Tetszőleges Ʃ ábécé felett a korábban megismert 3-típusú nyelvek osztálya, a véges automatákkal felismerhető nyelvek osztálya és a reguláris nyelvek osztálya egymással megegyezik (Eml.: 3-típusú nyelvtan szabályaira N T* vagy N T*N, itt T = Ʃ = X = I) Több lehetséges igazolási mód is elképzelhető Mi a bizonyítást 3 állításra bontjuk ( körbebizonyítás, F. Z.) Ötlet: 1. tul. (reg.) 2. tul. (3-típ.) 3. tul. (véges aut. felism.) 1. tul. (reg.) Más megközelítés, B. I.: Véges automatával felismerhető és 3-típusú nyelvek ekvivalenciája (32 34); az előzőek és reguláris nyelvek ekvivalenciája (73 78) Állítás 1: Tetszőleges Ʃ ábécé feletti L reguláris nyelv generálható 3-típusú nyelvtannal Bizonyítás: Indukcióval dolgozunk, az L-et reprezentáló kifejezés struktúrája szerint. (Az egyszerűbb nyelvektől a bonyolultabbak felé.) (i) Legyen L = R, ahol R =. Ekkor L = generálható a G = ({S}, Ʃ,, S) nyelvtannal, hiszen nincs S-ből levezethető terminális szó (nincs szabály, Ʃ-t nem is használjuk). Emellett G 3-típusú, mert szabályaira teljesülnek a 3-típusú nyelvtanokra vonatkozó feltételek (nincs átírási szabály) (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ú. 16

A reguláris nyelvek osztályának jellemzése Állítás 1 bizonyítás folyt. (Minden Ʃ feletti L reguláris nyelv generálható ) (iii/a) Unió 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 reguláris nyelvek Ʃ felett. Mivel R 1 és R 2 részkifejezései R-nek, az indukciós feltevés szerint 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. Feltehetjük, hogy N 1 N 2 = (szükséges, hogy a levezetések különválaszthatók legyenek G 1 -ben és G 2 -ben). (Ha ez alapból nem teljesül: nemterminális átnevezéssel ekvivalens nyelvtan) Ekkor L is generálható 3-típusú nyelvtannal, ugyanis legyen G = (N 1 N 2 {S}, Ʃ, P 1 P 2 {S S 1, S S 2 }, S), ahol S egy új nemterminális szimbólum. A konstrukció miatt teljesül, hogy G is 3-típusú, és L(G) = L 1 L 2. Megjegyzések S szerepe: a két fa egyesítése egy új gyökércsúcsba. Az új G nyelvtanban az S-re két szabály alkalmazható, vagy G 1 vagy G 2 kezdőszimbólumát vezetjük be, ezután viszont a nemterm. halmazok diszjunktsága miatt csak a választott nyelvtan szabályai lesznek alkalmazhatók. Rekurzív felépítés: először egy darab egyszerű összegre, aztán fokozatosan bővítjük. 17

A reguláris nyelvek osztályának jellemzése Állítás 1 bizonyítás folyt. (Minden Ʃ feletti L reguláris nyelv generálható ) (iii/b) Konkatenáció 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 reguláris nyelvek Ʃ felett. Mint (iii/a)-ban, most is feltehető, hogy L 1 és L 2 generálhatók a G 1 és G 2 3-típusú nyelvtanokkal. Azt is feltehetjük most is, hogy N 1 N 2 = (így a levezetések különválaszthatók G 1 -ben és G 2 -ben, átnevezés ). 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, (a folytatás lehetősége miatt) P 2 minden eleme P-nek is eleme. Azaz: P = P 2 {A xb A xb P 1, B N 1 } {A xs 2 A x P 1, x T*} Most is teljesül, hogy G is 3-típusú, és L(G) = L 1 L 2. Megjegyzések S 1 -ből indulunk, S 2 -nél tudjuk becsatlakoztatni a 2. fát. Amikor az első nyelvtanban befejeződne egy levezetés, az új nyelvtanban az első nyelvbeli levezetett szó után megjelenik a 2. nyelvtan kezdőszimbóluma a szóban. Rekurzív felépítés: itt is először egy darab egyszerű szorzatra, aztán fokozatosan bővítjük. 18

A reguláris nyelvek osztályának jellemzése Állítás 1 bizonyítás folyt. (Minden Ʃ feletti L reguláris nyelv generálható ) (iii/c) Kleene-iteráció 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ós feltevés szerint L 1 generálható egy G 1 = (N 1, Ʃ, P 1, S 1 ) 3-típusú nyelvtannal. Legyen G = (N 1 {S}, Ʃ, P, S) az a nyelvtan, amelyben S egy új nemterminális szimbólum, P pedig a legszűkebb olyan szabályrdsz-halmaz, amire teljesülnek a köv. feltételek: S S 1, S λ P, (kiszállás leh.) Ha A xb P 1, akkor A xb P, Ha A x P 1, akkor A xs P (itt is a folytatás ismétlődő lehetősége miatt). Azaz: P = {A xb A xb P 1, B N 1 } {A xs A x P 1, x T*} {S S 1, S λ}. A konstrukció miatt teljesül, hogy G is 3-típusú, és következik, hogy L(G) = L 1 *. (Utóbbira: L(G)-ben nincs olyan szó, ami L 1 *-ban ne lenne benne, és fordítva.) Változat: A szabályhalmazra más ekvivalens konstrukció is megadható (D. P. 117.) Mint fent, S S 1, S λ P, és az A xb P 1 szabályokat is változatlanul felvesszük P-be. Az A x P 1 szabályokat felvesszük P-be, plusz ezekhez hozzávesszük az A xs alakú szabályokat is. (Ez redundanciát hoz a rendszerbe, mert A xs, S λ-ból úgyis kijönnek az A x szabályok, de így az átláthatóság nőhet és a levezetések rövidülhetnek.) Azaz: P = {A xb A xb P 1 } {A xs és A x A x P 1 } {S S 1, S λ}. Megjegyzések Mint eddig, itt is rekurzív felépítést alkalmazunk. (Az A xs alakú szabályok helyett A xs 1 alakúak is felvehetők, ha az A x P 1 szabályokat átvesszük. Ez is ekvivalens nyelvtant ad, de ezzel az esettel külön nem foglalkozunk.) 19

Formális nyelvek Ekvivalens reguláris nyelvtan megadása reguláris kifejezéshez A bizonyításban szereplő konstrukciók, ill. az alapnyelveket generáló egyszerű reguláris nyelvtanok segítségével tetsz. reguláris kifejezéshez le is gyárthatjuk azt a 3-típusú nyelvtant, amely a kifejezéssel leírt szavakat generálja Gyakorlás: Egyszerű példák az unió és konkatenáció alkalmazására Feladat: Adjuk meg az L = a*b b*a reguláris kifejezéssel megadott nyelvet generáló 3-típusú nyelvtant! Először vezessünk be a terminális betűkhöz olyan 3-típusú nyelvtant, amely kizárólag az adott terminálist generálja: G a = ({A}, {a, b}, {A a}, A), G b = ({B}, {a, b}, {B b}, B) A kifejezésben belülről kifelé haladva építjük fel a nyelvtant a következők szerint. 1. Adott G = (N, T, H, S 1 ) nyelvtan esetén az L(G)* nyelvet generáló nyelvtant megkaphatjuk, ha bevezetjük az S új mondatszimbólumot és az S λ, S S 1 szabályokat, valamint az összes A p alakú szabály helyett (vagy esetleg: mellé) itt p T* felvesszük az új A ps alakú szabályt. (A többi szabály változatlan.) Nálunk most: G a* = ({A, S}, {a, b}, {A as, S λ, S A}, S), G b* = ({B, S}, {a, b}, {B bs, S λ, S B}, S). 2. Adott G 1 = (N 1, T, H 1, S 1 ) és G 2 = (N 2, T, H 2, S 2 ) nyelvtanok esetén (itt N 1 N 2 = ) az L(G) = L(G 1 )L(G 2 ) konkatenált nyelvet generáló nyelvtan előállításához az összes H 1 -beli A p alakú szabályt (itt p T*) az A ps 2 alakú szabályra cseréljük. Az így kapott szabályhalmazt jelöljük H 1 '-vel. Ezek után G = (N 1 N 2, T, H 1 ' H 2, S 1 ). Nálunk most (csak 1-1 szabály változik): G a*b = ({A, S, B}, {a, b}, {A as, S B, S A, B b}, S), G b*a = ({B, S, A}, {b, a}, {B bs, S A, S B, A a}, S). 20

Ekvivalens reguláris nyelvtan megadása reguláris kifejezéshez Feladat (folyt., ekvivalens 3-típusú nyelvtan megadása reg. kifejezéshez, L = a*b b*a) (Eddig: G a = ({A}, {a, b}, {A a}, A), G b = ({B}, {a, b}, {B b}, B), G a* = ({A, S}, {a, b}, {A as, S λ, S A}, S), G b* = ({B, S}, {a, b}, {B bs, S λ, S B}, S), G a*b = ({A, S, B}, {a, b}, {A as, S B, S A, B b}, S), G b*a = ({B, S, A}, {b, a}, {B bs, S A, S B, A a}, S).) 3. Adott G 1 = (N 1, T, H 1, S 1 ) és G 2 = (N 2, T, H 2, S 2 ) nyelvtanok esetén (itt N 1 N 2 = ) az L(G) = L(G 1 ) L(G 2 ) nyelvet generáló nyelvtan előállításához a G = (N 1 N 2 {S 3 }, T, H 1 H 2 {S 3 S 1, S 3 S 2 }, S 3 ) nyelvtan megfelelő lesz, ahol S 3 nem eleme az N 1, N 2, T halmazok egyikének sem. Nálunk most a fent megadott G a*b és G b*a nyelvtanok esetén nem teljesül az a feltétel, hogy a nemterminálisok halmazai diszjunktak, ezért az egyik nyelvtanban át kell jelölni a nemterminálisokat. Például legyen G' a*b = ({C, S 2, D}, {a, b}, {C as 2, S 2 D, S 2 C, D b}, S 2 ). A nemterm.ok átjelölése nem befolyásolja a generált nyelvet, azaz L(G' a*b ) = L(G a*b ) Így végül: G a*b b*a = ({C, S 2, D, B, S, A, S 3 }, {a, b}, {C as 2, S 2 D, S 2 C, D b, B bs, S A, S B, A a, S 3 S 2, S 3 S}, S 3 ). 21

Ekvivalens reguláris nyelvtan megadása reguláris kifejezéshez Feladat (folyt., ekvivalens 3-típusú nyelvtan megadása reg. kifejezéshez, L = a*b b*a) Ha a Kleene-iterációnál a redundáns megközelítést alkalmazzuk (lásd: bizonyítás (iii/c) rész, változat), akkor a következő ekvivalens nyelvtanokat kapjuk: G a = ({A}, {a, b}, {A a}, A), G b = ({B}, {a, b}, {B b}, B), G a * = ({A, S}, {a, b}, {A a, A as, S λ, S A}, S), G b * = ({B, S}, {a, b}, {B b, B bs, S λ, S B}, S), G a*b = ({A, S, B}, {a, b}, {A ab, A as, S B, S A, B b}, S), G b*a = ({B, S, A}, {b, a}, {B ba, B bs, S A, S B, A a}, S). Átjelölés: G' a*b = ({C, S 2, D}, {a, b}, {C ad, C as 2, S 2 D, S 2 C, D b}, S 2 ) És végül: G a*b b*a = ({C, S 2, D, B, S, A, S 3 }, {a, b}, {C ad, C as 2, S 2 D, S 2 C, D b, B ba, B bs, S A, S B, A a, S 3 S 2, S 3 S}, S 3 ). Néhány levezetés a generált nyelvtanokkal: S 3 S 2 D b, S 3 S A a, S 3 S 2 C as 2 ac aas 2 aad aab, S 3 S 2 C as 2 ac aad aab, S 3 S B bs bb bbs bba bba. Megjegyzés A Kleene-iterációs részben említett harmadik változat szerinti megoldást nem tárgyaljuk (régi S használata; további 1-1 szabály változik G a *-tól kezdve), ez fakultatív módon megtekinthető D. P. 118. oldalán 22

Ekvivalens reguláris nyelvtan megadása reguláris kifejezéshez Feladat: Adjuk meg az L = (a b)* reguláris kifejezéssel megadott nyelvet generáló 3-típusú nyelvtant! A fenti módon: G a = ({A}, {a, b}, {A a}, A), G b = ({B}, {a, b}, {B b}, B), G a b = ({A, B, S}, {a, b}, {A a, B b, S A, S B}, S). (Eml.: Az L(G)* nyelvet generáló nyelvtanhoz kell egy új S 1 kezdőszimb., felvesszük S 1 λ, S 1 S-t, és minden A p helyett (esetleg: mellé) A ps 1 -et.) G (a b)* = ({A, B, S, S 1 }, {a, b}, {A as 1, B bs 1, S A, S B, S 1 λ, S 1 S}, S 1 ) A redundáns alak: G (a b)* = ({A, B, S, S 1 }, {a, b}, {A a, A as 1, B b, B bs 1, S A, S B, S 1 λ, S 1 S}, S 1 ). Néhány levezetés: S 1 λ, S 1 S A as 1 a S 1 S A a, S 1 S B bs 1 b S 1 S B b, S 1 S A as 1 as aa aas 1 aa, S 1 S A as 1 as aa aa, S 1 S B bs 1 bs ba bas 1 ba. S 1 S B bs 1 bs ba ba. 23

Ekvivalens reguláris nyelvtan megadása reguláris kifejezéshez Feladat: Adjuk meg az L = ab*c reguláris kifejezéssel megadott nyelvet generáló 3-típusú nyelvtant! Megoldás: G a = ({A}, {a, b, c}, {A a}, A), G b = ({B}, {a, b, c}, {B b}, B), G c = ({C}, {a, b, c}, {C c}, C), G b* = ({B, S}, {a, b, c}, {B b, B bs, S λ, S B}, S), G ab* = ({A, B, S}, {a, b, c}, {A as, B b, B bs, S λ, S B}, A), G ab*c = ({A, B, S, C}, {a, b, c}, {A as, B bc, B bs, S C, S B, C c}, A). Néhány levezetés: A as ac ac, A as ab abs abc abc, A as ab abc abc, A as ab abs abb abbs abbc abbc. Feladat: Adjuk meg az L = a* b* c* reguláris kifejezéssel megadott nyelvet generáló 3-típusú nyelvtant! Feladat: Adjuk meg az L = (ab*)* reguláris kifejezéssel megadott nyelvet generáló 3-típusú nyelvtant! Külön köszönet: Pukler A. kollégámnak és a hiv. jegyzetek szerzőinek 24