Języki, automaty i obliczenia/Ćwiczenia 11: Automat ze stosem
Ćwiczenia 11
Ćwiczenie 1
Określ automaty ze stosem akceptujące następujące języki. Ustal, czy akceptacja jest przez pusty stos, czy przez stany końcowe. Czy języki są deterministyczne?
- Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle L_1=\{a^{n}b^{n+m}a^{m}:\: m,n\geqslant 1\}, }
- Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle L_3=\{a^{n}b^m:\: 1\leqslant n\leqslant m\}, }
Wszystkie rozważane automaty będą określone grafem, niemniej dla większej czytelności podamy również alfabet stosu.
gdzie , a jest symbolem początkowym stosu.
Zauważ, że automat ten akceptuje język zarówno przez stany końcowe jak i przez pusty stos.
Automat jest deterministyczny, a to oznacza, że język jest też deterministyczny.
gdzie , a jest symbolem początkowym stosu i akceptuje język przez pusty stos.
Automat jest niedeterministyczny i język też jest niedeterministyczny. Nie wiadomo od której litery czytanego
słowa automat powinien wymazywać stos. Dlatego równolegle z wpisywaniem na stos automat zaczyna wymazywać
za każdym razem, gdy wystąpią dwie takie same litery obok siebie. Porównaj otrzymany automat z automatami otrzymanymi dla języków i
z ćwiczenia 1.
gdzie , a jest symbolem początkowym stosu. Automat ten akceptuje język przez stany końcowe i jest automatem deterministycznym.
gdzie , a jest symbolem początkowym stosu. Automat akceptuje język przez stany końcowe i jest automatem niedeterministycznym. Uzasadnij ten fakt. Czy język jest językiem niedeterministycznym?
Ćwiczenie 2
Napisz na podstawie dowodu twierdzenia 2.2
- algorytm konstrukcji automatu ze stosem rozpoznającego język generowany przez daną gramatykę bezkontekstową w postaci normalnej Greibach,
- algorytm konstrukcji gramatyki bezkontekstowej generującej język rozpoznawany przez pusty stos przez dany automat ze stosem.
Ćwiczenie 3
Wykorzystując algorytmy z poprzedniego zadania, określ:
- automat akceptujący język generowany przez gramatykę o zbiorze praw
, - gramatykę generującą język akceptowany przez pusty stos przez automat zadany rysunkiem:
<flash>file=ja-lekcja11-c-rys5.swf|width=250|height=150</flash>
<div.thumbcaption>Rysunek 5gdzie , a jest symbolem początkowym stosu.
gdzie , a jest symbolem początkowym stosu.
Dla przykładu prześledźmy akceptację przez ten automat słowa .
Punkt 2.
Gramatykę zdefiniujemy przez podanie zbioru praw, wskazując równocześnie, z jakiego przejścia w automacie
dane prawo powstało:
Zauważmy, że w obu konstrukcjach otrzymujemy gramatykę i automat różne od wyjściowych.
Ćwiczenie 4
Udowodnij, że każdy automat ze stosem, w którym wielkość stosu jest ograniczona pewną stałą,
jest równoważny pewnemu automatowi skończenie stanowemu.
Ćwiczenie 5
Oto nieformalny opis automatu z kolejką:
Automat z kolejką jest podobny do automatu ze stosem, ale zamiast stosu (LIFO - last in, first out) posiada kolejkę FIFO (first in, first out). W każdym kroku automat czyta symbol z taśmy (może to być słowo puste), usuwa z kolejki początkowy symbol (być może słowo puste) oraz wstawia na koniec kolejki słowo (być może słowo puste). Automat z kolejką akceptuje słowo przy stanie końcowym lub przy pustej kolejce.
- Podaj formalną definicję automatu z kolejką.
- Zdefiniuj dwa sposoby akceptacji słowa przez automat: przez stan końcowy oraz przez pustą kolejkę.
Ćwiczenie 6
Czy moc obliczeniowa automatu z kolejką jest taka sama jak moc automatu ze stosem?
Ćwiczenie 7
Określ automaty ze stosem akceptujące następujące języki przez pusty stos i przez stany końcowe. Wskaż, które języki są deterministyczne:
- Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle L_7=\{a^{n}b^m \in \{a,b\}^*:\: 1\leqslant m\leqslant n\}, }
- Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle L_8=\{a^{n}b^{m} \in \{a,b\}^*:\: m \neq n\}. }
Ćwiczenie 8
Określ automat ze stosem, który rozpoznaje język Łukasiewicza zapisany w wersji postfiksowej (patrz wykład 11, uwagi o języku Łukasiewicza po dowodzie twierdzenia 2.1)