34
1 Języki i automaty część 5

Języki i automaty część 5

  • Upload
    lave

  • View
    46

  • Download
    0

Embed Size (px)

DESCRIPTION

Języki i automaty część 5. automaty skończone ( AS ). JĘZYKI REGULARNE. niedeterministyczne automaty ze stosem ( NASZ ). JĘZYKI BEZKONTEKSTOWE. Przypomnienie. Poznaliśmy już dwie ważne klasy języków:. Zastosowania gramatyk bezkontekstowych. - PowerPoint PPT Presentation

Citation preview

Page 1: Języki i automaty  część  5

1

Języki i automaty część 5

Page 2: Języki i automaty  część  5

2

JĘZYKI REGULARN

E

automaty skończone

(AS)

JĘZYKI

BEZKONTEKSTOWE

niedeterministyczne automaty ze

stosem(NASZ)

Przypomnienie

Poznaliśmy już dwie ważne klasy języków:

Page 3: Języki i automaty  część  5

3

Zastosowania gramatyk bezkontekstowych

Gramatyki bezkontekstowe odgrywają dużą rolę w budowie programów nazywanych parserami (inaczej analizatory składniowe).

Parser dokonuje analizy danych wejściowych i sprawdza czy dany fragment tekstu (kodu) ma poprawną strukturę (zgodną z pewną gramatyką).

W przypadku języków programowania parser jest składową kompilatora.

Page 4: Języki i automaty  część  5

4

Zastosowania gramatyk bezkontekstowych

Przykład 1 (cd)

W typowych językach programowania (np. C) używane są nawiasy klamrowe { i }.

Aby składnia programu była poprawna nawiasy klamrowe muszą być zrównoważone.

Łańcuchy zrównoważone: {}{}, {{}}, {{{}}{}}

Łańcuchy niezrównoważone: }{}, {{}, }{

Zbudujemy teraz gramatykę, która generuje łańcuchy zrównoważone i NASZ akceptujący takie łańcuchy.

Page 5: Języki i automaty  część  5

5

Przykład 1 (cd)

Zdefiniujmy następującą gramatykę Gzr:

• symbole terminalne ={ { , } }

• symbole nieterminalne N={S}.

• reguły S SS | {S} |

Gramatyka Gzr generuje łańcuchy zrównoważonych nawiasów klamrowych.

S {S} {SS} {{S}{S}} {{S}{{S}}} {{}{{}}}

W ten sposób wygenerowaliśmy łańcuch {{{}}{}}.

Page 6: Języki i automaty  część  5

6

Zbudujemy automat ze stosem (AZS) akceptujący słowa generowane przez gramatykę Gzr (wykorzystamy metodę omówioną na wykładzie poprzednim).

Automat ten składa się z 3 stanów. Oznaczmy je przez 0, 1 i 2.

Stanem początkowym jest stan 0.

Przy przejściu 0 1 automat wykonuje operację:

( , ) push(S)

Przykład 1 (cd)

Dodajemy następujące operacje towarzyszące przejściu 1 1:

={{,}}({, {) pop; advance

(}, }) pop; advance

Page 7: Języki i automaty  część  5

7

SSS

S ( , S) pop

( , S) pop; push(S); push(S)

Przykład 1 (cd)

S{S} ( , S) pop; push(}); push(S); push({)

Ostatecznie otrzymujemy NAZS:

0 1 2( , ) push(S) (EOF, EOS)

( , S) pop

({,{) pop; advance (}, }) pop; advance

( , S) pop; push(S); push(S)

( , S) pop; push(}); push(S); push({);

Page 8: Języki i automaty  część  5

8

Przykład 1 (cd)

Sprawdzimy czy automat akceptuje łańcuch {}{{}}?

0 1 2( , ) push(S)

STOS{}{{}}

1STOS {}{{}}S

( , S) pop; push(S); push(S)

1STOS {}{{}}

SS

( , S) pop; push(}); push(S); push({);

Page 9: Języki i automaty  część  5

9

1STOS {}{{}}

{S}S

({,{) pop; advance

1STOS }{{}}

S}S

( , S) pop

}S

1STOS }{{}}

(}, }) pop; advance

1STOS {{}}S

( , S) pop; push(}); push(S); push({);

Przykład 1 (cd)

Page 10: Języki i automaty  część  5

10

1STOS {{}}

{S}

({,{) pop; advance

1STOS {}}

S}

( , S) pop; push(}); push(S); push({);

1STOS {}}

