320 likes | 481 Views
REGULÁ RNE JAZYKY. Špecifikácia. Generatívne - Regulárnymi gramatikami Akceptačne - Kon e čnými automatmi. Kone č n ý automat df. Konečným automatom (KA) M budeme nazývať päticu M = (Q, T, , q 0 , F ) Kde Q je konečná množina (vnútorných) stavov automatu M
E N D
Špecifikácia • Generatívne - Regulárnymi gramatikami • Akceptačne - Konečnými automatmi
Konečný automat df Konečným automatom (KA) M budeme nazývať päticu M = (Q, T, , q0, F) Kde Q je konečná množina (vnútorných) stavov automatu M T konečná množina (prípustných) vstupných symbolov q0 je začiatočný stav automatu, q0 Q F je množina koncových stavov, F Q je prechodové zobrazenie, pričom : Q x T Q – pre deterministický KA : Q x T 2Q – pre nedeterministický KA Poznámka: 2Q je potenčná množina (množina všetkých podmnožín)
Konfigurácia automatu df Nech M = (Q, T, , q0, F) je KA. Potom dvojicu (q, w) Q x T* nazývame konfiguráciou KA M. Začiatočná konfigurácia: (q0 , w), kde w je vstupný reťazec Koncová konfigurácia: (qf , e) kde qf F je koncový stav.
Relácia prechodu df Nech M = (Q, T, , q0, F) je KA. Potom nad množinou konfigurácií Q x T* definujeme reláciu prechodu nasledujúcim spôsobom: Ak q Q , p Q, w T* , a T Potom ( q , aw) (p, w) práve vtedy ak (q, a) = p - pre deterministický KA (DKA) (q, a) obsahuje p - pre nedetrministický KA Analogický ako pre deriváciu možno definovať stupeň a uzávery relácie prechodu n , * , +
Akceptácia reťazca, špecifikácia jazyka konečným automatom Nech M = (Q, T, , q0, F) je KA. Potom hovoríme, že KA M akceptuje / prijíma reťazec w T* , ak platí (q0 , w) * (qf , e) pre nejaké q F Jazyk L(M) špecifikovaný automatom M je množina reťazcov, ktoré KA M akceptuje. Formálne L(M) = {w / (q0 , w) * (qf , e), w T*, qf F }
Príklad Daný je KA M = ({q0, q1 , q2 , q3}, {0, 1 }, , q0, {q0 }) : (q0 , 0) = q2 (q0 , 1) = q1 (q1 , 0) = q3 (q1 , 1) = q0 (q2 , 0) = q0 (q2 , 1) = q3 (q3 , 0) = q1 (q3 , 1) = q2 Potom prijatie reťazca 10101010 sa uskutočňuje nasledujúcim spôsobom:
(q0 , 0) = q2 (q0 , 1) = q1(q1 , 0) = q3 (q1 , 1) = q0(q2 , 0) = q0 (q2 , 1) = q3(q3 , 0) = q1 (q3 , 1) = q2 (q0 , 10101010) (q1 , 0101010) (q3 , 101010) (q2 , 01010) (q0 , 1010) (q1 , 010) (q3 , 10) (q2 , 0) (q0 , e)
Zastavenie v nekoncovej konfigurácii Automat sa môže dostať do stavu, že z danej konfigurácie nie je definovaný prechod. Hovoríme, že automat zastavil neštandardným spôsobom. Dôsledok: analyzovaný reťazec nie je akceptovaný a teda nepatrí do daného jazyka
Príklad Skúsme predložiť automatu z predchádzajúceho príkladu vstupné reťazce 101010 a 1012 Akceptácia prvého reťazca je nasledujúca:
(q0 , 0) = q2 (q0 , 1) = q1(q1 , 0) = q3 (q1 , 1) = q0(q2 , 0) = q0 (q2 , 1) = q3(q3 , 0) = q1 (q3 , 1) = q2 (q0 , 101010) (q1 , 01010) (q3 , 1010) (q2 , 010) (q0 , 10) (q1 , 0) (q3 , e) Vstup je prázdny, ale pre danú konfiguráciu, ktorá nie je koncová, neexistuje prechod, preto reťazec 101010 nepatrí do jazyka L(M).
(q0 , 0) = q2 (q0 , 1) = q1(q1 , 0) = q3 (q1 , 1) = q0(q2 , 0) = q0 (q2 , 1) = q3(q3 , 0) = q1 (q3 , 1) = q2 Druhý reťazec už na prvý pohľad nepatrí do jazyka L(M), pretože nie je z T* (obsahuje symbol 2). Priebeh akceptácie: (q0 , 1012) (q1 , 012) (q3 , 12) (q2 , 2)Ďalší prechod nie je definovaný.
Reprezentácia prechodového zobrazenia Na reprezentácie prechodového zobrazenia používame najčastejšie Prechodovú tabuľku, Stavový diagram.
Prechodová tabuľka Prechodová tabuľka P pre prechodové zobrazenie , množinu stavov Q Q = {q0 ,q1 , … , qn}, množinu vstupných symbolov T T = {t0 , t1 , … , tm}, je tabuľka s n riadkami a m stľpcam a prvky zodpovedajú prechodovému zobrazeniu , teda P[i, j] = (qi, tj ) Poznámka: v prípade nedeterministického KA sú prvkami tabuľky množiny
Stavový diagram Stavový diagram je orientovaný graf, v ktorom vrcholy sú ohodnotené stavmi automatu, hrany symbolmi vstupnej abecedy tak, že ak (q, t) = p Potom existuje orientovaná hrana medzi q a p, ktorá je ohodnotená symbolom t. Začiatočný a koncový stav / vrchol je označený špeciálnym spôsobom – začiatočný zvyčajne ako ŠTART, koncový dvojitým krúžkom. Činnosť – akceptácia – prechádzanie diagramom po orientovaných hranách na základe prechodového zobrazenia.
Príklad - tabuľka Majme znova automat z predchádzajúceho príkladu. Potom reprezentácia prechodovou tabuľkou je nasledujúca: Pôvodné zobrazenie: (q0 , 0) = q2 (q0 , 1) = q1(q1 , 0) = q3 (q1 , 1) = q0(q2 , 0) = q0 (q2 , 1) = q3(q3 , 0) = q1 (q3 , 1) = q2
Príklad – diagram Majme znova automat z predchádzajúceho príkladu. Potom reprezentácia stavovým diagramom je nasledujúca:
(q0 , 0) = q2 (q0 , 1) = q1(q1 , 0) = q3 (q1 , 1) = q0(q2 , 0) = q0 (q2 , 1) = q3(q3 , 0) = q1 (q3 , 1) = q2 Stavový diagram 1 q1 q0 1 0 0 0 0 1 q2 q3 1
Príklad NDKA Daný je KA M M = ( {q0 ,q1 ,qf}, {+, -, 0, 1, 2, 3, 4, 5, 6, 7, 8 , 9}, , {qf} ) :
Stavový diagram ŠTART qf 0 | 1 | … | 9 0 | 1 | … | 9 0 | 1 | … | 9 0 | 1 | … | 9 q1 q0 + | -
Poznámky Predchádzajúci KA • je nedeterministický • Rozpoznáva celé čísla so znamienkom a nevýznamnými nulami zľava
Vzťah DKA a NDKA Ak L je množina slov akceptovaná nejakým NDKA, potom existuje DKA, ktorý akceptuje práve množinu L.
Vlastnosti KA Množina slov prijatých KA s n stavmi je: • Neprázdna vtedy a len vtedy, ak KA prijme slovo dĺžky menšej ako n, • Nekonečná vtedy a len vtedy, ak KA prijme slovo dĺžky d, pre ktoré platí n d 2n Nech L je regulárny jazyk. Potom existuje taká konštanta p, že pre w L a |w| p možno w písať v tvare w = w1w2w3, kde 1 |w2| p a w1w2iw3 L pre všetky i 0.
Vzťah KA a RG Nech G = (N, T, P, S) je RG. Potom existuje KA M = (Q, T, , q0, F) taký, že L(M) = L(G) Konštrukcia: Q = N {A}, pričom A N T = T q0 = S F = {S, A} ak S e P ; inak F = { A } : pre všetky a T, B N, C N platí: ak B a P tak A (B, a) ak B aC P tak C (B, a) (A, a) = ø Poznámka: uvedená vlastnosť platí aj obrátene.
Príklad Majme RG G = ({C, D}, {+, -, 0, 1, … , 9}, P, C) kde P: C | +D |-D | 0 | 1 | … | 9 | 0D | … | 9D D 0 | 1 | … | 9 | 0D | … | 9D Skonštruujeme teraz ekvivalentný KA M = (Q, T, , q0, F) , taký, že L(M) = L(G) Q = N {A} = {A, C, D} T zostáva z G q0 = C F = { A }
C | +D |-D | 0 | 1 | … | 9 | 0D | … | 9DD 0 | 1 | … | 9 | 0D | … | 9D : ( D, x ) = { A } kde x = 0 | 1 | … | 9 - prvá časť pravidla ( D, x ) = { D } kde x = 0 | 1 | … | 9 - druhá časť pravidla Teda ( D, x ) = { A, D } ( C, x ) = { D }kde x = + | - | 0 | 1 | … | 9 ( C, x ) = { A }kde x = 0 | 1 | … | 9 Teda ( C, x ) = { A, D }
Stavový diagram : ( C, x ) = { D }kde x = + | - | 0 | 1 | … | 9 ( C, x ) = { A }kde x = 0 | 1 | … | 9 ( D, x ) = { A } kde x = 0 | 1 | … | 9 ( D, x ) = { D } kde x = 0 | 1 | … | 9 0 | 1 | … | 9 ŠTART 0 | 1 | … | 9 + | - | 0 | 1 | … | 9 D A C 0 | 1 | … | 9
Regulárne množiny a regulárne výrazy • Regulárne množiny a regulárne výrazy sú ďalším špecifikačným prostriedkom regulárnych jazykov
Regulárne množiny • Nech T je konečná abeceda. Potom regulárnou množinou (RM) nad T rozumieme množinu definovanú nasledujúcim spôsobom: • 1. Ø je RM nad T • 2. { e } kde e je prázdny reťazec, je RM nad T • 3. { t } kde t T je RM nad T • 4. Ak A, B sú RM nad T, potom RM nad sú aj množiny • A B • AB • A* • 5. RM nad T sú iba množiny definované podľa krokov 1– 4.
Regulárne výrazy • Regulárne výrazy (RV) používame naoznačenie regulárnych množín a sú definované takto: • 1. Ø je RV a označuje RM Ø • 2. e je RV a označuje RM { e } • 3. t T je RV a označuje RM { t } • 4. Ak a, b sú RV označujúce RM A, B , potom • (a + b) je RV a označuje RM A B • (ab) je RV a označuje RM AB • (a)* je RV a označuje RM A* • 5. RV je iba výraz vytvorený podľa krokov 1.– 4.