Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Wstęp do programowania Wykład 9 Gramatyki i języki formalne.

Podobne prezentacje


Prezentacja na temat: "Wstęp do programowania Wykład 9 Gramatyki i języki formalne."— Zapis prezentacji:

1 Wstęp do programowania Wykład 9 Gramatyki i języki formalne

2 Języki naturalne vs. języki formalne Języki naturalne, czyli języki którymi posługują się ludzie, są niejednoznaczne. Wiele pozostawiają interpretacji. Często dwie osoby różnie interpretują to samo zdanie. Komunikacja z komputerem jest o tyle trudniejsza, że nie pozostawia miejsca na interpretacje, czy domysły. Dlatego stworzono specjalne mechanizmy do tworzenia języków formalnych, którymi w szczególności są języki programowania.

3 Struktura języka formalnego Podstawą każdego języka formalnego jest alfabet, którego elementy nazywane są symbolami. Cechą charakterystyczną języków, w szczególności języków formalnych, jest to, że pewne napisy (ciągi symboli) rozpoznawane są jako poprawne i dobrze zbudowane. O tych napisach mówimy, że należą do języka. O tym, czy dany napis należy do języka decyduje gramatyka tego języka. Gramatyka języka jest systemem formalnym, który w oparciu o pewne reguły pozwala wygenerować wszystkie napisy należące do języka.

4 Przykład gramatyki zdanie ―> podmiot orzeczenie podmiot ―> koty podmiot ―> psy orzeczenie ―> jedzą orzeczenie ―>śpią Zdanie składa się z podmiotu i występującego po nim orzeczenia. Podmiot jest albo słowem „koty” albo słowem „psy”. Orzeczenie jest albo słowem „śpią” albo słowem „jedzą”. zdanie, podmiot i orzeczenie to symbole pomocnicze, koty, psy, jedzą i śpią to symbole końcowe.

5 Przykład gramatyki zdanie ―> podmiot orzeczenie podmiot ―> koty podmiot ―> psy orzeczenie ―> jedzą orzeczenie ―>śpią Każdy powyższy wiersz nazywamy produkcją lub regułą. zdanie to symbol początkowy, zwany też aksjomatem, gramatyki. Język gramatyki, to każdy ciąg symboli końcowych, które można wyprowadzić z symbolu początkowego stosując produkcje. Język generowany przez powyższą gramatykę: „koty jedzą”, koty śpią”, psy jedzą”, psy śpią.

6 Definicje Słowem nad alfabetem X nazywamy dowolny ciąg, którego elementy należą do X. Dopuszczamy słowo puste, czyli ciąg symboli o długości 0. Słowo puste oznaczamy przez ε. Zbiór wszystkich słów nad alfabetem X (łącznie ze słowem pustym) oznaczamy przez X*.

7 Formalna definicja gramatyki Gramatyką formalną nazywamy czwórkę G=, gdzie T jest niepustym zbiorem symboli końcowych (terminalnych) N jest niepustym zbiorem symboli pomocniczych (nieterminalnych) P jest zbiorem produkcji (reguł) S jest wyróżnionym elementem zbioru N, symbolem początkowym lub aksjomatem. Produkcja jest wyrażeniem postaci u ―> v gdzie u jest elementem zbioru (TﮞN)*\{ε}, natomiast v jest elementem zbioru (TﮞN)*.

8 Język generowany przez gramatykę Słowo s jest wyprowadzalne w gramatyce G= jeśli s jest elementem zbioru T* s można wyprowadzić z symbolu początkowego S stosując produkcje ze zbioru P. Zbiór wszystkich słów wyprowadzalnych w gramatyce G nazywamy językiem generowanym przez G i oznaczamy przez L(G).

9 Przykład Niech G=, gdzie T={a}, N={S}, P={S ―>a, S ―>Sa}. L(G) ={a, aa, aaa,…} = {a}*\ {ε}. Niech G=, gdzie T={a,b}, N={S}, P={S ―>ab, S ―>aSb}. L(G)={ab, aabb,aaabbb,..}={a n b n : n≥1}.

10 Klasyfikacja gramatyk (Chomsky) Wszystkie gramatyki można podzielić na kilka klas w zależności od warunków nałożonych na występujące w nich produkcje. Gramatyki klasy 0 Nie nakładamy żadnych specjalnych warunków na produkcje, tzn. każda produkcja jest postaci u ―> v gdzie u (TﮞN)*\{ε}, natomiast v (TﮞN)*.

11 Klasyfikacja gramatyk (Chomsky) Gramatyki klasy 1 (lub gramatyki kontekstowe) Produkcje mają postać uAw ―> ubw, gdzie u,w (TﮞN)*, A N, b (TﮞN)*\{ε}. Gramatyki klasy 2 (lub gramatyki bezkontekstowe) Produkcje mają postać A ―> b, gdzie A N, b (TﮞN)*\{ε}. Gramatyki klasy 3 (lub gramatyki regularne) Wszystkie produkcje mają postać A ―>bB (prawostronnie regularne) lub wszystkie produkcje mają postać A ―>Bb (lewostronnie regularne), gdzie A N, B Nﮞ{ε} oraz b T*\{ε}.

12 Relacje między klasami gramatyk Gramatyki klasy 0 Gramatyki kontekstowe Gramatyki regularne Gramatyki bezkontekstowe

13 Problem należenia Dla danej gramatyki G i słowa s stwierdzić, czy s L(G). Powyższy problem jest rozstrzygalny dla języków klasy 1, 2 i 3. Nie jest rozstrzygalny dla języków klasy 0.

