• Nie Znaleziono Wyników

Maszyna Mealy’ego, Moore’a, Turinga

N/A
N/A
Protected

Academic year: 2021

Share "Maszyna Mealy’ego, Moore’a, Turinga"

Copied!
21
0
0

Pełen tekst

(1)

Maszyna Mealy’ego, Moore’a, Turinga

Marcin Orchel

1 Wstęp

1.1 Maszyna Mealy’ego Maszyna Mealy’ego składa się z

1. skończonej liczby stanów Q,

2. skończonego alfabetu wejściowego Σ, 3. skończonego alfabetu wyjściowego Γ, 4. δ funkcji tranzycji

δ : Q × Σ → Q (1)

5. ω funkcji wyjściowej

ω : Q × Σ → Γ (2)

6. q0 - stanu startowego, q0∈ Q.

Różnice między maszyną Mealy’ego a automatem skończonym

• nie ma stanów końcowych

• tranzycje produkują wyjście za pomocą funkcji wyjściowej

• nie akceptuje ani nie odrzuca słowa wejściowego, zamiast tego generuje słowo wyj- ściowe

• nie może mieć stanów niedeterministycznych

Przykład 1. Przykład maszyny Mealy’ego zamieniającej w słowie binarnym jedynki na zera i odwrotnie Rys. 1.

Przykładowo dla wejścia 0110 zostanie wyprodukowane wyjście 1001.

(2)

q0 1; 0 0; 1

Rysunek 1: Przykładowa maszyna Mealy’ego.

1.2 Maszyna Moore’a Maszyna Moore’a składa się z

1. skończonej liczby stanów Q,

2. skończonego alfabetu wejściowego Σ, 3. skończonego alfabetu wyjściowego Γ, 4. δ funkcji tranzycji

δ : Q × Σ → Q (3)

5. ω funkcji wyjściowej

ω : Q → Γ (4)

6. q0 - stanu startowego, q0∈ Q.

Różnice między maszyną Mealy’ego i Moore’a. W maszynie Moore’a funkcja wyjściowa zdefiniowana jest dla stanów a nie dla tranzycji. Różnice między maszyną Moore’a a automatem skończonym

• nie ma stanów końcowych

• stany produkują wyjście za pomocą funkcji wyjściowej

• nie akceptuje ani nie odrzuca słowa wejściowego, zamiast tego generuje słowo wyj- ściowe

• nie może mieć stanów niedeterministycznych

Przykład 2. Przykład maszyny Moore’a zamieniającej w słowie binarnym jedynki na zera i odwrotnie Rys. 2. Przykładowo dla wejścia 0110 zostanie wyprodukowane wyjście 1001. W tym celu przechodzimy od stanu q0 do stanu q2, następnie do stanu q1, jeszcze raz do stanu q1, i do stanu q2.

(3)

q0[ε]

start q2[1]

q1[0]

1 0

0

1 0

1

Rysunek 2: Przykładowa maszyna Moore’a.

1.3 Automat ze stosem

Niedeterministyczny automat ze stosem składa się z 1. skończonej liczby stanów Q,

2. skończonego alfabetu wejściowego Σ, 3. skończonego alfabetu stosowego Γ, 4. δ funkcja tranzycji

δ : Q × Σ × Γ∗ → skończone podzbiory Q × Γ∗ (5) 5. q0 - stan startowy, q0 ∈ Q,

6. Z - symbol startowy stosu,

7. F - zbiór stanów zawarty w Q, zwanych stanami akceptującymi.

Deterministyczny automat ze stosem różni się tylko tym, że dla danego stanu i symbolu wejściowego istnieje co najwyżej jedna tranzycja oraz wejście nie może być puste. W sta- nie akceptującym aby zaakceptować dane słowo musi być spełniony dodatkowy warunek, aby stos był pusty lub na stosie znajdował się tylko symbol startowy stosu Z.

Przykład 3. Skonstruujemy deterministyczny automat ze stosem dla języka

L = {anbn: n > 0} (6)

(4)

q0

start a, Z; aZ q1 b, a; ε q2 q3

a, a; aa

ε, Z; Z b, a; ε

Rysunek 3: Przykładowy automat ze stosem.