{S}}

({,{) pop; advance

1STOS }}

S}}

( , S) pop

Przykład 1 (cd)

Page 11: Języki i automaty  część  5

11

}}1STOS

}}

(}, }) pop; advance

1STOS }

}

(}, }) pop; advance

Zatem automat akceptuje łańcuch {}{{}}.

1STOS

2(EOF, EOS)

Przykład 1 (cd)

Page 12: Języki i automaty  część  5

12

Przykład 2

Zdefiniujmy następującą gramatykę G:

• symbole terminalne ={a,A,b,B,...,<,>,/}

• symbole nieterminalne N={Znak, Tekst, Element, Dok, PozycjaListy, Lista}

• reguły Znak a | A | b | C |...|...

Tekst | ZnakTekst

Dok | Element Dok Element Tekst | <I>Dok</I> | <OL>Lista</OL>

PozycjaListy <LI>Dok Lista | PozycjaListy

Page 13: Języki i automaty  część  5

13

Dok Element Dok <I>Dok</I>Dok

<I>Element Dok</I>Element Dok

<I>Tekst </I><OL>Lista</OL>

<I>ZnakTekst</I><OL>PozycjaListy Lista</OL>

<I>PTekst</I><OL><LI>Dok Lista</OL>

<I>PZnakTekst</I><OL><LI>Element Dok PozycjaListy Lista</OL>

<I>PrnakTekst</I><OL><LI>Element <LI>Element </OL>

...

<I>Przedmioty</I><OL><LI>Fizyka<LI>Chemia</OL>

Przykład 2 (cd)

Gramatyka G umożliwia wygenerowanie następującego łańcucha:

Wygenerowany łańcuch jest fragmentem dokumentu HTML.

Page 14: Języki i automaty  część  5

14

Przykład 2 (cd)

W przeglądarce otrzymujemy:

Page 15: Języki i automaty  część  5

15

L={ aibici: iN}

Przypomnienie (cd)

NA poprzednim wykładzie pokazaliśmy (korzystając z Lematu o pompowaniu), że następujący język

nie jest językiem bezkontekstowym.

Oznacza to, że język L nie może być rozpoznany przez automat ze stosem.

Czy istnieje jakaś szersza klasa automatów (maszyn), które będą w stanie rozpoznać język L?

Nasuwa się zatem pytanie:

Page 16: Języki i automaty  część  5

16

Na początku rozpatrywaliśmy automaty skończone.

Były one jednak wystarczające do rozpoznawania języków regularnych.

Aby móc rozpoznawać języki bezkontekstowe musieliśmy wyposażyć automaty w pewien rodzaj pamięci.

Otrzymaliśmy w ten sposób automaty ze stosem.

Ponieważ nie ograniczyliśmy wielkości stosu automat ze stosem może „zapamiętać” nieskończoną ilość informacji.

Dzięki posiadaniu skończonej ilości stanów automaty takie miały ograniczoną możliwość zapamiętywania.

Krótka historia naszych rozważań

Page 17: Języki i automaty  część  5

17

Poważnym ograniczeniem automatu ze stosem jest to, że może on pobierać informacje ze swego stosu tylko w kolejności „ostatni zapamiętany, pierwszy pobrany” (ang. LIFO – last in, first out).

Innymi słowy automatu skończonego nie ma pamięci o dostępie swobodnym (ang. RAM – random access memory).

Pamięć taką posiada każdy uniwersalny komputer.

Spróbujmy zatem rozważyć automaty z pamięcią typu RAM.

Uogólnienie

W dalszej części wykładu zajmiemy się MASZYNAMI TURINGA.

Page 18: Języki i automaty  część  5

18

Pamięć automatu przedstawmy jako nieskończoną (z obydwu stron) taśmę podzieloną na komórki.

Każda komórka może zawierać literę (symbol) z pewnego alfabetu .

Maszyny Turinga

Nad taśmą umieszczona jest głowica, która może poruszać się w prawo lub w lewo. Głowica może czytać/wpisać symbol z/do komórki.

bca

bca

sterowanie

Page 19: Języki i automaty  część  5

19

Zakładamy, że wejściowy ciąg znaków (słowo) zapisany jest na taśmie (od strony lewej do prawej). Pozostałe komórki są puste.

Maszyny Turinga

Na początku głowica maszyny ustawiona jest nad komórką zawierającą pierwszą literę słowa.

keram

