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}