Automat ze stosem. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra Informatyki

Podobne dokumenty
Parsery LL(1) Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki

Języki formalne i automaty Ćwiczenia 9

Matematyczne Podstawy Informatyki

Hierarchia Chomsky ego Maszyna Turinga

Języki formalne i automaty Ćwiczenia 4

Maszyna Turinga języki

Wykład5,str.1. Maszyny ze stosem ... 1,0 λ r. λ,z λ

Języki formalne i automaty Ćwiczenia 7

Gramatyki, wyprowadzenia, hierarchia Chomsky ego. Gramatyka

Języki formalne i automaty Ćwiczenia 1

Przykład: Σ = {0, 1} Σ - zbiór wszystkich skończonych ciagów binarnych. L 1 = {0, 00, 000,...,1, 11, 111,... } L 2 = {01, 1010, 001, 11}

złożony ze słów zerojedynkowych o długości co najmniej 3, w których druga i trzecia litera od końca sa

Języki, automaty i obliczenia

Hierarchia Chomsky ego

Języki formalne i automaty Ćwiczenia 3

Zadanie 1. (6 punktów) Słowo w nazwiemy anagramem słowa v jeśli w można otrzymać z v poprzez zamianę kolejności liter. Niech

Języki, automaty i obliczenia

Gramatyka operatorowa

2.2. Gramatyki, wyprowadzenia, hierarchia Chomsky'ego

Gramatyki rekursywne

Wyrażenie nawiasowe. Wyrażenie puste jest poprawnym wyrażeniem nawiasowym.

Jaki język zrozumie automat?

1 Automaty niedeterministyczne

JAO - Wprowadzenie do Gramatyk bezkontekstowych

Symbol, alfabet, łańcuch

Maszyna Turinga. Algorytm. czy program???? Problem Hilberta: Przykłady algorytmów. Cechy algorytmu: Pojęcie algorytmu

Zadanie 1. Czy prawdziwa jest następująca implikacja? Jeśli L A jest językiem regularnym, to regularnym językiem jest też. A = (A, Q, q I, F, δ)

Obliczenia inspirowane Naturą

Języki, automaty i obliczenia

Klasyczne i kwantowe podejście do teorii automatów i języków formalnych p.1/33

Imię, nazwisko, nr indeksu

Wprowadzenie: języki, symbole, alfabety, łańcuchy Języki formalne i automaty. Literatura

Rozwiązania około dwustu łatwych zadań z języków formalnych i złożoności obliczeniowej i być może jednego chyba trudnego (w trakcie tworzenia)

Analizator syntaktyczny

Dopełnienie to można wyrazić w następujący sposób:

Metody Kompilacji Wykład 8 Analiza Syntaktyczna cd. Włodzimierz Bielecki WI ZUT

Obliczenia inspirowane Naturą

R O Z D Z I A Ł V I I

JAO - Języki, Automaty i Obliczenia - Wykład 2. JAO - Języki, Automaty i Obliczenia - Wykład 2

Matematyczne Podstawy Informatyki

10. Translacja sterowana składnią i YACC

(j, k) jeśli k j w przeciwnym przypadku.

Języki, automaty i obliczenia

3.4. Przekształcenia gramatyk bezkontekstowych

Matematyczna wieża Babel. 4. Ograniczone maszyny Turinga o językach kontekstowych materiały do ćwiczeń

Wyrażenia regularne.

Turing i jego maszyny

Metody Kompilacji Wykład 7 Analiza Syntaktyczna

Języki formalne i automaty Ćwiczenia 2

KATEDRA INFORMATYKI TECHNICZNEJ. Ćwiczenia laboratoryjne z Logiki Układów Cyfrowych. ćwiczenie 204

Języki i operacje na językach. Teoria automatów i języków formalnych. Definicja języka

GRAMATYKI BEZKONTEKSTOWE

0.1 Lewostronna rekurencja

Języki formalne i automaty Ćwiczenia 8