Podobnie jak w przypadku AS i AZS działanie maszyny Turinga polega na przechodzeniu z jednego stanu do drugiego. Istnieje przy tym wyróżniony stan początkowy.

Ponieważ na taśmie istnieją puste komórki wprowadzamy symbol oznaczający taką komórkę.

Page 20: Języki i automaty  część  5

20

Możemy zatem mówić o dwóch alfabetach: - alfabet z którego zbudowane jest słowo i T – alfabet taśmy różniący się od przynajmniej znakiem (alfabet T ten może zawierać także inne znaki nie należące do ).

Maszyny Turinga

Podobnie jak dla AS i AZS także w przypadku maszyny Turinga musimy określić funkcję przejścia .

Dla danego stanu i symbolu nad którym ustawiona jest aktualnie głowica maszyna Turinga wykonuje następujące czynności:

• zapisuje literę na taśmie (w aktualnej komórce)

• przesuwa głowice o jedną komórkę w lewo lub prawo

• przechodzi do nowego stanu

Page 21: Języki i automaty  część  5

21

Maszyny Turinga

Funkcja przejścia parze złożonej ze stanu i symbolu z taśmy (z aktualnego położenia głowicy) przyporządkowuje:

• nowy stan• symbol który będzie zapisana na taśmie

• jeden z symboli L, R i N oznaczających przesunięcie głowicy w lewo, w prawo i brak przesunięcia.

Zatem:

: Q T (Q T {L, R, N}) stop

stop oznacza, że maszyna zakończyła działanie.

Możemy teraz wprowadzić formalną definicję maszyny Turinga.

Page 22: Języki i automaty  część  5

22

Definicja 5.1

Maszyny Turinga

Maszyna Turinga (MT) nad alfabetem T składa się z:

• skończonego zbioru stanów Q

• stanu początkowego q0

• zbioru stanów akceptujących FQ

: Q T (Q T {L, R, N}) stop

• funkcji przejścia

Page 23: Języki i automaty  część  5

23

Uwagi:

Maszyny Turinga

• w przeciwieństwie do AS i AZS maszyna Turinga może zmienić wejściowe słowo zapisane na taśmie.

• w przeciwieństwie do AS i AZS maszyna Turinga może przechodzić przez wejściowe słowo kilka razy (dzięki przesunięciom głowicy).

• podobnie jak AZS maszyna Turinga nie musi się zatrzymać tzn. dla pewnych słów może działać nieskończenie długo.

Page 24: Języki i automaty  część  5

24

Maszyny Turinga

W przypadku maszyn Turinga (podobnie jak w przypadku AS i AZS) interesuje nas co to znaczy, że maszyna Turinga akceptuje słowo.

Wprowadźmy więc odpowiednią definicję:

Definicja 5.1

Mówimy, że słowo jest akceptowane przez maszynę Turinga jeżeli startując ze stanu początkowego, z głowicą ustawioną na pierwszej literze słowa maszyna Turinga zatrzyma się w stanie akceptującym.

Mówimy, że język L jest akceptowany przez maszynę Turinga jeżeli składa się z słów akceptowanych przez maszynę Turinga.

Page 25: Języki i automaty  część  5

25

Maszyny Turinga

Maszyna Turinga rozpoczyna działanie od stanu początkowego z głowicą ustawioną nad pierwszą literą słowa wejściowego.

Następnie maszyna przechodzi przez kolejne konfiguracje.

Przez konfigurację rozumiemy:

• aktualną literę na taśmie

• aktualną pozycję głowicy

• aktualny stan w którym znajduje się maszyna

Page 26: Języki i automaty  część  5

26

Wprowadźmy następujące oznaczenie aktualnej konfiguracji MT:

x0x1xiqxi+1xn

• q jest aktualnym stanem maszyny

• xi są symbolami na taśmie

Maszyny Turinga

• głowica maszyny znajduje się nad komórką zawierającą xi+1

• na lewo od głowicy znajdują się komórki zawierające x0x1xi i wszystkie komórki na lewo od x0 są puste

• na prawo od głowicy znajdują się komórki zawierające xi+2xi+3xn i wszystkie komórki na prawo od xn są puste

xn…xi+1 xi+2xi…x1x0

Page 27: Języki i automaty  część  5

27

Przykład (maszyna M1)

={a, b} T={a, b, } Q={0,1} F={0}

Funkcja przejścia: a b

0 (0,a,R)

(1,b,R)

stop

1 stop stop stop

Jak działa tak zdefiniowana MT?

0aab a0ab aa0b aab1