Automat będzie kładł na stos symbol a dla każdego a na wejściu i będzie pobierał ze stosu a dla każdego b na wejściu. Tym sposobem po przeczytaniu słowa tego języka stos będzie zawierał tylko symbol startowy stosu Z Rys. 3. Każda tranzycja posiada 3 warto- ści. Pierwsza wartość to czytany symbol wejściowy. Druga wartość to słowo, które jest zdejmowane ze stosu. Trzecia wartość to słowo które kładziemy na stos. W stanie q0 na stosie znajduje się tylko symbol startowy stosu Z. Przejście do stanu q1 po przeczytaniu a oznacza zdjęcie ze stosu Z i położenie na stos aZ. Jest to w zasadzie w tym wypad- ku to samo co dołożenie na stos a, ale znajduje się tutaj dodatkowa informacja, że na górze stosu musi być Z. Przejście od stanu q1 do q1 po przeczytaniu a oznacza zdjęcie ze stosu a i położenie na stosie aa. Przejście od stanu q1 do stanu q2 po przeczytaniu b oznacza zdjęcie ze stosu a bez dokładania. Przejście ze stanu q2 do stanu q2 oznacza również zdjęcie ze stosu a bez dokładania. Przejście ze stanu q2 do stanu q3 następuje po zdjęciu ze stosu symbolu startowego Z i położeniu na stosie tego symbolu. Przejście to nie zmienia stosu, ale zapewnia, że wykonamy to przejście tylko wtedy, gdy na stosie na samej górze będzie znajdował się symbol startowy stosu Z. Gdy dla czytanego symbolu z wejścia oraz aktualnego stosu nie istnieje żadna tranzycja to słowo to nie należy do tego języka. Dla słowa aaabbb otrzymujemy następujące przejścia:

1. q0 → q1, stos: aZ 2. q1 → q1, stos: aaZ 3. q1 → q1, stos: aaaZ 4. q1 → q2, stos: aaZ 5. q2 → q2, stos: aZ 6. q2 → q2, stos: Z 7. q2 → q3, stos: Z

q3 jest stanem końcowym a więc dane słowo należy do tego języka.

Przykład 4. Inny przykład automatu ze stosem Rys. 4. Automat ten akceptuje tylko słowo aaa.

(5)

q0

start q1 q2 q3

a, Z; aZ a, a; ε a, Z; ε

Rysunek 4: Przykładowy automat ze stosem.

q0

start q1 q2

ε, Z; SZ ε, Z; ε

a, a; ε c, c; ε b, b; ε

Rysunek 5: Przykładowy automat ze stosem.

1.4 Konwersja gramatyki bezkontekstowej do niedeterministycznego automatu ze stosem za pomocą algorytmu LL

Mamy daną gramatykę bezkontekstową:

1. S → aABb 2. A → aAc 3. A → ε 4. B → bB 5. B → c

Przy parsowaniu LL używany jest stos co było pokazane na zajęciach omawiających algorytm LL. Parsowanie LL składa się z dwóch operacji: ściąganie ze stosu terminala, który odpowiada przeczytanemu terminalowi ze słowa wejściowego, oraz zastępowanie nieterminala, który znajduje się na wierzchołku stosu odpowiednią prawą stroną produk- cji. Na samym początku na stos kładziemy symbol startowy gramatyki S. Automat z umieszczaniem na stosie symbolu startowego gramatyki, operacją ściągania ze stosu ter- minali po przeczytaniu wejścia, oraz akceptacją słowa, gdy na stosie pozostanie symbol początkowy automatu Z wygląda jak na Rys.5. Pozostało dodać do automatu operację zastępowania nieteterminali Rys. 6.

1.5 Konwersja gramatyki bezkontekstowej do niedeterministycznego automatu ze stosem za pomocą algorytmu LR

Mamy daną gramatykę bezkontekstową 1. S → aABb

2. A → aAc

(6)

q0

start ε, Z; SZ q1 ε, Z; ε q2

ε, A; aAc ε, B; bB

ε, A; ε ε, B; c ε, S; aABb

a, a; ε c, c; ε b, b; ε

Rysunek 6: Przykładowy automat ze stosem.

q0

start q1 q2

ε, S; ε a, ε; a

c, ε; c b, ε; b

ε, Z; ε

Rysunek 7: Przykładowy automat ze stosem.