Teoretyczne podstawy informatyki

10110 =

ZŁOŻONOŚĆ OBLICZENIOWA ALGORYTMÓW

Gramatyki atrybutywne

JAO - lematy o pompowaniu dla jezykow bezkontekstowy

Lista 5 Gramatyki bezkontekstowe i automaty ze stosem

Temat: Zastosowanie wyrażeń regularnych do syntezy i analizy automatów skończonych

Efektywna analiza składniowa GBK

Wykład 5. Jan Pustelnik

Złożoność obliczeniowa

ZŁOŻONOŚĆ OBLICZENIOWA ALGORYTMÓW

Matematyczne Podstawy Informatyki

AUTOMATY SKOŃCZONE. Automat skończony przedstawiamy formalnie jako uporządkowaną piątkę:

Maszyna Turinga (Algorytmy Część III)

JĘZYKI FORMALNE I METODY KOMPILACJI

JIP. Analiza składni, gramatyki

Analiza leksykalna 1. Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki

Zadanie analizy leksykalnej

Matematyczna wieża Babel. 3. Gramatyki o językach bezkontekstowych materiały do ćwiczeń

Wprowadzenie. Teoria automatów i języków formalnych. Literatura (1)

Maszyna Turinga, ang. Turing Machine (TM)

Odmiany maszyny Turinga. dr hab. inż. Joanna Józefowska, prof. PP 1

ZADANIA Z AUTOMATU SKOŃCZONEGO SPRAWOZDANIE NR 4

Algorytmy stochastyczne, wykład 05 Systemy Liendenmayera, modelowanie roślin

Języki formalne i automaty Ćwiczenia 6

