• Nie Znaleziono Wyników

1Wstęp Gramatyki

N/A
N/A
Protected

Academic year: 2021

Share "1Wstęp Gramatyki"

Copied!
14
0
0

Pełen tekst

(1)

Gramatyki

Marcin Orchel

1 Wstęp

1.1 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 s1s2. . . sn, gdzie si to kolejne symbole w słowie

si∈ A (1)

dla i ∈ {1, . . . , n}, n jest długością słowa np. aabbcca. 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.

Zbiór wszystkich łańcuchów nad alfabetem Σ oznaczamy Σ, np. dla Σ = {a}, mamy Σ= {ε, a, aa, . . .}.

Przykład 1. Alfabet – {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, =}. Język, opisujący syntaktykę rów- nania z działaniem dodawania, przykładowe słowa języka: 1 + 2 = 3, 1 + 4 = 345, 1 + 3 + 4 + 5 = 124, 1 = 3. Przykładowe słowa nie należące do języka: 1 + 2 == 3, 1 + +1 = 3, 1 + 2 = 3 = 2, 1+ = 3. a) Każde słowo języka zawiera dokładnie jeden znak =. b) Sąsiadem znaku + jest symbol ze zbioru 0,1,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 . (2)

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}+.

(2)

Przykład 5. Alfabet - {a, b}. Do języka należą słowa ze zbioru an|n ≥ 0 dla n natu- ralnego. an oznacza słowo składające się z symbolu a powtórzonego n razy, a0 oznacza słowo puste.

Formalizmy specyfikacji języków.

• Język formalny może być wyspecyfikowany za pomocą gramatyki.

• Język formalny wyspecyfikowany za pomocą wyrażenia regularnego.

• Język formalny jako zbiór słów akceptowanych przez automat.

• 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?

• Jak trudna jest decyzja, czy dane słowo należy do danego języka?

• Jak trudne jest stwierdzenie czy dwa języki opisane przez ten sam lub różne for- malizmy 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 pierw- szego języka, a druga z drugiego języka,

• odwracanie języka - każde słowo jest odwracane

Domknięcie (Kleene’ego) języka L zapisywane jako L to zbiór ciągów, które uzy- skujemy przez konkatenację języka L ze sobą zero lub więcej razy. L0 jest zdefiniowana jako {ε}, Li jest zdefiniowane jako Li−1L. Domknięcie dodatnie zapisywane jako L+ to domknięcie bez L0, czyli ε nie należy do L+, jeśli nie należy do samego L.

Przykład 6. Dla L = {A, B, . . . , Z, a, b, . . . , z} oraz D = {0, 1, . . . , 9}, D+ będzie zbio- rem wszystkich skończonych ciągów złożonych z jednej lub więcej cyfr.

Zamknięcie klasy języków na operacje. Klasa języków jest zamknięta na pewną ope- rację, jeśli język, który jest wynikiem tej operacji należy również do tej klasy języków.

(3)

Przykład 7. 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 A1oraz A2. Homomorfizm na zbiorze A1 to funkcja

h : A1 → A2 (3)

taka, że

h (uv) = h (u) h (v) (4)

dla każdego u, v należącego do A1.

Przykład 8. 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 (4). Przykładowo: u = ab, v = aabb, h(abaabb) = h(ab)h(aabb), cdccdd = cdccdd

Przykład 9. 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 (4) homomorfizmu nie jest spełniony.

1.2 Gramatyki

Gramatyka – lista (N, T, P, S) 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 ) (5)

• Symbol S ∈ N nazywany symbolem startowym.

Gramatyka służy do definiowania języka formalnego.

Przykład 10. Przykład gramatyki: T = {a, b}. Produkcje gramatyki:

1. S → aSb 2. S → ba

(4)

Sposób wyprowadzania słów języka zdefiniowanego za pomocą gramatyki. Dla pro- dukcji α → β możemy bezpośrednio wyprowadzić nowy łańcuch i piszemy γαδ → γβδ.

Domknięcie zwrotne i przechodnie relacji =⇒, to =⇒. Relacja ta to jest wyprowadzenie, i jest alternatywnie rozumiana, jeśli możemy łańcuch wyprowadzić w wyniku stosowania zera lub więcej produkcji z P . Mamy