3. A → ε 4. B → bB 5. B → c

Przy parsowaniu LR również używany jest stos co było pokazane na zajęciach omawia- jących algorytm LR. Parsowanie LR składa się z dwóch operacji: umieszczanie terminala na stosie przeczytanego ze słowa wejściowego oraz redukcja na stosie. Na samym końcu otrzymujemy symbol startowy gramatyki S. Automat z operacją umieszczania terminala na stosie przeczytanego z wejścia, oraz z usuwaniem symbolu startowego gramatyki S na samym końcu wygląda jak na Rys.7.

Pozostało dodać do automatu operację redukcji Rys.8.

1.6 Konwersja niedeterministycznego automatu ze stosem do grama- tyki bezkontekstowej

Mamy dany automat ze stosem Rys.9.

Algorytm konwersji wymaga aby każda tranzycja zdejmowała dokładnie 1 symbol ze stosu i kładła 0 lub 2 symbole. Jeśli tak nie jest, należy przeprowadzić odpowiednie przekształcenie. Np. gdy mamy tranzycję kładącą na stos 1 symbol, musimy ją zastąpić

(7)

q0

start ε, S; ε q1 q2

ε, cAa; A ε, Bb; B

ε, ε; A ε, c; B ε, bBAa; S

a, ε; a c, ε; c b, ε; b

ε, Z; ε

Rysunek 8: Przykładowy automat ze stosem.

q0

start a, Z; aZ q1 b, a; ε q2 q3

a, a; aa

ε, Z; ε b, Z; ε

b, a; ε

Rysunek 9: Przykładowy automat ze stosem.

nowym stanem, dwoma tranzycjami i wprowadzić dodatkowy symbol terminalny. Na przykład Rys.10 zastępujemy Rys.11

Może być tylko jeden stan końcowy i każda tranzycja dochodząca do stanu końco- wego musi zdejmować ze stosu symbol Z. Każda tranzycja będzie zamieniona na listę produkcji. Na początku zamieńmy wszystkie tranzycje, które nie dokładają nic do stosu, a więc będą zdejmowały jeden symbol, są to 4 ostatnie tranzycje w naszym przykładzie:

Dla tranzycji b, a; ε otrzymujemy 1. (q2aq2) → b

Dla tranzycji b, Z; ε otrzymujemy 1. (q2Zq2) → b

Dla tranzycji ε, Z; ε otrzymujemy 1. q2Zq3 → ε

q0

start b, a; b q1

Rysunek 10: Przykładowy automat ze stosem.

(8)

q0

start q2 q1

b, a; xb ε, x; ε

Rysunek 11: Przykładowy automat ze stosem.

Dla tranzycji b, a; ε otrzymujemy 1. q1aq2 → b

Po lewej stronie mamy stan, symbol, który zdejmujemy ze stosu, stan do którego docho- dzimy. A po prawej stronie produkcji mamy symbol wejściowy. Następnie dla tranzycji, które dodają do stosu 1 symbol. Dla tranzycji typu δ(qi, a, A) = (qj, BC), dla każdego możliwego qk i ql tworzymy produkcje

(qiAqk) → a (qjBql) (qlCqk) (7) dla każdego qk i ql. Przed uproszczeniem otrzymujemy najpierw dla tranzycji a, a; aa

1. (q1aq0) → a(q1aq0)(q0aq0) 2. (q1aq0) → a(q1aq1)(q1aq0) 3. (q1aq0) → a(q1aq2)(q2aq0) 4. (q1aq0) → a(q1aq3)(q3aq0) 5. (q1aq1) → a(q1aq0)(q0aq1) 6. (q1aq1) → a(q1aq1)(q1aq1) 7. (q1aq1) → a(q1aq2)(q2aq1) 8. (q1aq1) → a(q1aq3)(q3aq1) 9. (q1aq2) → a(q1aq0)(q0aq2) 10. (q1aq2) → a(q1aq1)(q1aq2) 11. (q1aq2) → a(q1aq2)(q2aq2) 12. (q1aq2) → a(q1aq3)(q3aq2) 13. (q1aq3) → a(q1aq0)(q0aq3) 14. (q1aq3) → a(q1aq1)(q1aq3) 15. (q1aq3) → a(q1aq2)(q2aq3) 16. (q1aq3) → a(q1aq3)(q3aq3)