ZYKI BEZKONTEKSTOWE (KLASA

Wprowadzenie do programowania języki i gramatyki formalne. dr hab. inż. Mikołaj Morzy

Automaty Büchi ego i równoważne modele obliczeń

Języki formalne i automaty Ćwiczenia 5

Wprowadzenie do analizy składniowej. Bartosz Bogacki.

Automat Moore a. Teoria układów logicznych

Ciągłość funkcji. Seminarium dyplomowe powtórzenie wiadomości. Jan Kowalski. 22 maja Uniwersytet Mikołaja Kopernika w Toruniu

Teoretyczne podstawy informatyki

Odtworzenie wywodu metodą wstępującą (bottom up)

R O Z D Z I A Ł V I I I

Programowanie w Logice Gramatyki metamorficzne. Przemysław Kobylański na podstawie [CM2003] i [SS1994]

1 X-gramatyki, Hierarchia Chomsky ego

Języki i gramatyki formalne

Analiza leksykalna 1. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra Informatyki

Elementy Teorii Obliczeń

1. Maszyna Turinga, gramatyki formalne i ONP

Jȩzyki, automaty, zlożoność obliczeniowa

Obliczanie. dr hab. inż. Joanna Józefowska, prof. PP 1

5. JĘZYKI BEZKONTEKSTOWE (KLASA "2") GRAMATYKI BEZKONTEKSTOWE AUTOMATY ZE STOSEM DETERMINISTYCZNE JĘZYKI BEZKONTEKSTOWE I

TEORIA ZŁOŻONOŚCI PROBLEMY I ALGORYTMY OGRANICZENIE DOLNE I GÓRNE PROJEKTOWANIE ALGORYTMÓW I METODY SZTUCZNEJ INTELIGENCJI

Minimalizacja automatów niedeterministycznych na słowach skończonych i nieskończonych

Transkrypt:

Automat ze stosem Języki formalne i automaty Dr inż. Janusz Majewski Katedra Informatyki

Automat ze stosem (1) dno stosu Stos wierzchołek stosu Wejście # B B A B A B A B a b b a b a b $ q i

Automat ze stosem (1) c.d. dno stosu wierzchołek stosu stos taśma wejściowa # R R R P R a b ba b a a b b $ q i

Automat ze stosem (2) wierzchołek stosu taśma wejściowa # R R R P R a b ba b a a b b $ A = < Σ, Q, F, q 0, Γ, Z 0,, $ > Σ zbiór symboli terminalnych Q zbiór stanów #Q < F Q zbiór stanów końcowych q 0 Q stan początkowy Γ zbiór symboli stosowych Z 0 Γ { } symbol początkowy stosu - funkcja przejścia q i : Q ( {ε,$}) * 2 Q * $ - ogranicznik końca słowa wejściowego

Konfiguracja automatu (opis chwilowy) wierzchołek stosu taśma wejściowa # R R R P R a b ba b a a b b $ q i Konfiguracja automatu: (#RRRPR, q i, abab$) stos (wierzchołek stosu) stan nieprzeczytana część taśmy wejściowej

Akceptacja przez stan końcowy Konfiguracja początkowa: Z 0 w $ q 0 Konfiguracja akceptująca akceptacja przez stan końcowy Z 1 Z 2 Z 3 w $ q F

Akceptacja przez pusty stos Konfiguracja początkowa: Z 0 w $ q 0 Konfiguracja akceptująca akceptacja przez pusty stos stos pusty w $ q

Pojedynczy krok automatu Funkcja przejścia: (aktualny_stan, wejście, aktualny_wierzchołek_stosu) = = (nowy_stan, nowy_wierzchołek_stosu) Kroki automatu: (q n, a, XYZ) = (q k, ST) zmiana stanu z q n na q k, przeczytanie a z wejścia z przesunięciem głowicy w prawo, podmiana XYZ na ST na wierzchołku stosu (q n, a, XYZ) = (q k, ) zmiana stanu z q n na q k, przeczytanie a z wejścia z przesunięciem głowicy w prawo, zdjęcie XYZ z wierzchołka stosu (q n, a, ) = (q k, ST) zmiana stanu z q n na q k, przeczytanie a z wejścia z przesunięciem głowicy w prawo, dopisanie ST na wierzchołku stosu (q n,, XYZ) = (q k, ST) zmiana stanu z q n na q k, podmiana XYZ na ST na wierzchołku stosu bez czytania wejścia i bez przesuwania głowicy wejściowej (q n,, XYZ) = (q k, ) zmiana stanu z q n na q k, zdjęcie XYZ z wierzchołka stosu bez czytania wejścia i bez przesuwania głowicy wejściowej (q n,, ) = (q k, ST) zmiana stanu z q n na q k, dopisanie ST na wierzchołku stosu bez czytania wejścia i bez przesuwania głowicy wejściowej

Przykład: Automat ze stosem akceptujący język L = { 0 n 1 n n = 0,1,...} A= < Σ, Q, F, q 0, Γ, Z 0, δ, $ > Σ = { 0, 1} Q = { q 0, q 1, q 2 } F = {q 0 } q 0 stan początkowy Γ = {R, 0 } Z 0 = R (1) δ(q 0, 0, R) ={(q 1, R0 )} Analizowane słowo: 000111$ (2) δ(q 1, 0, 0) ={(q 1, 00 )} (R, q 0, 000111$) (3) δ(q 1, 1, 0) ={(q 2, ε )} (1) (R0, q 1, 00111$) (4) δ(q 2, 1, 0) ={(q 2, ε )} (2) (R00, q 1, 0111$) (5) δ(q 2, $, R) ={(q 0, ε )} (2) (R000, q 1, 111$) (6) δ(q 0, $, R) ={(q 0, ε )} (3) (R00, q 2, 11$) (4) (R0, q 2, 1$) (4) (R, q 2, $) (5) ( ε, q 0, $)

Przykład konstrukcji automatu ze stosem (1) Budujemy automat ze stosem akceptujący wszystkie łańcuchy zbudowane z liter a oraz b, w których liczba liter a jest równa liczbie liter b. Początkowo na stosie umieścimy symbol #. Jeżeli na wierzchołku stosu nie ma żadnej z liter a lub b, to przeczytaną z wejścia literę umieścimy na stosie: δ(q 0, a, #) ={(q 0, #a)} δ(q 0, b, #) ={(q 0, #b)} Jeżeli kolejna czytana litera jest identyczna, jak ta znajdująca się na wierzchołku stosu, to dokładamy ją na stos: δ(q 0, a, a) ={(q 0, aa)} δ(q 0, b, b) ={(q 0, bb)}

Przykład konstrukcji automatu ze stosem (2) Jeżeli kolejna czytana litera jest różna od tej znajdującej się na wierzchołku stosu, to zdejmujemy literę z wierzchołka stosu: δ(q 0, a, b) ={(q 0, )} δ(q 0, b, a) ={(q 0, )} Jeżeli widzimy na wejściu znacznik końca $ i na wierzchołku stosu jest #, to akceptujemy: δ(q 0, $, #) ={(q 1, )} (Stan q 1 będzie stanem akceptującym).

Przykład konstrukcji automatu ze stosem (3) Pełna definicja skonstruowanego automatu będzie następująca: A= < Σ, Q, F, q 0, Γ, Z 0, δ, $ > Σ = {a, b} Q = {q 0, q 1 } F = {q 1 } q 0 stan początkowy Γ = {#, a, b} Z 0 = # δ(q 0, a, #) ={(q 0, #a)} δ(q 0, b, #) ={(q 0, #b)} δ(q 0, a, a) ={(q 0, aa)} δ(q 0, b, b) ={(q 0, bb)} δ(q 0, a, b) ={(q 0, )} δ(q 0, b, a) ={(q 0, )} δ(q 0, $, #) ={(q 1, )}

Akceptacja języka przez automat ze stosem x Σ* jest słowem akceptowanym przez automat A (ze stosem) przy stanie końcowym jeżeli istnieje taka sekwencja kroków automatu, która powoduje przejście automatu z konfiguracji początkowej do konfiguracji akceptującej przez stan końcowy. Język L jest akceptowany przez automat A przy stanie końcowym (co oznaczamy L(A)) L = L(A) = {x Σ* x jest akceptowane przez A przy stanie końcowym} x Σ* jest słowem akceptowanym przez automat A (ze stosem) przy pustym stosie jeżeli istnieje taka sekwencja kroków automatu, która powoduje przejście automatu z konfiguracji początkowej do konfiguracji akceptującej przez pusty stos. Język L jest akceptowany przez automat A przy pustym stosie (co oznaczamy N(A)) L = N(A) = {x Σ* x jest akceptowane przez A przy pustym stosie}

Języki akceptowane przez automaty ze stosem Poniższe trzy klasy języków pokrywają się ze sobą: Języki bezkontekstowe, czyli języki generowane przez gramatyki, których lewe strony produkcji są pojendynczymi symbolami nieterminalnymi Języki akceptowane przez automaty ze stosem przy stanie końcowym Języki akceptowane przez automaty ze stosem przy pustym stosie

Przykład automatu ze stosem odtwarzającego wywód lewostronny metodą top-down dla gramatyki wyrażeń Przykład: G = <{E, T, F}, {id, +, *, (, )}, P = { E E+T T T T * F F F (E) id}, E > A = <{id, +, *, (, )}, {q},, q, {E, T, F, id, +, *, (, )}, E, δ, $> δ(q, ε, E) ={ (1) (q, T+E ), (2) (q, T)} δ(q, ε, T) ={ (3) (q, F*T ), (4) (q, F)} δ(q, ε, F) ={ (5) (q, )E( ), (6) (q, id )} δ(q, b, b) ={ (pop) (q, ε)} dla wszystkich b { id, +, *, (, )}

Analiza słowa: id + id * id E, q, id + id * id $ (1) T+E, q, id + id * id $ (2) T+T, q, id + id * id $ (4) T+F, q, id + id * id $ (6) T+ id, q, id + id * id $ (pop) T+, q, + id * id $ (pop) T, q, id * id $ (3) F * T, q, id * id $ (4) F * F, q, id * id $ (6) F * id, q, id * id $ (pop) F *, q, * id $ (pop) F, q, id $ (6) id, q, id $ (pop) ε, q, $ E E + T T + T F + T id + T id + T id + T id + T * F id + F * F id + id * F id + id * F id + id * F id + id * id id + id * id Wyprowadzenie lewostronne top-down Akceptacja przez pusty stos Symbole zdjęte przez (pop)

Przykład automatu ze stosem odtwarzającego wywód prawostronny metodą bottom-up dla gramatyki wyrażeń G = <{E, T, F}, {id, +, *, (, )}, { E E+T T T T* F F F (E) id }, E > A = <{ id, +, *, (, )}, {q 0, q 1 }, {q 1 }, q 0, {E, T, F, id, +, *, (, ), #}, #, $> (shift)δ(q 0, b, ε} = {(q 0, b)} dla wszystkich b { id, +, *, (, )} (1) δ(q 0, ε, E + T} = {(q 0, E)} (2) δ(q 0, ε, T } = {(q 0, E)} (3) δ(q 0, ε, T*F } = {(q 0, T)} (4) δ(q 0, ε, F} = {(q 0, T)} (5) δ(q 0, ε, (E)} = {(q 0, F)} (6) δ(q 0, ε, id } = {(q 0, F)} (acc) δ(q 0, $, #E } = {(q 1, ε)}

Analiza słowa: id + id * id #, q 0, id + id * id $ # id, q 0, + id * id $ # F, q 0, + id * id $ #T, q 0, + id * id $ #E, q 0, + id * id $ #E +, q 0, id * id $ #E + id, q 0, * id $ #E + F, q 0, * id $ #E + T, q 0, * id $ #E + T*, q 0, id $ #E + T* id, q 0, $ #E + T *F, q 0, $ #E + T, q 0, $ #E, q 0, $ ε, q 1, $ (shift) (6) (4) (2) (shift) (shift) (6) (4) (shift) (shift) (6) (3) (1) (acc) id + id * id F + id * id T + id * id E + id * id E + F * id E + T * id E + T * F E + T E Wyprowadzenie prawostronne bottom-up. Wierzchołek stosu przy redukcjach to prawa granica osnowy

Deterministyczny automat ze stosem Automat ze stosem jest deterministyczny wtedy i tylko wtedy, gdy w każdej konfiguracji może wykonać co najwyżej jeden ruch. Twierdzenie: Klasa języków akceptowanych przez deterministyczne automaty ze stosem jest właściwą podklasą klasy języków akceptowanych przez automaty ze stosem. Innymi słowy: nie dla każdego automatu ze stosem istnieje równoważny mu deterministyczny automat ze stosem. L(A Deterministyczny ze Stosem ) L(A ze Stosem )

Przykład L={xx R x Σ*} jest językiem nieakceptowalnym przez deterministyczny automat ze stosem. Przypuśćmy, że A jest automatem ze stosem akceptującym język L i niech y Σ* będzie dowolnym słowem przeznaczonym do analizy przez automat. Aby sprawdzić, czy y jest postaci xx R trzeba przepisać lewą połowę słowa y na stos, tzn. przejść od konfiguracji (, q 0, xx R $) do konfiguracji (x, q, x R $), a następnie przystąpić do sprawdzenia, czy słowo na stosie jest zwierciadlanym odbiciem słowa pozostającego na wejściu. Takie postępowanie wymaga umiejętności odszukiwania połowy (środka) słowa y, co przy jednokrotnym jego czytaniu jest oczywiście niemożliwe. Można pokazać, że deterministyczny automat akceptujący język L istnieje, nie jest to już jednak automat ze stosem, ale tzw. automat liniowo ograniczony lub maszyna Turinga.