L (G) =nw|w ∈ T∧ S=⇒ w o (6) Czyli łańcuch w należy do L(G), jeśli spełnione są dwa następujące warunki: w składa się wyłącznie z symboli końcowych, w jest wyprowadzalny z S. Łańcuch α złożony z symboli terminalnych i nieterminalnych nazywamy formą zdaniową, jeśli S =⇒ α. Przykład 11. Przykład wyprowadzenia słów:

• S =

2 ba

• S =

1 aSb =

1 aaSbb =

2 aababb

Zbiór wszystkich słów wyprowadzalnych przez tą gramatykę może być zapisany w nastę- pującej postaci:

{anbabn|n ≥ 0} , (7)

gdzie n jest liczbą naturalną.

Przykład 12. T = {a, b}. Produkcje gramatyki:

• S → aSb

• S → ε

Przykład wyprowadzenia słów:

• S =⇒ ε

• S =

1 aSb =

1 aaSbb =

1 aaaSbbb =

2 aaabbb.

Zbiór wszystkich słów wyprowadzalnych przez tą gramatykę może być zapisany w nastę- pującej postaci:

{anbn|n ≥ 0} , (8)

gdzie n jest liczbą naturalną.

Przykład 13. N = {S, B}, T = {a, b, c},

1. S → aBSc 2. S → abc 3. Ba → aB

(5)

4. Bb → bb

Przykładowe wyprowadzenia słów:

• S =⇒ abc

• S =

1 aBSc =

2 aBabcc =

3 aaBbcc =

4 aabbcc Powyższa gramatyka definiuje język:

L = {anbncn|n ≥ 1} (9)

Przykład 14. Język słów postaci:

{anbm|m, n ≥ 1} (10)

Przykładowe gramatyki dla tego języka: N = {S, A, B}, T = {a, b}

1. S → aA 2. A → aA 3. A → bB 4. B → bB 5. B → ε 1. S → AB 2. A → AB 3. B → b 4. A → AA 5. A → a 1. S → SB 2. S → AS 3. A → a 4. B → b 5. S → AB 1. S → aS 2. S → aB

(6)

3. B → bB 4. B → b 1. S → aS 2. S → Sb 3. S → ab

1.3 Rodzaje gramatyk, hierarchia Chomskiego

• Gramatyki typu 0. Gramatyki nieograniczone. Dopuszczalne produkcje postaci:

α → β (11)

gdzie α i β to dowolne łańcuchy symboli terminalnych i nieterminalnych z warun- kiem, aby α 6= ε.

Czy gramatyka typu 0 może mieć same terminale po lewej stronie produkcji? Wg powyższej definicji możemy mieć same terminale po lewej stronie. Czasami grama- tyka definiowana jest w ten sposób, że musi być co najmniej jeden nieterminal po lewej stronie. Jak wyglądałyby wyprowadzenia w takiej gramatyce, gdzie mamy produkcję z samymi terminalami po lewej stronie? Wg definicji (6) wykonywaliby- śmy również podstawienia dla słowa składającego się z samych terminali. Do języka zgodnie z tą definicją należą wszystkie słowa, które można wyprowadzić składające się wyłącznie z terminali. Wyprowadzenie jest zdefiniowane jako domknięcie prze- chodnie, albo zastosowanie zero lub więcej razy produkcji, więc słowa składające się z terminali w trakcie jakiegoś wyprowadzenia również. Przykład Ex. 15

• Gramatyki typu 1. Gramatyki kontekstowe. Na produkcje postaci α → β nakłada- my warunek, że β ma być co najmniej tak długie jak α. Postać normalna dla tej gramatyki to:

αAβ → αγβ , (12)

gdzie A jest nieterminalem, α, β, γ są dowolnymi łańcuchami symboli terminalnych i nieterminalnych z warunkiem, że γ 6= ε.

Jeśli dopuścimy dodatkowo produkcję S → ε, jeśli S nie występuje po prawej stronie żadnej z produkcji (z tego wynika, że słowo puste może dodatkowo nale- żeć do tego języka), to możemy wtedy powiedzieć, że gramatyki kontekstowe są nadzbiorem właściwym gramatyk bezkontekstowych.

• Gramatyki typu 2. Gramatyki bezkontekstowe. Dopuszczalne produkcje postaci:

A → γ , (13)

gdzie A jest nieterminalem, a γ jest dowolnym łańcuchem terminali i nieterminali ((N ∪ T )).

(7)