(9)

Dla tranzycji a, Z; aZ otrzymujemy 1. (q0Zq0) → a(q1aq0)(q0Zq0) 2. (q0Zq0) → a(q1aq1)(q1Zq0) 3. (q0Zq0) → a(q1aq2)(q2Zq0) 4. (q0Zq0) → a(q1aq3)(q3Zq0) 5. (q0Zq1) → a(q1aq0)(q0Zq1) 6. (q0Zq1) → a(q1aq1)(q1Zq1) 7. (q0Zq1) → a(q1aq2)(q2Zq1) 8. (q0Zq1) → a(q1aq3)(q3Zq1) 9. (q0Zq2) → a(q1aq0)(q0Zq2) 10. (q0Zq2) → a(q1aq1)(q1Zq2) 11. (q0Zq2) → a(q1aq2)(q2Zq2) 12. (q0Zq2) → a(q1aq3)(q3Zq2) 13. (q0Zq3) → a(q1aq0)(q0Zq3) 14. (q0Zq3) → a(q1aq1)(q1Zq3) 15. (q0Zq3) → a(q1aq2)(q2Zq3) 16. (q0Zq3) → a(q1aq3)(q3Zq3)

W nawiasach są nazwy zmiennych. Usuwamy produkcje ze zmiennymi występującymi po prawej stronie produkcji, które nie występują po lewej stronie żadnej z produkcji i otrzymujemy

1. (q2aq2) → b 2. (q2Zq2) → b 3. q2Zq3 → ε 4. q1aq2 → b

5. (q1aq0) → a(q1aq1)(q1aq0) 6. (q1aq1) → a(q1aq1)(q1aq1) 7. (q1aq2) → a(q1aq1)(q1aq2)

(10)

8. (q1aq2) → a(q1aq2)(q2aq2) 9. (q1aq3) → a(q1aq1)(q1aq3) 10. (q0Zq0) → a(q1aq0)(q0Zq0) 11. (q0Zq1) → a(q1aq0)(q0Zq1) 12. (q0Zq2) → a(q1aq0)(q0Zq2) 13. (q0Zq2) → a(q1aq2)(q2Zq2) 14. (q0Zq3) → a(q1aq0)(q0Zq3) 15. (q0Zq3) → a(q1aq2)(q2Zq3)

Następnie zauważmy, że niektóre zmienne np. (q0Zq0) występują tylko w jednej produk- cji, możemy takie produkcje usunąć i otrzymujemy

1. (q2aq2) → b 2. (q2Zq2) → b 3. q2Zq3 → ε 4. q1aq2 → b

5. (q1aq0) → a(q1aq1)(q1aq0) 6. (q1aq1) → a(q1aq1)(q1aq1) 7. (q1aq2) → a(q1aq1)(q1aq2) 8. (q1aq2) → a(q1aq2)(q2aq2) 9. (q1aq3) → a(q1aq1)(q1aq3) 10. (q0Zq2) → a(q1aq0)(q0Zq2) 11. (q0Zq2) → a(q1aq2)(q2Zq2) 12. (q0Zq3) → a(q1aq0)(q0Zq3) 13. (q0Zq3) → a(q1aq2)(q2Zq3)

Następnie usuwamy wszystkie produkcje ze zmiennymi, które nie można w wyprowadze- niu zastąpić terminalem lub słowem pustym.

1. (q2aq2) → b 2. (q2Zq2) → b

(11)

3. q2Zq3 → ε 4. q1aq2 → b

5. (q1aq2) → a(q1aq2)(q2aq2) 6. (q0Zq2) → a(q1aq2)(q2Zq2) 7. (q0Zq3) → a(q1aq2)(q2Zq3)

Następnie ponownie usuwamy zmienne, które występują tylko w jednej produkcji 1. (q2aq2) → b

2. (q2Zq2) → b 3. q2Zq3 → ε 4. q1aq2 → b

5. (q1aq2) → a(q1aq2)(q2aq2) 6. (q0Zq3) → a(q1aq2)(q2Zq3)

Następnie ponownie usuwamy zmienne, które występują tylko w jednej produkcji 1. (q2aq2) → b

2. q2Zq3 → ε 3. q1aq2 → b

