Jezike tehnologije 1 Jezici i gramatike Alfabet azbuka
Jezičke tehnologije 1 Jezici i gramatike
Alfabet (azbuka) • Alfabet ∑ je konačan skup simbola • Kao sinonimi se koriste karakter ili slovo • Primeri alfabeta: • Skup 30 velikih i malih slova srpskog ćiriličnog pisma {А, Б, В, Г, . . . , Џ, Ш, а, б, в, г, . . . , џ, ш} • Binarni alfabet {0, 1} • Morzeov alfabet (još jedan binarni alfabet} {. , -} • Alfabet dekadnih cifara {0, 1, 2, 3, …, 9}
Niska • Dopisivanjem simbola alfabeta dobija se niska • Sinonimi su rečenica i reč • Primeri niski • • ∑={А, Б, В, Г, . . . , Џ, Ш, а, б, в, г, . . . , џ, ш} – језик ∑={0, 1} – 10110 ∑={. , -} - … --- … (a znači? ) ∑={0, 1, 2, 3, …, 9} – 2019 • Dužina niske je broj simbola u niski i označava se sa |x|, na primer |језик| = 5 • Niska koja ne sadrži nijedan simbol naziva se prazna niska – ε; dužina prazne niske je 0, |ε| = 0
Konkatenacija ili dopisivanje • Ako su x i y niske, onda se xy – ili xᴖy – naziva konkatenacija ili dopisivanje • Na primer, ako je x = ab i y = cd, onda je xy = abcd, a yx = cdab • Svaki simbol alfabeta je i niska dužine 1 • Na primer, za ∑={0, 1, 2, …, 9} – 5 je i simbol alfabeta i niska dužine 1 • Simbol azbuka se ne može razložiti na druge simbole, tj. ni za jedno a ∑, ne postoje b, c ∑, takvi da je a = bᴖc • Konvencija: ako niska sadrži i pojavljivanja simbola a, može se pisati ai • aaabb je isto što i a 3 b 2
Prazna niska • Još jedna konvencija – ako je a simbol alfabeta onda je a 0 = ε, i to važi za svaki simbol alfabeta. • Rezultat konkatenacije neke niske sa praznom niskom je uvek ta ista niska: • xε = εx = x • To znači da je prazna niska ε neutralni element u odnosu na operaciju konkatenacije • Obrnuta niske x, označava se kao x. R dobija se kada se niska x zapiše u obrnutom redosledu: • x = abca, x. R= acba
Osobine operacije konkatenacije • Operacija konkatenacije nije komutativna jer ne važi da za svake dve niske x i y nad alfabetom ∑ važi: xᴖy = yᴖx (tj. xy = yx) • (Zapravo je xy = yx samo ako je x = y) • Primer: x = ab, y = ba, xy = abba, yx = baab • Operacija konkatenacije je asocijativna jer za ma koje tri niske x, y, z nad alfabetom ∑ važi (xᴖy)ᴖz = xᴖ(yᴖz) (tj. (xy)z = x(yz)) to znači da nije važno kojim redom se obavlja konkatenacija.
Prefiksi, sufiksi i podniske • Neka su x, y, z niske nad alfabetom ∑ • Onda je • niska x prefiks niske xy • niska y sufiks niske xy • niska y podniska niske xyz • Prazna niska ε je prefiksi, sufiks i podniska svake niske • Ako je x≠y i • niska x je prefiks niske y onda je x pravi prefiks niske y • niska x je sufiks niske y onda je x pravi sufiks niske y • niska x je podniska niske y onda je x prava podniska niske y
Prefiks, sufiks, podniska - primer • Neka je niska x = abc • • • Svi prefiksi niske x su: ε, a, abc Svi pravi prefiksi niske x su: ε, a, ab Svi sufiksi niske x su: ε, c, bc, abc Svi pravi sufiksi niske x su: ε, c, bc Sve podniske x su: ε, a, b, c, ab, bc, abc • ac nije podniska niske x • Sve prave podniske x su: ε, a, b, c, ab, bc
Klinijevo zatvorenje • ∑* označava skup koji sadrži sve niske konačne dužine nad azubukom ∑, uključujući i praznu nisku ε, naziva se Klinijevo zatvorenje skupa ∑ • Primer: ako je ∑ = {0, 1}, onda je ∑* = {ε, 0, 1, 00, 01, 10, 11, 000, 001, 010, 011, …} • Skup svih konačnih niski nad azbukom koji ne sadrži praznu nisku ε je pozitivno zatvorenje skupa ∑, ili ∑+ = ∑*-{ε} ∑+ = {0, 1, 00, 01, 10, 11, 000, 001, 010, 011, 100, …}
Relacije poretka na skupu ∑* • Prefiksni poredak: parcijalni poredak definisan sa x≺ y ako i samo ako je x prefiks niske y. • Zašto je relacija? jer za svake dve niske x i y možemo da kažemo da li je x prefix niske y ili nije. • Relacija je: • Refleksivna (jer svaka niska prefiks same sebe x ≺ x); • Antisimetrična (ako je x≺ y i y≺ x x = y); • Tranzitivna (ako je x≺ y i y≺ z x≺ z) • Zašto je relacija parcijalna? • Jer postoje niske x i y takve da nije ni x≺ y ni y≺ x • npr. x =ab i y = cd
Relacije poretka na skupu ∑* • Leksikografski poredak ≼ je potpuni poredak u koji je ugrađen prefiksni poredak. • Definiše se pod pretpostavkom da je na alfabetu ∑ = {a 1, a 2, a 3, …, an} definisan potpuni poredak : a 1 a 2 a 3 … an tj. uspostavljen je poredak simbola u alfabetu
Relacije poretka na skupu ∑* • Zašto je leksikografski poredak potpun poredak? • Jer za svake dve niske x i y važi da je ili x≼ y ili y≼ x • Poredak reči u rečniku je inspirisan leksikografskim poretkom, tj. svake dve reči u rečniku možete da poredite i utvrdite koja treba da prethodi kojoj u rečniku • Primer: a ≺ abadžija ≺ abadžijski • aba ≼ baba • Kakav je poredak u rečniku: kupa, Kupa, куп, Купер • Simboli alfabeta treba da budu mala i velika slova latiničnog i ćiriličnog alfabeta i između njih treba da bude uspostavljen poredak.
Jezici (formalni jezici) • Jezik nad alfabetom ∑ je skup niski nad alfabetom ∑ • Definicija: Jezik L nad azbukom ∑ je bilo koji podskupa ∑*: L ∑* • Ako x L, onda je x rečenica jezika L • Nekada se kaže i da je x reč jezika L, zavisi od konteksta • Ova opšta definicija obuhvata skoro svaki pojam jezika – programske jezike i prirodne jezike
Primeri jezika • Neka je dat alfabet ∑ = {a, b, c} • Primer 1: L 1 = {an | n > 0} • Jezik se sastoji od niski u kojima se proizvoljan broj puta pojavljuje simbol a. • L 1 = {a, aaa, aaaa, …} • Primer 2: L 2 = {am bn | m, n > 0} • Jezik se sastoji od niski u kojima za proizvoljnim brojem ponavljanja simbola a sledi proizvoljan broj ponavljanja simbola b • L 2 = {ab, abb, aabbb, …}
Primeri jezika • Neka je dat alfabet ∑ = {a, b, c} • Primer 3: L 3 = {an bn | n > 0} • Jezik se sastoji od niski u kojima iza određenog broja pojavljivanja simbola a pojavljuje isti broj pojavljivanja simbola b; • L 3 = {ab, aabb, aaabbb, aaaabbbb, …} • Niske jezika L 3 pripadaju i jeziku L 2 ali ne i jeziku L 1. • Ako bi simbole a i b interpretirali kao ( i ) (otvorena i zatvorena zagrada) onda bi jezik L 3 opisivao jedan jezik umetnutih parova zagrada.
Primeri jezika • Neka je dat alfabet ∑ = {a, b, c} • Primer 4: L 4 = {an | n ≥ 0} • Jezik se sastoji od niski u kojima se proizvoljan broj puta pojavljuje simbol a, uključujući i 0 pojavljivanja. • L 4 = {ε, a, aaa, aaaa, …} • Primer 5: L 5 = {an bn | n ≥ 0} • Jezik se sastoji od niski u kojima za proizvoljnim brojem ponavljanja simbola a, uključujući i 0, sledi isti broj simbola b • L 5 = {ε, ab, aabb, aaabbb, aaaabbbb, …}
Primeri jezika • Primer: • Prazan skup je jedan jezik koji ne sadrži ni jednu nisku (reč); • Skup {ε} je jezik koji sadrži samo praznu nisku • ≠ {ε} • Primer: • L 1 ∑*, što znači da je L 1 jezik nad azbukom ∑, a niske a, aaa, aaaa, … su rečenice (reči) tog jezika. • Isto važi i za jezike L 2 , L 3 , L 4 , L 5
Prefiksni jezici • Za jezik L za koji važi da ni jedna niska jezika nije pravi prefiks ni jedne druge niske jezika L se kaže da je prefiksni jezik. • Jezik L 4 = {an | n ≥ 0} = {ε, a, aaa, aaaa, …} nije prefiksni jer je, recimo, aa pravi prefiks od aaa (dovoljan je jedan izuzetak); • Jezik L 6 = {anb | n ≥ 0} = {b, aab, aaaab, …} jeste prefiksni jer nijedna njegova niska nije pravi prefiks druge niske jezika L 6 (pravilo: b se pojavljuje samo na kraju niske pa nijedna niska ne može biti pravi prefiks).
Sufiksni jezici • Za jezik L za koji važi da ni jedna niska jezika nije pravi sufiks ni jedne druge niske jezika L se kaže da je sufiksni jezik. • Jezik L 4 = {an | n ≥ 0} = {ε, a, aaa, aaaa, …} nije sufiksni jer je, recimo, aa pravi sufiks od aaa (dovoljan je jedan izuzetak); • Jezik L 6 = {anb | n ≥ 0} = {b, aab, aaaab, …} nije sufiksni jer je, recimo, ab pravi sufiks od aab (dovoljan je jedan izuzetak).
Operacije nad jezicima • Kako su jezici skupovima, na njih se mogu primeniti skupovne operacije: • Proizvod jezika je asocijativna operacija, a {ε} je njen neutralni element L {ε} = {ε} L = L
Stepenovanje jezika • n-ti stepen jezika se definiše na sledeći način: • L 0 = {ε} • L 1 = L • Ln = Ln-1 L, za n > 1 • Primer: • L 1 = {an | n > 0} • L 2 = {am bn | m, n > 0} • L 2 = L 1 {bn | n > 0} • Primer: • L 5 = {an bn | n ≥ 0} • L 52 = {an bn am bm | n, m ≥ 0} = {ε, abab, aabb, aaabbbab, aabbab. . . }
Iteracija • Iteracija ili Klinijevo zatvorenje jezika L, označava se sa L* • Primer: • L 4 = {an | n ≥ 0} = • L 4 = {a}* = L 1 {ε} • Pozitivno zatvorenje jezika L, označava se sa L+ • Primer: • L 1 = {an | n > 0} = • L 1 = {a}+ = L 4 - {ε}
Zadatak 1 • Nabrojati se prefikse, sufikse I podniske, niske abbc • Prefiksi: ε, a, abb, abbc • Sufiksi: ε, c, bbc, abbc • Podniske: ε, a, b, c, ab, bc, abb, bbc, abbc
Zadatak 2 • Zapisati 12 niski jezika L = {w | w {a, b}* i broj simbola a u w jednak je broju simbola b u w} • ε, ab, ba, aabb, abab, baba, abba, baab, bbaa, aaabbb, aababb, abaabb, baaabb, …
Zadatak 3 • Koji od sledećih jezika je prefiksni, odnosno, sufiksni? Šta su niske jezika? a) L = {w | w = anbn, n ≥ 1} • ab, aabb, aaabbb, aaaabbbb, … • Jezik je prefiksni, jezik je sufiksni b) L = {w | w = abn, n ≥ 1} • ab, abbb, abbbb, … • Jezik je nije prefiksni, jezik je sufiksni c) L = {w | w {a, b}* i broj a u w = je broju b u w} • Jezik nije prefiksni, jezik nije sufiksni
Zadatak 4 • Neka je jezik L 1 = {an | n > 0} i L 2 = {bm | m > 0} • Šta je proizvod jezika L 1 L 2 ? • L 1 L 2 = {xy | x = an, n > 0; y = bm, m > 0}={anbm, n, m >0} • L 1 L 2 = {ab, abb, aabbb, …} • Jezik čije se reči sastoje od određenog broja simbola a iza kojih sledi određen broj simbola b • Da li proizvod L 1 L 2 sadrži praznu nisku? Zašto? • Proizvod ne sadrži praznu nisku jer je ne sadrže ni L 1 ni L 2
Zadatak 5 • Neka je Σ = {a, b}. Izračunati proizvod jezika A B: a) A = {a, ab, bb}, B = {ε, b, a*} A B = {a, ab, bb, abb, bbb, a+, aba*, bba*} b) A = , B = {a, ab, bb} A B= c) A = {ε}, B = {b, aba} A B=B d) A = {aa, ab, ba}, B = Σ* A B = {aa{a, b}*, ab{a, b}*, ba{a, b}*} Sve niske nad alfabetom Σ dužine 2 koje ne počinju sa bb
Zadatak 6 • Šta je proizvod jezika X = {00, 1} i Y = {(10)n | n > 0} • Navesti nekoliko niski jezika • X Y = {z | z = 00(10)n ili z = 1(10)n} • X Y = {0010, 00101010, . . . , 11010, 1101010. . . }
Zadatak 7 • Šta je zatvorenje, a šta pozitivno zatvorenje jezika: a) X = {00} • • • zatvorenje: X* = {00}*= {ε, 0000, 000000, . . . } X* = { z | z = 02 n, n 0} Sve niske koje sadrže paran broj 0 (uključujući i nijednu) Pozitivno zatvorenje: X+ = {00}+= {00, 000000, . . . } X* = { z | z = 02 n, n > 0} Sve niske koje sadrže paran broj 0, ali bar dve
Zadatak 7 • Šta je zatvorenje, a šta pozitivno zatvorenje jezika: b) X = {00, 1} • • zatvorenje: X* = {00, 1}*= {ε, 001, 1001001, 111, . . . } Sve niske koje sadrže paran broj 0 (uključujući i nijednu), i proizvoljan broj jedinica (ili nijednu) i praznu nisku pozitivno zatvorenje: X+ = {00, 1}+= {00, 001, 1001001, 111, . . . } Sve niske koje sadrže paran broj 0 (uključujući i nijednu), i proizvoljan broj jedinica (ili nijednu) bez prazne niske
Zadatak 7 • Šta je zatvorenje, a šta pozitivno zatvorenje jezika: c) X = {ε, 01, 10} • • zatvorenje: X* = {ε, 01, 10}*= {ε, 01, 10, 0101, 0110, 1001, 1010, 010101, 010110, 011001, 011010, 100101, 100110, 101001, 101010, . . . } Sve niske koje sadrže isti broj 0 i jedinica (uključujući i nijednu), sa najviše dve iste susedne cifre, i praznu nisku, tj ε X* pozitivno zatvorenje: X+ = {ε, 01, 10}+= X* I pozitivino zatvorenje sadrži praznu nisku jer je sadrži i alfabet X.
Konačni i beskonačni jezici • Za precizan opis konačnog jezika dovoljno je da se eksplicitno navedu sve niske koje mu pripadaju (formalno govoreći). • Npr. , skup ključnih reči jezika C je konačan. • Skup celih neoznačenih brojeva je beskonačan (model jezika L 1) • Kada jezik nije konačan postavlja se pitanje: • Kako da se generišu sve reči jezika; • Kako može da se utvrdi da li niska pripada jeziku. • Najopštiji je algoritam Tjuringove mašine ali on ne dopušta da se izraze specifičnosti realnih jezika (programskih i prirodnih).
- Slides: 32