0aaa a0aa aa0a aaa0

MT rozponaje język {an: nN}.

MT nie akceptuje słowa aab bo 1 nie jest stanem akceptującym.

Page 28: Języki i automaty  część  5

28

Przykład (maszyna M2)

Zdefiniujmy inaczej funkcję przejścia:

a b

0 (0,,R) (1,,R) stop

1 stop stop stop

Jak działa tak zdefiniowana MT?

0aab 0ab 0b 1

0aaa 0aa 0a 0

M2 podobnie jak M1 akceptuje słowa języka {an: nN}.

Dodatkowo jednak niszczy słowo zapisane na taśmie!

M2 nie akceptuje słowa aab bo 1 nie jest stanem akceptującym.

Page 29: Języki i automaty  część  5

29

Przykład (maszyna M3)

Rozpatrzmy teraz następującą funkcję przejścia (stan akceptujący 0):

a b

0 (1,,R) (2,,R) stop

1 (1,a,R) (1,b,R) (3,,L)

2 (2,a,R) (2,b,R) (4,,L)

3 (5,,L) stop (0,,N)

4 stop (5,,L) (0,,N)

5 (5,a,L) (5,b,L) (0,,R)

0ababa 1baba b1aba ba1ba bab1a baba1

bab3a ba5b b5ab 5bab 5bab 0bab

2ab a2b ab2 a4b 5a 5a 0a 1 3 0

Page 30: Języki i automaty  część  5

30

Przykład (Maszyna M4)

={a} T={a, } Q={0,1} F={0}

Funkcja przejścia: a

0 (1,a,R)

stop

1 (0,a,R)

stop

Jak działa tak zdefiniowana MT?

0aaa a1aa aa0a aaa1

0aaaa a1aaa aa0aa aaa1a

MT nie akceptuje słowa aaa bo 1 nie jest stanem akceptującym.

aaaa0

MT akceptuje słowa języka {a2n: nN}.

Page 31: Języki i automaty  część  5

31

Przykład (maszyna M5)

a

0 (1,a,R) stop

1 (0,a,R) (1,,R)

Jak działa tak zdefiniowana MT?

0aaa a1aa aa0a aaa1

0aaaa a1aaa aa0aa aaa1a

Dla słów złożonych z nieparzystej liczby liter a maszyna nie zatrzyma się!!!

aaaa0

Podobnie jak poprzednia MT maszyna ta akceptuje słowa języka L={a2n: nN}.

Rozpatrzmy teraz MT z nieco inną funkcją przejścia:

Rozpatrzmy jednak słowo nie należące do tego zbioru:

aaa1 aaa1 …

Page 32: Języki i automaty  część  5

32

MT M5 mimo, że rozpoznaje słowa języka L to dla słów nie należących do tego języka nigdy nie zatrzyma się.

Załóżmy, że obserwujemy MT i interesuje nas tylko (nie znamy funkcji przejścia) czy maszyna zatrzyma się i w jakim będzie wówczas stanie.

Jeżeli obserwujemy maszynę M5 to z faktu, że maszyna jeszcze nie zatrzymała się nie możemy wyciągnąć jednoznacznego wniosku:

Problem stopu

• albo słowo jest bardzo długie

• albo maszyna „zapętliła się”

Aby rozróżnić te dwie sytuacje wprowadzamy następującą definicję:

Page 33: Języki i automaty  część  5

33

Definicja 5.1

Mówimy, że język L jest rekurencyjnie przeliczalny jeżeli istnieje MT, która go akceptuje.

Mówimy, że język L jest rekurencyjny jeżeli istnieje MT, która go akceptuje i która zawsze zatrzymuje się.

Jeżeli chcemy pokazać, że język jest rekurencyjny musimy znaleźć MT, która rozpoznaje go i zatrzymuje się dla dowolnych słów. Jeżeli chcemy pokazać, że język jest rekurencyjnie przeliczalny musimy znaleźć MT, która rozpoznaje go i zatrzymuje się dla słów, które rozpoznaje.

Na czym polega różnica?

Page 34: Języki i automaty  część  5

34

Wszystkie języki

nad alfabetem

Języki rekurencyjnie przeliczalne

Twierdzenie 5.1

Każdy język bezkontekstowy jest językiem rekurencyjnym.

Z punktu widzenia naszych wcześniejszych rozważań ważne jest następujące twierdzenie.

Podsumowanie

Języki rekurencyjne

Języki bezkontekstowe

Języki regularne