4. (q1aq2) → a(q1aq2)(q2aq2) 5. (q0Zq3) → a(q1aq2)(q2Zq3) Po zmianie symboli otrzymujemy

1. S → aDR 2. D → b 3. L → b 4. D → aDL 5. R → ε

(12)

1.7 Maszyna Turinga Maszyna Turinga składa się z

1. zbioru stanów wewnętrznych Q, 2. alfabetu wejściowego Σ,

3. skończonego zbioru symboli w alfabecie taśmowym Γ, 4. δ funkcja tranzycji

δ : Q × Γn→ podzbiór Q × Γn× {L, S, R}n , (8) 5. q0 - stan startowy, q0 ∈ Q,

6. ε - symbol pusty,

7. F - zbiór stanów zawarty w Q, zwanych stanami akceptującymi, 8. n - oznacza liczbę taśm.

Przykład 5. Skonstruujmy przykładowo maszynę Turinga z jedną taśmą dla języka

L = {anbncn} (9)

gdzie n ≥ 0. Maszyna Turinga dla tego języka wygląda jak na Rys. 12.

Każda tranzycja składa się z trzech wartości: pierwsza wartość oznacza aktualną war- tość pod głowicą maszyny Turinga. Druga wartość oznacza wartość, która zastąpi tą pierwszą na taśmie. Rozmiar wartości w tych dwóch polach wynosi jeden zgodnie z de- finicją maszyny Turinga. Trzecia wartość mówi o tym, gdzie przesunie się głowica na taśmie po zamianie. R oznacza przesuń o jeden kwadrat do przodu, L przesuń o jeden kwadrat do tył, S - pozostań w tym samym miejscu. Algorytm podany w przykładzie pole- ga na zamianie w każdym kroku po jednym symbolu a, b, c odpowiednio na x, y, z. Jeśli taka zamiana nie jest możliwa oznacza to różną ilość symboli a, b i c. Wyprowadzenie dla słowa abc. Na początku na taśmie zapisane jest słowo abc, głowica wskazuje na symbol a. Zawsze pogrubiony będzie symbol na taśmie na który wskazuje aktualnie głowica. W pierwszym kroku przechodzimy ze stanu q0 do stanu q1

1. q0, abc 2. q1, xbc 3. q2, xyc 4. q3, xyz 5. q3, xyz 6. q0, xyz

(13)

q0

start q4

q5

q3

q6

q2 q1

y; y, L

; , S

a; x, R

b; y, R

y; y, R a; a, R c; z, L

z; z, R b; b, R x; x, R a; a, L

b; b, L z; z, L y; y, L

; , R x; x, L

; , S x; x, R y; y, R z; z, R

Rysunek 12: Przykładowa maszyna Turinga.

(14)

7. q4, xyz 8. q4, xyz 9. q5, xyz 10. q5, xyz 11. q5, xyz 12. q5, xyz 13. q6, xyz

Jesteśmy w stanie końcowym q6, a więc dane słowo należy do języka.

1.8 Maszyna Turinga z wieloma taśmami

W maszynie Turinga z wieloma taśmami tranzycje składają się z kilku części, każda część odpowiada jednej taśmie. Części tranzycji zbudowane są tak samo jak tranzycje w maszynie Turinga z jedną taśmą. Odpalenie tranzycji polega na tym, że rozpatrywane są równocześnie wszystkie taśmy. Reprezentacja języka z poprzedniego przykładu dla ma- szyny Turinga z trzema taśmami wygląda jak na Rys.13: Algorytm polega na zapisaniu symboli a na drugą taśmę, symboli b na trzecią taśmę, a następnie poprzez równoczesne przechodzenie przez wszystkie taśmy sprawdzeniu czy jest ta sama liczba symboli a, b i c. Przykładowe wyprowadzenie dla słowa abc. Początkowo na pierwszej taśmie zapisane jest słowo abc, pozostałe taśmy są puste

1. q0, abc, ,  2. q0, abc, a,  3. q1, abc, a, b

4. q2, abc, a, b

5. q2, abc, a, b 6. q3, abc, a, b

q3 jest stanem końcowym, a więc słowo należy do tego języka. Stan q4 jest po to aby zaakceptować słowo puste.

1.9 Maszyna Turinga z bloków