14 Notacja BNF (Backus-Naur Form) Służy do zapisu produkcji gramatyk bezkontekstowych. Została wprowadzona w latach 50 ubiegłego wieku przez Johna Backusa i była po raz pierwszy użyta do opisu języka programowania Algol 60 przez Petera Naura.

15 Notacja BNF Symbole pomocnicze (nieterminalne) są to dowolne napisy ujęte w nawiasy. Symbole terminalne tonapisy nie ujęte w nawiasy. Symbol ―> występujący w produkcjach zastępujemy symbolem ::=. Symbol (pomocniczy) występujący w pierwszej produkcji jest symbolem początkowym (aksjomatem).

16 Przykład zdanie ―> podmiot orzeczenie podmiot ―> koty podmiot ―> psy orzeczenie ―> jedzą orzeczenie ―>śpią ::= ―> koty ―> psy ―> jedzą ―> śpią

17 Notacje Zamiast ―> koty ―> psy ―> jedzą ―> śpią możemy napisać ―> koty | psy ―> jedzą | śpią {a} oznaca, że napis a może wystąpić dowolną skońconą liczbę razy po sobie (w szczególności 0 razy).

18 Przykład Identyfikator: ciąg liter i cyfr zaczynający się od litery (za literę uważamy również symbol _ ). Gramatyka: ::= { | } ::= a|b|c|d|…|z|A|B|…|Z|_ ::= 0|1|2|3|4|5|6|7|8|9

19 Przykład Zdefiniować L={a n b m a n b m : n,m>0}. ::= a b | a b ::= ba| b a

20 Pojęcie wywodu Niech G=. Wywodem słowa s w gramatyce G nazywamy ciąg słów S, S 1, … S k, s, gdzie każde słowo ciągu poza S powstaje z poprzedniego w wyniku zastosowania jednej z produkcji ze zbioru P. Powyższe wyprowadzenie oznaczamy napisem S => S 1 => S 2 =>…. => S k =>s

21 Przykład Niech G=, gdzie T={a,b}, N={S}, P={S ―>ab, S ―>aSb}. Wywód słowa aaabbb: S =>aSb => aaSbb => aaabbb

22 Przykład (c.d.) P={S ―>ab, S ―>aSb} Jak pokazać, że L(G)={a n b n : n≥1}? Dla każdego n≥1 można wyprowadzić a n b n. Dowód: n-1 razy S ―>aSb i raz S ―>ab. Nic innego nie można wyprowadzić. Dowód: Jedyna możliwa sekwencja produkcji prowadząca do słowa składającego się z symboli terminalnych (a i b) to k razy produkcja S ―>aSb oraz raz produkcja S ―>ab.

23 Drzewo wywodu S aS b a b S a b S ―>ab, S ―>aSb

24 Niejednoznaczność ::=( )| + | * |a|b|c a*b+c W W W * W W + W a W + W W * W c b c a b a* (b+c) (a*b) +c

25 Języki regularne Języki regularne są to języki generowane przez gramatyki regularne. Każda gramatyka lewostronnie regularna może być przekształcona na równoważną jej gramatykę prawostronnie regularną i odwrotnie. Języki regularne mają wiele „dobrych” własności. W szczególności bardzo łatwo stwierdzić, czy dany napis należy do języka generowanego przez gramatykę regularną. Gramatyka regularna jest jednym ze sposobów definiowania języków regularnych. Innym sposobem są wyrażenia regularne.

26 Wyrażenia regularne Niech V będzie skończonym alfabetem. Wyrażenia regularne nad V tworzymy według następującego schematu: Ø i ε są wyrażeniami regularnymi. Każdy symbol alfabetu jest wyrażeniem regularnym. Jeśli A i B są wyrażeniami regularnymi, to A|B i AB są wyrażeniami regularnymi. Jeśli A jest wyrażeniem regularnym, to A* jest wyrażeniem regularnym. Żaden inny napis nie jest wyrażeniem regularnym.

27 Języki definiowane przez wyrażenia regularne Ø reprezentuje język pusty. ε reprezentuje język {ε}. Symbol a z alfabetu reprezentuje język {a}. Jeśli A i B są wyrażeniami regularnymi reprezentującymi języki LA i LB, to A|B reprezentuje sumę LA ﮞLB, AB reprezentuje wszystkie ciągi znaków powstałe przez dopisanie do ciągu z LA ciągu z LB. Jeśli A jest wyrażeniem regularnym reprezentującym język LA, to A* reprezentuje zbiór ciągów znaków powstały przez wypisywanie dowolną liczbę razy elementów zbioru LA i dodatkowo słowo puste.

28 Przykłady V={a,b,c} Wyrażenie Język a {a} ab|bc {ab,bc} ab*c {ac, abc, abbc, abbbc,…} a(bc)*a {aa, abca, abcbca,…

29 Problem Dane jest wyrażenie regularne A. Skonstruować algorytm rozstrzygający, czy dane słowo należy do języka reprezentowanego przez A.

30 Diagramy WyrażenieDiagram a a ABAB A|B A*A A B

31 Przykład aa*b {ab, aab, aaab,aaaab, …} a a b

32 Funkcja w C++ bool czy_nalezy(string wyr) { char ch: ch=wyr[0]; if (ch!='a') return false; else i++; ch=wyr[i]; while (ch=='a'){i++; ch=wyr[i];} if (ch !='b') return false; else i++; if (i==wyr.length()) return false; else return true; }


Pobierz ppt "Wstęp do programowania Wykład 9 Gramatyki i języki formalne."

Podobne prezentacje


Reklamy Google