• Gramatyki typu 3. Gramatyki regularne. Gramatyka regularna to gramatyka pra- wostronnie liniowa lub lewostronnie liniowa. Gramatyka prawostronnie liniowa do- puszcza produkcje postaci:

1.

A → w (14)

2.

A → wB (15)

gdzie A i B to nieterminale, w jest dowolnym łańcuchem terminali (być może pustym). Gramatyka lewostronnie liniowa dopuszcza produkcje postaci:

1.

A → w (16)

2.

A → Bw . (17)

Język kontekstowy definiujemy jako język generowany przez gramatykę kontekstową, a więc taki, dla którego istnieje gramatyka kontekstowa z której możemy wygenerować ten język. Podobnie definiujemy język regularny jaki taki, dla którego istnieje gramatyka regularna. Język bezkontekstowy zdefiniujemy jako taki, dla którego istnieje gramatyka bezkontekstowa.

Twierdzenie 1.

L1 ( L0 (18)

Twierdzenie 2.

L2 ( L1 (19)

A więc języki bezkontekstowe są podzbiorem właściwym języków kontekstowych, a więc języki kontekstowe mogą mieć dodatkowo kontekst.

Twierdzenie 3.

L3 ( L2 (20)

Przykład 15. Przykład gramatyki nieograniczonej

1. S → aaS 2. S → ε 3. aa → b

Gramatyka ta generuje język postaci {a2kbl|k, l ∈ N}.

Przykład 16. Przykład gramatyki kontekstowej dla języka {anbmcndm|n, m > 0}

1. S → aAcd

(8)

2. S → aAc 3. A → B 4. B → bBZ 5. B → b 6. Zc → cZ 7. Zd → dd

Możemy zauważyć, że prawe strony są tej samej długości lub dłuższe od lewych stron.

Możliwa jest konwersja do postaci normalnej z kontekstem.

1.4 Lemat o pompowaniu dla języków regularnych

Wykorzystamy ten lemat do dowodzenia, że język nie jest językiem regularnym.

Twierdzenie 4 (Lemat o pompowaniu). Zakładając, że dany język jest językiem regular- nym, istnieje taka stała n, że dla każdego słowa w należącego do tego języka i dłuższego niż n, możemy to słowo podzielić na trzy części xyz, z czego n ≥ |xy| i |y| > 0, i dla każdego k całkowitego nieujemnego, xykz należy do tego języka.

Przykład 17. Dla języka L = {ambm|m ∈ N}, czyli wszystkich słów składających się z m znaków a, i następnie m znaków b. Dla słowa ambm takiego, że m > n, wtedy wiemy, że takie słowo będzie dłuższe niż n. Dzielimy takie słowo na xyz, tak aby był spełniony warunek |xy| ≤ n, a więc z tego wynika, że y leży w całości w am i następnie bierzemy przykładowo słowo xy2z, które to sprawdzamy czy należy do języka, czyli czy ma tyle samo a i b. Słowo oryginalne xyz miało tyle samo a i b, pokazaliśmy, że xy będzie miało tylko a, to jak zamienimy y na y2 i wiemy, że to jest ciąg niepusty to będziemy mieli więcej a, a więc ostatecznie będziemy mieli więcej a niż b, co oznacza, że to słowo nie należy do języka, a więc założenie o tym, że jest to język regularny jest nieprawdziwe.

Bardziej formalnie. Dla dowolnego n konstruujemy słowo w = ambm, gdzie m > n, wtedy |w| = 2m ≥ n. Jedyny możliwy podział słowa w zgodny z dwoma pierwszymi warunkami podanymi w lemacie to taki, że xy = ac, gdzie c ≤ m oraz |y| > 0. Wtedy z = am−cbm. Możemy oznaczyć za pomocą p i q długości x i y odpowiednio, czyli p+q = c, x = ap, y = aq, gdzie q > 0. Wybieramy k = 2 i konstruujemy słowo xyz = apa2qam−cbm. Liczba a w tym słowie to l(a) = p + 2q + m − c = c + q + m − c = q + m, liczba b w słowie to l(b) = m. Ponieważ q > 0, stąd l(a) > l(b).

Możemy sformułować ten lemat bardziej formalnie

Twierdzenie 5 (Lemat o pompowaniu). Jeśli język L jest językiem regularnym, to istnieje n ≥ 1, że ∀w ∈ L, |w| ≥ n istnieje podział w na podsłowa x, y, z ∈ Σ (w = xyz), taki, że

• y 6= ε

(9)

• |xy| ≤ n

• ∀k ≥ 0 xykz ∈ L

Nieformalnie, każde dostatecznie długie słowo w języku regularnym może być pompo- nowane. tzn. jego środkowa część może zostać powielona dowolną liczbę razy i powstałe słowo będzie należało do języka. Jeszcze bardziej formalnie

Twierdzenie 6.

(∀L ⊆ Σ) (regular (L) =⇒ ((∃n ≥ 1) (∀w ∈ L) ((|w| ≥ n) =⇒



(∃x, y, z ∈ Σ)w = xyz ∧|y| ≥ 1 ∧ |xy| ≤ n ∧ (∀k ≥ 0)xykz ∈ L (21) Należy zwrócić uwagę, że kwantyfikatory dla n oraz dla w są przed całą drugą im- plikacją, dlatego je zmieniamy podczas negacji następnika pierwszej implikacji. A więc wiemy, że implikacja jest prawdziwa, a zatem z prawdy nie może wynikać fałsz, a zatem jeśli pokażemy fałszywość następnika, wtenczas będziemy wiedzieli, że rozpatrywany ję- zyk nie jest regularny. W następniku mamy dwa kwantyfikatory oraz implikację, więc aby pokazać jego fałszywość, zmieniamy kwantyfikatory, i pokazujemy fałszywość implikacji, czyli zakładamy, że poprzednik jest prawdziwy, a to oznacza, że musimy dobrać takie w aby poprzednik był prawdziwy. To założenie jest pełnoprawne, bo mamy kwantyfikator istnieje dla w. Następnie pokazujemy fałszywość następnika, to znaczy, że dla każdego podziału jest spełnione zaprzeczenie, a więc że słowo nie należy do języka. Dla podzia- łów, gdzie nie są spełnione pozostałe warunki, mamy od razu alternatywę spełnioną więc taki przypadek jest trywialny.

Dla dowodu, że język nie jest językiem regularnym stosujemy metodę sporu z adwer- sarzem.

1. wybierz język L, którego nieregularności chcesz dowieść.

2. adwersarz wybiera n.

3. wybierz łańcuch w należący do L o odpowiedniej długości 4. adwersarz dzieli w na x, y, z spełniających odpowiednie warunki

5. sprzeczność pokazujemy tym, że dla dowolnych x, y, z wybranych przez adwersarza istnieje k, takie, że odpowiedni napis nie należy do L

Nasz wybór w tej grze odpowiada kwantyfikatorom uniwersalnym, a wybory adwersa- rza kwantyfikatorom egzystencjalnym. A więc dla dowolnych wartości adwersarza jak zdołamy pokazać sprzeczność to wygraliśmy.

Przykład 18. Sprawdzić ten lemat dla przykładu L = {an|n parzyste} (język regular- ny).

Przykład 19. Przykład języka spełniającego wyrażenie, a nie będącego językiem regu- larnym.

L = {abncn|n ≥ 0} ∪ {akw|k 6= 1 ∧ w ∈ Σnie zaczyna się od a} (22)

(10)

Mamy także twierdzenie bardziej restrykcyjne za pomocą którego mamy większe możliwości dowodowe.

Twierdzenie 7.

(∀L ⊆ Σ) (regular (L) =⇒ ((∃n ≥ 1) (∀uwv ∈ L) ((|w| ≥ n) =⇒

(∃x, y, z ∈ Σ)uwv = uxyzv ∧|y| ≥ 1 ∧ |xy| ≤ n ∧ (∀k ≥ 0)uxykzv ∈ L (23) Poprzedni lemat jest przypadkiem szczególnym, gdy u i v są puste.

Pokazać na przykładzie, że można tym bardziej restrykcyjnym lematem udowodnić nieregularność języka, a nie można było tego zrobić poprzednim lematem

L = {ambncn|m ≥ 1, n ≥ 1} (24) 1.5 Lemat o pompowaniu dla języków bezkontekstowych

Język bezkontekstowy definiujemy jako taki, dla którego istnieje gramatyka bezkontek- stowa.

Twierdzenie 8. Dla każdego języka bezkontekstowego, istnieje stała n, że dla każdego słowa z należącego do tego języka o długości co najmniej n, możemy podzielić to słowo na uvwxy w taki sposób, że

• przynajmniej jedno z v, x jest niepuste

• długość vwx wynosi co najwyżej n

• dla każdego k ∈ N słowo postaci uvkwxky, w szczególności uwy, należy do tego języka.

Dowodzimy, że jakiś język nie jest bezkontekstowy wg planu: zakładamy nie wprost, że język jest bezkontekstowy, z lematu bierzemy stałą n, budujemy słowo z, pokazujemy, że niezależnie od podziału słowa z na uvwxy dla pewnego k słowo uvkwxky nie należy do języka.

Twierdzenie 9.

(∀L ⊆ Σ) (context_f ree (L) =⇒ ((∃n ≥ 1) (∀z ∈ L) ((|z| ≥ n) =⇒

(∃u, v, w, x, y ∈ Σ)z = uvwxy ∧|vx| ≥ 1 ∧ |vwx| ≤ n ∧ (∀k ≥ 0)uvkwxky ∈ L

(25) Przykład 20. Dla języka L = {ambmcm|m > 0}, czyli wszystkich słów składających się z m znaków a, i następnie m znaków b, i następnie m znaków c. Dla słowa ambmcm takiego, że m > n, wtedy wiemy, że takie słowo będzie dłuższe niż n. Dzielimy takie słowo na uvwxy, tak aby był spełniony warunek |vwx| ≤ n, a więc z tego wynika, że x leży w całości w am, a więc mogą zachodzić przypadki, takie, że w vwx nie mogą wystąpić wszystkie 3 litery naraz. A więc

(11)

1.

vwx = ajj ≤ n (26)

2.

vwx = ajbsj + s ≤ n (27)

3.

vwx = bjj ≤ n (28)

4.

vwx = ajj ≤ n (29)

5.

vwx = bjcsj + s ≤ n (30)

6.

vwx = cjj ≤ n (31)

Dla każdego przypadku możemy zweryfikować, że słowo uviwxiy nie zawiera takie samej liczby wszystkich liter dla i 6= 1. Czyli np. uv2wx2y nie ma formy aibici. Słowo oryginalne uvwxy miało tyle samo a i b i c, pokazaliśmy, że vwx będzie miało tylko a dla pierwszego przypadku, to jak zamienimy v na v2 lub x na x2 i wiemy, że vx jest słowem niepustym to będziemy mieli więcej a, a więc ostatecznie będziemy mieli więcej a niż b i c, co oznacza, że to słowo nie należy do języka. Dla drugiego przypadku słowo oryginalne uvwxy miało tyle samo a i b i c, pokazaliśmy, że vwx będzie miało tylko a i b dla drugiego przypadku, to jak zamienimy v na v2 lub x na x2 i wiemy, że vx jest słowem niepustym to będziemy mieli więcej w sumie a i b, a więc ostatecznie będziemy mieli więcej a i b niż dwukrotnie c, co oznacza, że to słowo nie należy do języka. Podobnie należy sprawdzić pozostałe przypadki. A więc założenie o tym, że jest to język bezkontekstowy jest nieprawdziwe 1.6 Pytania

• Czy symbol i symbol+definiujemy dla zbiorów symboli, a więc np. dla alfabetu, czy także dla zbioru słów? W ogólności może być to dowolny zbiór słów, nieko- niecznie tylko zbiór symboli. W konspekcie na początku wprowadziliśmy gwiazdkę dla zbioru symboli, a później dla języków, a więc zbioru słów.

• Czy ε należy do terminali w definicji gramatyki? Dyskusja na ten temathttps://

cs.stackexchange.com/questions/85834/is-the-empty-string-a-terminal- symbol. ε nie należy do symboli terminalnych. Jest to łańcuch, który nic nie za- wiera, żadnych terminali i nieterminali. Symbol terminalny należy do alfabetu, a łańcuch pusty nie należy do alfabetu.

• Czy dla gramatyki regularnej łańcuch pusty ε może być po prawej stronie w (14)?

W definicji w nawiasie zostało dodane “być może pustym”, po prawej stronie (14) występuje “dowolny” łańcuch terminali, może być także pusty.

(12)

2 Zadania

2.1 Zadania dodatkowe

Do zadań znajdują się odpowiedzi na stroniehttp://kompilatory.agh.edu.pl/, proszę jednak o nie korzystanie z odpowiedzi przed rozwiązaniem zadania, jedynie dla spraw- dzenia poprawności wyniku.

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

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

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

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

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

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

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

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

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

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

6. Jedno losowo wybrane przez upel zadanie z zestawu 7 ze stronyhttp://kompilatory.

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

2.2 Przykładowe rozwiązania 2.2.1 Rozwiązanie zadania 1.1

Rozwiązanie zadania 1.1 ze stronyhttp://kompilatory.agh.edu.pl/pages/ta-zadania/

%20Zadania01-gramatyki.htm. Temat zadania: Podać język generowany przez grama- tykę:

1. S → aS|bS|aA 2. A → aA|bA|aB 3. B → aB|bB|ε

1. Bierzemy pod uwagę produkcje S → aS oraz S → bS. Produkcje razem stosowane prowadzą do łańcucha:

{a, b}S (32)

2. Następnie stosujemy produkcję S → aA i otrzymujemy:

{a, b}aA (33)

(13)

3. Zastosowanie produkcji A → aA oraz A → bA prowadzi do:

{a, b}a {a, b}A (34)

4. Zastosowanie produkcji A → aB prowadzi do:

{a, b}a {a, b}aB (35)

5. Zastosowanie produkcji B → aB oraz B → bB prowadzi do:

{a, b}a {a, b}a {a, b}B (36) 6. I ostatecznie zastosowanie produkcji B → ε prowadzi do:

{a, b}a {a, b}a {a, b} (37) 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 1. Przykładowo produkcja S → aS spełnia wymagania gramatyki typu 1, dla α = ε, β = ε, γ = aS, ale produkcja B → ε nie spełnia wymogów typu 1. Jest to natomiast gramatyka typu 2. Jest to również gramatyka typu 3, ponieważ jest gramatyką prawostronnie liniową.

2.2.2 Rozwiązanie zadania 2.1

Rozwiązanie zadania 2.1 ze stronyhttp://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, . . .} (38) Jeśli zinterpretujemy ten zbiór jako zawierający wszystkie słowa z alfabetu a,b,c to gra- matyka będzie następująca:

S → aS|bS|cS|ε (39)

Jednakże w zadaniu chodzi o znalezienie pewnej prawidłowości w tym zbiorze, którą au- tor 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 sym- bolu, i są one różne w obrębie słowa, drugie podsłowo ma zawsze długość 1, 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 1 + 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 prawi- dł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 (40)

(14)

Następnie definiujemy początki sekwencji zgodnie ze znalezionymi wzorami. Zapisanie sekwencji symbolu a, który występuje 1 + 3n razy jest następujące:

A → a|aaaA , (41)

analogicznie zapisujemy pozostałe sekwencje:

B → bb|bbbB , (42)

C → ccc|cccC . (43)

Ostatecznie gramatyka ma postać:

S → Ab|Bc|Ca (44)

A → a|aaaA , (45)

B → bb|bbbB , (46)

C → ccc|cccC . (47)

Należy jeszcze określić typ tej gramatyki: jest to gramatyka typu 1, 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.

Literatura

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

Cytaty

Powiązane dokumenty

[r]

Szuler jest gotów grać z nami wiele razy o dowolne stawki, które jesteśmy w stanie założyć.. Udowodnić, że niezależnie od wyboru strategii nasze szanse na uzyskanie

5 Poka», »e w przestrzeni Hausdora punkty s¡ domkni¦te, a ci¡gi zbie»ne maj¡ tylko jedn¡

Znaczne odstępstwa ( ponad 30 % ) punktów pomiarowych od linii teoretycznej pozwalają przypuszczać, że mierzone wielkości nie są liniowo zależne. Wtedy też

Zauważmy jeszcze, że sama domkniętość dziedziny T ∗ da nam jedynie ograniczoność T ∗ -to może być nawet operator zerowy o dziedzinie {0}, ale wtedy nie możemy przejść

2. Trzech studentów przygotowywało się niezależnie do egzaminu z rachunku prawdopodobieństwa. Rzucamy n razy kostką do gry. Obliczyć prawdopodobieństwo tego, że: a) szóstka

2. Trzech studentów przygotowywało się niezależnie do egzaminu z rachunku prawdopodobieństwa. Rzucono 10 razy kostką. Rzucono 10 razy symetryczną kostką. Jakie

13. Mamy 2n kartek ponumerowanych liczbami od 1 do 2n oraz 2n podobnie ponumerowanych kopert. Wkładamy losowo po jednej kartce do każdej koperty. Jakie jest prawdopodobieństwo tego,