Maszyny Turinga mogą zostać użyte do tworzenia bardziej rozbudowanych maszyn Tu- ringa. Nazywamy je wtedy “blokami”. Przykładowo w celu budowy maszyny Turinga rozpoznającej język L = {anbncndn} możemy najpierw zbudować maszynę Turinga dla języka L2 = {anbncn}. Skonstruowaliśmy już wcześniej maszynę Turinga dla L2. Maszy- na Turinga dla L jest jak na Rys. 14. Blok sprawdza czy liczba a, b i c na wejściu jest taka sama, oraz przetwarza je na x, y i z odpowiednio.

(15)

q0

start q4

q3 q1

q2

; , S|; , L|; , S

b; b, R|; , S|; b, R

a; a, R|; a, R|; , S

c; c, S|; , L|; , L b; b, R|; , S|; b, R

; , S|; , S|; , R

c; c, R|a; a, L|b; b, L

; , S|; , S|; , S

Rysunek 13: Przykładowa maszyna Turinga.

(16)

q0

start q2

anbncn q5

q3

q6

q4

a; a, R b; b, R c; c, R

d;, L

; , L ; , R

c; c, L b; b, L a; a, L

; d, S

; , S

d; w, L v; v, R w; w, R

z; v, R

w; w, L v; v, L

; , S

Rysunek 14: Przykładowa maszyna Turinga z blokiem anbncn.

(17)

1.10 Konwersja maszyny Turinga do gramatyki nieograniczonej

Mamy maszynę Turinga, która akceptuje język złożony z jednego lub więcej a jak na Rys. 15. Tworzymy 3 rodzaje produkcji

S → V (==) S (10)

S → SV (==) (11)

S → T (12)

gdzie S jest symbolem startowym. Mamy również dwie dodatkowe reguły

T → T V (aa) (13)

oraz

T → V (a0a) (14)

gdzie a to dowolne odczytywane napisy z taśmy. Znak = odpowiada symbolowi pustemu na taśmie. Dla stanu q0 otrzymujemy produkcje

1. S → V (==)S 2. S → SV (==) 3. S → T

4. T → T V (aa) 5. T → V (a0a) 6. =→ ε

Następnie analizujemy poszczególne tranzycje. Dla tranzycji od q0do q1, czyli (q0, a) =⇒

(q1, a, R) umieszczamy produkcje postaci

V (x0a) V (yz) → V (xa) V (y1z) (15)

gdzie x, y to elementy wejściowego alfabetu oraz symbol pusty, a z to wszystkie elementy alfabetu taśmowego. W przykładzie jest tylko a w alfabecie wejściowym. z może być albo a albo = (symbol pusty). Ponieważ q1 jest symbolem końcowym to stosujemy ostatni krok algorytmu regułę

V (a1a) → a (16)

oraz

yV (xz) → a (17)

Tym sposobem generujemy terminale po prawej stronie produkcji. Po zastosowaniu wszystkich reguł otrzymujemy

1. V (a0a)V (aa) → V (aa)V (a1a)

(18)

2. V (a1a) → a 3. V (aa)a → aa 4. aV (aa) → aa

5. V (= 0a)V (aa) → V (= a)V (a1a) 6. V (a1a) → a

7. V (= a)a →= a 8. aV (= a) → a =

9. V (a0a)V (= a) → V (aa)V (= 1a) 10. V (= 1a) →=

11. V (aa) =→ a = 12. = V (aa) →= a

13. V (= 0a)V (= a) → V (= a)V (= 1a) 14. V (= 1a) →=

15. V (= a) =→==

16. = V (= a) →==

Dla tranzycji z q1 do q1 otrzymujemy 1. V (a1a)V (aa) → V (aa)V (a1a) 2. V (a1a) → a

3. V (aa)a → aa 4. aV (aa) → aa

5. V (= 1a)V (aa) → V (= a)V (a1a) 6. V (a1a) → a

7. V (= a)a →= a 8. aV (= a) → a =

9. V (a1a)V (= a) → V (aa)V (= 1a) 10. V (= 1a) →=

11. V (aa) =→ a =

(19)

12. = V (aa) →= a

13. V (= 1a)V (= a) → V (= a)V (= 1a) 14. V (= 1a) →=

15. V (= a) =→==

