Automaty ze stosem - matrix.umcs.lublin.pl
Transkrypt
Automaty ze stosem - matrix.umcs.lublin.pl
Gramatyki Automaty ze stosem Adam Kobus Updated: 19 maja 2016 gram2 Automaty ze stosem Automaty ze stosem Automaty ze stosem to niedeterministyczne automaty skończone z ε-przejściami oraz dodatkowym stosem. Automaty stosowe są ściśle związane z gramatykami bezkontekstowymi, gdyż rozpoznają one języki, generowane przez te gramatyki. Automaty ze stosem Jest to system AS = (Q, Σ, Γ, δ, q0 , Z0 , F ), gdzie: Q zbiór stanów, Σ alfabet wejściowy, Γ alfabet stosowy, δ funkcja przejścia, δ ⊂ Q × (Σ ∪ {ε}) × Γ, q0 stan początkowy, Z0 specjalny symbol początkowy stosu, Z0 ∈ Γ, Z0 6∈ Σ, F zbiór stanów końcowych, QF . Przykład Automat ze stosem rozpoznający palindromy o parzystej długości. Gramatyka: G = ({S}, {0, 1}, P, S), gdzie P : S → ε|0P0|1P1. Kroki: # zaczynamy od q0 , stanu oznaczającego, że nie dotarliśmy jeszcze do środka łańcucha. W stanie q0 czytane są kolejne symbole i odkładane na stos. # przy każdym kroku sprawdzamy, czy możliwe jest, że mijamy właśnie środek palindromu. Porównujemy wtedy symbol wczytany z symbolem na stosie i jeśli jest taki sam, przechodzimy niedeterministycznie w dwa stany - q0 i q1 . Jeśli symbole w pewnym momencie przestaną pasować, porzucamy gałąź stanu q1 . Przykład, c.d. # jeśli po przeczytaniu całego wyrazu stos jest pusty, to istotnie widziano słowo ω, a po nim ω R . Formalny opis automatu: As = ({q0 , q1 , q2 }, {0, 1}, {0, 1, Z0 }, δ, q0 , Z0 , {q2 }). Funkcja przejścia: # δ(q0 , 0, Z0 ) = {(q0 , 0Z0 )}, δ(q0 , 1, Z0 ) = {(q0 , 1Z0 )}, # δ(q0 , 0, 0) = {(q0 , 00)}, δ(q0 , 1, 0) = {(q0 , 10)}, δ(q0 , 0, 1) = {(q0 , 01)}, δ(q0 , 1, 1) = {(q0 , 11)} - odkładanie kolejnych symboli na stosie Przykład, c.d. # δ(q0 , ε, Z0 ) = {(q1 , Z0 )}, δ(q0 , ε, 0) = {(q1 , 0)}, δ(q0 , ε, 1) = {(q1 , 1)} - spontaniczne przejście do stanu q1 środek słowa, # δ(q1 , 0, 0) = {(q1 , ε)}, δ(q1 , 1, 1) = {(q1 , ε)} - porównywanie symbolu wczytanego ze szczytem stosu i ściąganie symbolu ze stosu, # δ(q1 , ε, Z0 ) = {(q2 , Z0 )} - zakończenie z pustym słowem i pustym stosem, czyli wczytanie parzystego palindromu. Konwersja G → As Konwersja gramatyki do automatu skończonego Zamiana jest prosta, jeśli uzyskany automat będzie akceptował przez pusty stos, a sama gramatyka będzie w postaci lewostronnej (np. S → Sa). Gramatyce G = (V , T , Q, S) odpowiada automat S ze stosem As = ({q}, T , V T , δ, q, S), którego funkcja przejścia: 1. ∀A δ(q, ε, A) = {(q, β)|A → β jest produkcją G }, 2. dla każdego symbolu końcowego a, ∀a δ(q, a, a) = {(q, ε)} Przykład konwersji Dla gramatyki: G = ({I , E }, {a, b, 0, 1, (, ), +, ∗}, {I → a|b|Ia|Ib|I 0|I 1, E → I |E ∗ E |E + E |(E )}, E ). Do alfabetu stosu, prócz symboli alfabetu języka, należą także zmienne I i E . 1. δ(q, ε, I ) = {(q, a), (q, b), (q, Ia), (q, Ib), (q, I 0), (q, I 1)} - jeśli jest I na stosie, to można zamienić go na dowolną z konfiguracji 2. δ(q, ε, E ) = {(q, I ), (q, E + E ), (q, E ∗ E ), (q, (E ))} - j.w. 3. δ(q, a, a) = {(q, ε)}, δ(q, b, b) = {(q, ε)}, δ(q, 0, 0) = {(q, ε)}, δ(q, 1, 1) = {(q, ε)}, δ(q, (, () = {(q, ε)}, δ(q, ), )) = {(q, ε)}, δ(q, +, +) = {(q, ε)}, δ(q, ∗, ∗) = {(q, ε)} - zasady dla symboli języka Zadania Zadanie 1 Przekształć gramatyki na odpowiednie automaty ze stosem: 1. G = ({S, A}, {0, 1}, {S → 0S1|A, A → 1A0|S|ε}, S) 2. G = ({S, A}, {a, b}, {S → aAA, A → aS|bS|a}, S) Zadanie 2 Zbuduj automat ze stosem akceptujący następujące języki: # {an b 2n |n 0} # {an b n+m am |n 0, m 0} # {an b n+2 |n 0} # {an b m c k |k, m, n > 0, k n + m} # {a3n+1 b 5n+1 |n 0} # {a3n+2 b 7n+2 |n 0}