Języki formalne i automaty Ćwiczenia Autor: Marcin Orchel Spis treści Spis treści... Wstęp teoretyczny... 2 Wprowadzenie do teorii języków formalnych... 2 Gramatyki... 5 Rodzaje gramatyk... 7 Zadania... 9 Zadanie na 3.0... 9 Zadanie na 4.0... 9 Zadanie na 5.0... 9 Przykładowe rozwiązania... 9
Wstęp teoretyczny Wprowadzenie do teorii języków formalnych Alfabet skończony zbiór symboli, np. A = {a, b, c} Słowo lista symboli z alfabetu, oznaczana jako s s s 2 n, gdzie i s to kolejne symbole w słowie s i A dla i {,, n} np. aabbcca, n jest długością słowa Język formalny zbiór słów, np. {aab, aabbccc, accb} Dwa języki formalne są identyczne, kiedy zawierają te same słowa. Syntaktyka i semantyka języka. Syntaktyka języka: mechaniczne przekształcanie napisów. Semantyka języka: branie pod uwagę znaczenia poszczególnych napisów. Teoria języków formalnych zajmuje się głównie syntaktyką języka. Specyfikacja języka formalnego składa się ze specyfikacji alfabetu oraz słów należących do tego języka. Specyfikacja w języku naturalnym: Alfabet {0,,2,3,4,5,6,7,8,9,+,=} Język, opisujący syntaktykę równania z działaniem dodawania, przykładowe słowa języka: +2 = 3, +4=345, +3+4+5=24, =3. Przykładowe słowa nie należące do języka: +2==3, ++=3, +2=3=2, +=3. a) Każde słowo języka zawiera dokładnie jeden znak = b) Sąsiadem znaku + jest symbol ze zbioru {0,,2,3,4,5,6,7,8,9} Język ten zawiera nieskończenie wiele słów. Przykład 2: Alfabet - {a, b} Do języka należą wszystkie słowa, które mają tą samą liczbę symboli a i b. Przykład słów należących do języka: ab, aabb, abab. Przykład 3: Alfabet - {a, b} Do języka należą wszystkie słowa składające się z symboli a i b, w tym słowo puste (ε). Zbiór tych słów oznaczamy jako {a,b}*.
Podczas konkatenacji słowa pustego ze słowem s zachodzi: sε = s. Przykład 4: Alfabet - {a, b} Do języka należą wszystkie słowa składające się z symboli a i b, bez słowa pustego. Zbiór tych słów oznaczamy jako {a,b} +. Przykład 5: Alfabet - {a, b} Do języka należą słowa ze zbioru {a n n >= 0} dla n naturalnego. a n oznacza słowo składające się z symbolu a powtórzonego n razy, a 0 oznacza słowo puste. Formalizmy specyfikacji języków.. Język formalny może być wyspecyfikowany za pomocą gramatyki. 2. Język formalny wyspecyfikowany za pomocą wyrażenia regularnego. 3. Język formalny jako zbiór słów akceptowanych przez automat. 4. Język to zbiór słów, dla których pewna procedura decyzyjna zwróci odpowiedź TAK. Główne pytania odnośnie tych formalizmów. Czy dany formalizm może opisywać wszystkie języki, które opisuje inny formalizm? Czy może opisywać jeszcze inne języki? 2. Jak trudna jest decyzja, czy dane słowo należy do danego języka? 3. Jak trudne jest stwierdzenie czy dwa języki opisane przez ten sam lub różne formalizmy to te same języki? Operacje, które można wykonywać na językach. Dane dwa języki nad tym samym alfabetem. Możliwe operacje: unia języków, przecięcie języków, negacja języka, złożenie języków - zbiór wszystkich słów, których pierwsza część pochodzi z pierwszego języka, a druga z drugiego języka, odwracanie języka - każde słowo jest odwracane Zamknięcie klasy języków na operacje. Klasa języków jest zamknięta na pewną operację, jeśli język, który jest wynikiem tej operacji należy również do tej klasy języków. Przykład:
Alfabet {a,b} Przykładowa klasa języków: wszystkie języki, które zawierają tyle samo symboli a, co b. Przykładowe języki: {aa, aabb}, {bb, abab, abba},. Taka klasa zamknięta jest na operacje unii, przecięcia i złożenia języków, oraz na odwracanie języka. Nie jest zamknięta na negacje języka. Operacja homomorfizmu. Dane są dwa alfabety A oraz A 2. Homomorfizm na zbiorze A * to funkcja taka, że dla każdego u, v należącego do A *. Przykład * h : A A * 2 ( uv) h( u ) h( v) h = () Mamy dwa alfabety: {a, b}, oraz {c, d}. Operację h na słowie definiujemy jako zastąpienie każdego symbolu a symbolem c, oraz każdego symbolu b symbolem d w tym słowie. Sprawdźmy czy jest spełniony warunek. Przykładowo: u = ab, v = aabb h(abaabb) =h(ab)h(aabb) cdccdd=cdccdd Przykład 2 Mamy dwa identyczne alfabety: {a, b}, {a, b} Przykład operacji, która nie jest homomorfizmem: definiujemy operację h na słowie jako odwrócenie tego słowa. u = ab, v = aabb h(abaabb) =h(ab)h(aabb) bbaaba=babbaa Jak widać dla powyższego przykładu warunek homomorfizmu nie jest spełniony.
Gramatyki Gramatyka lista składająca się z: skończonego zbioru symboli nieterminalnych, oznaczanych jako N skończonego zbioru symboli terminalnych, który nie ma elementów wspólnych z N, oznaczany jako T skończonego zbioru P produkcji. Każda produkcja to napis: + ( T N ) ( T N ) * Symbol S N nazywany symbolem startowym Gramatyka służy do definiowania języka formalnego. Przykład gramatyki: T = {a,b}. Produkcje gramatyki:. S asb 2. S ba Sposób wyprowadzania słów języka zdefiniowanego za pomocą gramatyki:. Wejściowym napisem jest S. 2. Wybieramy dowolną produkcję. 3. Dokonujemy podstawienia w aktualnym napisie zgodnie z wybraną produkcją. 4. Jeśli powstały napis nie zawiera symboli nieterminalnych, to kończymy działanie. 5. Jeśli powstały napis zawiera symbole nieterminalne, to idziemy do kroku 2. Przykład wyprowadzenia słów: a) S ba 2 b) S asb aasbb aababb 2 Zbiór wszystkich słów wyprowadzalnych przez tą gramatykę może być zapisany w następującej postaci: gdzie n jest liczbą naturalną. n n { a bab n 0},
Przykład 2 T = {a,b} Produkcje gramatyki:. S asb 2. S ε Przykład wyprowadzenia słów: a) S ε b) S asb aasbb aaabbb 2 Zbiór wszystkich słów wyprowadzalnych przez tą gramatykę może być zapisany w następującej postaci: gdzie n jest liczbą naturalną. Przykład 3 N={S, B}, T={a,b,c}. S absc 2. S abc 3. Ba ab 4. Bb bb Przykładowe wyprowadzenia słów: a) S abc b) S absc ababcc aabbcc aabbcc 2 3 4 n n { a b n 0}, Powyższa gramatyka definiuje język: Przykład 4: Język słów postaci: n n n { a b c } L = n n m { a b m, n } Gramatyka dla tego języka: N={S, A, B}, T={a,b}
. S aa 2. A aa 3. A bb 4. B bb 5. B ε Rodzaje gramatyk Hierarchia Chomskiego. Gramatyki typu 0. Gramatyki nieograniczone. Dopuszczalne produkcje postaci: α β gdzie α i β to dowolne łańcuchy symboli terminalnych i nieterminalnych z warunkiem, aby Gramatyki typu. Gramatyki kontekstowe. Dopuszczalne produkcje postaci: α ε. α Aβ α γ β gdzie A jest nieterminalem, α, β, γ są dowolnymi łańcuchami symboli terminalnych i nieterminalnych z warunkiem, że γ ε. Dopuszczona jest ponadto produkcja S ε, jeśli S nie występuje po prawej stronie żadnej z produkcji. Gramatyki typu 2. Gramatyki bezkontekstowe. Dopuszczalne produkcje postaci: A γ gdzie A jest nieterminalem, a γ jest dowolnym łańcuchem terminali i nieterminali. Gramatyki typu 3. Gramatyki regularne. Gramatyka regularna to gramatyka prawostronnie liniowa lub lewostronnie liniowa. Gramatyka prawostronnie liniowa dopuszcza produkcje postaci:. A a 2. A ab Gramatyka lewostronnie liniowa dopuszcza produkcje postaci:. A a 2. A Ba gdzie a jest dowolnym łańcuchem terminali. Dwie gramatyki są równe, gdy maja te same zbiory symboli nieterminalnych, terminalnych i produkcji.
Twierdzenie: G G 0 G3 G 2 Zauważmy, że gramatyka typu 2 nie zawiera się we wszystkich przypadkach w gramatyce typu. Dla przykładu gramatyka typu 2:. S Aa 2. A ε nie zawiera się w zbiorze gramatyk typu, ponieważ druga produkcja nie spełnia warunku gramatyki kontekstowej.
Zadania Do zadań znajdują się odpowiedzi na stronie http://kompilatory.agh.edu.pl/, proszę jednak o nie korzystanie z odpowiedzi przed rozwiązaniem zadania, jedynie dla sprawdzenia poprawności wyniku. Zadanie na 3.0 Należy rozwiązać: zadania.2,.4 ze strony http://kompilatory.agh.edu.pl/pages/ta-zadania/%20zadania0- gramatyki.htm, w każdym zadaniu podać ponadto najwęższy typ gramatyki zadanie 2.2 ze strony http://kompilatory.agh.edu.pl/pages/ta-zadania/%20zadania02- jezyki.htm, w każdym zadaniu podać ponadto najwęższy typ gramatyki Zadanie na 4.0 Napisać gramatykę, która akceptuje słowa będące popularnymi polskimi nazwiskami. Zadanie na 5.0 Napisać program w Javie, który wczytuje produkcje, rozpoznaje typ gramatyki, oraz generuje wybraną ilość słów języka. Napisać omówienie programu. Przykładowe rozwiązania Rozwiązanie zadania. ze strony http://kompilatory.agh.edu.pl/pages/ta-zadania/%20zadania0- gramatyki.htm: Temat zadania: Podać język generowany przez gramatykę: S as bs aa A aa ba ab B ab bb ε. Bierzemy pod uwagę produkcje S as oraz S bs. Produkcje razem stosowane prowadzą do łańcucha: * { a, b} S 2. Następnie stosujemy produkcję S aa i otrzymujemy: * { a, b} aa 3. Zastosowanie produkcji A aa oraz A ba prowadzi do: 4. Zastosowanie produkcji A ab prowadzi do: * * { a, b} a{ a, b} A * * { a, b} a{ a, b} ab
5. Zastosowanie produkcji B ab oraz B bb prowadzi do: * * * { a, b} a{ a, b} a{ a, b} B 6. I ostatecznie zastosowanie produkcji B ε prowadzi do: { a, b} * a{ a, b} * a{ a, b} * Słownie powyższy wynik, może być opisany jako dowolny ciąg symboli a i b, w którym na pewno wystąpią dwa symbole a. Pozostało stwierdzić jaki to jest typ gramatyki: Sprawdzamy czy jest to typ. Przykładowo produkcja S as spełnia wymagania gramatyki typu, dla α = ε, β = ε, γ = as, ale produkcja B ε nie spełnia wymogów typu. Jest to natomiast gramatyka typu 2. Jest to również gramatyka typu 3, ponieważ jest gramatyką prawostronnie liniową. Rozwiązanie zadania 2. ze strony http://kompilatory.agh.edu.pl/pages/ta-zadania/%20zadania02- jezyki.htm: Podać gramatykę generującą poniższy język: {ab, bbc, ccca, aaaab, bbbbbc, cccccca, aaaaaaab, } Jeśli zinterpretujemy ten zbiór jako zawierający wszystkie słowa z alfabetu {a,b,c} to gramatyka będzie następująca: S as bs cs ε Jednakże w zadaniu chodzi o znalezienie pewnej prawidłowości w tym zbiorze, którą autor zadania miał na myśli. W tym wypadku można zauważyć następujące prawidłowości: Każde słowo składa się z dwóch podsłów, każde z nich składa się z jednego rodzaju symbolu, i są one różne w obrębie słowa, drugie podsłowo ma zawsze długość, występują 3 sekwencje symboli w słowie: a i b, b i c, c i a. W sekwencji symboli a i b zauważmy, że liczba symboli a wynosi + 3n. W sekwencji b i c liczba symboli b wynosi: 2 + 3n. W sekwencji c i a liczba symboli wynosi: 3 + 3n. Drugim krokiem po znalezieniu prawidłowości w zbiorze jest zapisanie tego w formie gramatyki. Mamy 3 rodzaje sekwencji, w każdej sekwencji na końcu występuje literka a lub b lub c, każda sekwencja ma różne początki, a więc możemy zapisać: S Ab Bc Ca Następnie definiujemy początki sekwencji zgodnie ze znalezionymi wzorami. Zapisanie sekwencji symbolu a, który występuje + 3n razy jest następujące: A a aaaa,
analogicznie zapisujemy pozostałe sekwencje: B bb bbbb, C ccc cccc. Ostatecznie gramatyka ma postać: S Ab Bc Ca A a aaaa B bb bbbb C ccc cccc Należy jeszcze określić typ tej gramatyki: Jest to gramatyka typu, jest to również gramatyka typu 2. Nie jest to jednak gramatyka typu 3 ponieważ występują w niej produkcje lewostronnie liniowe i prawostronnie liniowe.