16. = V (= a) →==

Ostatecznie po uproszczeniu otrzymujemy 1. S → T

2. S → SV (==) 3. S → V (==)S 4. =→ ε

5. V (= 1a) →=

6. V (a1a) → a 7. = V (= a) →==

8. = V (aa) →= a 9. V (= a) =→==

10. V (= a)a →= a 11. V (aa) =→ a = 12. V (aa)a → aa 13. aV (= a) → a = 14. aV (aa) → aa 15. T → T V (aa) 16. T → V (a0a)

17. V (= 0a)V (= a) → V (= a)V (= 1a) 18. V (= 0a)V (aa) → V (= a)V (a1a) 19. V (= 1a)V (= a) → V (= a)V (= 1a) 20. V (= 1a)V (aa) → V (= a)V (a1a) 21. V (a0a)V (= a) → V (aa)V (= 1a)

(20)

q0

start a, a; R q1

a; a, R

Rysunek 15: Przykładowy automat ze stosem.

22. V (a0a)V (aa) → V (aa)V (a1a) 23. V (a1a)V (= a) → V (aa)V (= 1a) 24. V (a1a)V (aa) → V (aa)V (a1a)

Dla podanej gramatyki możemy wyprowadzić np. słowo aa stosując następujące wypro- wadzenie

S =⇒ T =⇒ T V (aa) =⇒ V (a0a) V (aa) =⇒ V (aa) V (a1a) =⇒ V (aa) a =⇒ aa (18)

2 Zadania

2.1 Zadania podstawowe

1. Następujący automat ze stosem Rys.16 przekonwertować na gramatykę.

2. Zaprojektować maszynę Turinga akceptującą język, który zawiera dowolne napisy z podsłowem aba. Sprawdzić poprawność dla przykładowych napisów.

3. Zaprojektować automat ze stosem rozpoznający palindromy o parzystej długości nad alfabetem z dwoma symbolami a i b. Przekonwertować ten automat do gra- matyki bezkontekstowej.

2.2 Zadania dodatkowe

1. Jedno losowo wybrane przez upel zadanie z zestawu 8 ze stronyhttp://kompilatory.

agh.edu.pl/automaty/zadania/Zadania08.pdf

2. Jedno losowo wybrane przez upel zadanie z zestawu 12 ze stronyhttp://kompilatory.

agh.edu.pl/automaty/zadania/Zadania12.pdf

3. Jedno losowo wybrane przez upel zadanie z zestawu 14 ze stronyhttp://kompilatory.

agh.edu.pl/automaty/zadania/Zadania14.pdf

Literatura

[1] U. J. D. Hopcroft John E., Rajeev Motwani, Wprowadzenie do teorii automatów, języków i obliczeń. Wydawnictwo Naukowe PWN, 2012.

(21)

q0

start q1 q2

ε, Z; SZ ε, Z; ε

ε, A; aA ε, B; bB ε, A; ε ε, B; cc ε, S; aA a, a; ε c, c; ε b, b; ε

Rysunek 16: Przykładowy automat ze stosem.

Cytaty

Powiązane dokumenty

Możliwy zatem do przyjęcia jest taki maszynowy model umysłu, w którym byłby on wprawdzie maszyną operującą rachunkiem zdań (np. wypowiedziami), lecz maszyna

Rozwijające się życie polityczne w wolnym kraju prowokuje do czerpania z jego twórczości jako księgi cytatów.. Rodzi to pewne nadzieje, ale także

Układamy obrazki w rzędach obok siebie - wykorzystujemy 3 kartki w

Zbudować maszynę Turinga o dwustronnie nieskończonej taśmie, która dla wejścia w postaci niepustego łańcucha binarnego o dowolnej długości traktowanego jako liczba

jeden z uczniów przygotowuje pytania do ankiety, drugi uczeń opracowuje formularz ankiety, trzeci uczeń przygotowuje się do prowadzania ankiety. Należy zwrócić szczególną uwagę

Twórca maszyny konceptualnej, znanej dziś pod nazwą Maszyny Turinga, będącej modelem dzisiejszych komputerów..

[r]

 gdy nie uda się dopasować wartości zmiennej (lub obliczonego wyrażenia) do żadnej wartości występującej po słowie case, wykonywane są instrukcje