8. Kieliopit ja kielet 1 / 22 Luonnollinen kieli Suomen kielen sanoja voidaan yhdistellä monella eri tavalla. Kielioppi määrää sen, milloin sanojen yhdistely antaa oikein muodostetun lauseen. "Mies räpyttää siipiään" on kieliopillisesti oikein muodostettu. Subjekti = "mies, predikaatti="räpyttää"ja objekti "siipiään". Lause on siis muodollisesti eli syntaktisesti oikein muodostettu, vaikka lauseen sisältö eli semantiikka olisi pielessä. "Mies räpytys siivet" ei ole kieliopillisesti oikein muodostettu lause, koska se ei noudata Suomen kielen kielioppia. 2 / 22 Formaali kieli Luonnollisen kielen eli puhutun kielen syntaksi on aina äärimmäisen monimutkainen. Itse asiassa ei ole mahdollista kuvata kaikkia puhutun kielen kielioppisääntöjä. Kielen syntaksin tutkimus on johtanut käsitteeseen Formaali kieli: Kieltä, jossa kielen kielioppi on kuvattu tarkasti hyvin määritellyillä säännöillä. Lingvistiikan lisäksi formaalilla kielillä on sovelluksia ohjelmointikielten tutkimuksessa ja tietoliikenteessä Kääntäjät, ohjelmointikielten syntaksi, bittijonojen käsittely jne. Seuraavassa määritellään formaalin kielen peruskäsitteet ja operaatiot. 3 / 22 1
8.1. Määritelmiä Kieli on kokoelma sanoja ja sanojen yhdistämistapoja, joita käyttää tai ymmärtää jokin yhteisö. Aakkosto on äärellinen, ei-tyhjä joukko merkkejä (eli symboleja, kirjaimia) Tavallisia aakkostoja ovat suomen kielen kirjaimet (mukaanlukien sanavälit ja välimerkit) sekä bitit0ja1. Sana on äärellinen jono kirjaimia. Tyhjä sanaλon sana, jossa ei ole yhtään kirjainta. Sanan w pituus w on w:n sisältämien kirjaimien lukumäärä. Esimerkiksi aabbc = 5 ja 1 + 2 = 3 = 5. Tyhjälle sanalle on λ = 0. 4 / 22 Sanojen katenaatio Kaksi sanaaw 1 jaw 2 ovat samat (merkitäänw 1 = w 2 ), jos niissä molemmissa esiintyvät samat kirjaimet samassa järjestyksessä. Esimerkiksi abba abab, mutta aabλ = aab. Sanojen perusoperaatio on katenaatio eli sanojen kirjoittaminen peräkkäin. Sanojenw 1 jaw 2 katenaatiota (tässä järjestyksessä) merkitäänw 1 w 2 :lla. Esimerkiksi sanojenaaba jaccad katenaation on sanaaabaccad. Yleensä sanaw 1 w 2 w 2 w 1. Lisäksiwλ = w kaikilla sanoillaw. 5 / 22 2
Sanojen potenssi Sananw n:s (katenaatio) potenssi on sana w n = ww w } {{ }. n kpl Erikseen on määritelty, ettäw 1 = w jaw 0 = λ. Lisäksi ainaλ n = λ. 6 / 22 Sanan peilikuva Sananw peilikuva w R on sana, joka saadaanw:stä ottamalla kirjaimet oikealta vasemmalle. Josw = a 1 a 2 a n, niinw R = a n a n 1 a 2 a 1. Erityisestiλ R = λ. Selvästi on(w 1 w 2 ) R = w R 2 wr 1. 7 / 22 3
Osasanat Sanauon sananw alkuosa, josw = uv jollakin sanallav. Sanauon sananw loppuosa, josw = vu jollakin sanallav. Sanauon sananw osasana, josw = v 1 uv 2 joillakin sanoillav 1,v 2. 8 / 22 Sanojen lukumäärä Huom. Aakkoston sanoja on numeroituvasti ääretön määrä. Toisin sanoen aakkoston sanat voidaan kirjoittaa päättymättömäksi listaksi. 9 / 22 4
8.2. Kielet 10 / 22 Määritelmä Formaali kieli on joukko jonkin aakkoston sanoja. Kieli on äärellinen, jos se sisältää äärellisen määrän sanoja. Tyhjä kieli on kieli, joka ei sisällä yhtään sanaa. Kieli{λ} on kieli, joka sisältää vain tyhjän sanan. Yhden sanan muodostama kieli{w} ja sanaw yleensä samaistetaan ja merkitään myös kieltäw:llä. 11 / 22 Joukko-opin merkinnät Kielille käytetään joukko-opin merkintöjä:,,,\. Sananw kuuluminen kieleen merkitäänw L. Vastaavasti merkintäw / L tarkoittaa, että w ei ole kielenlsana. AakkostonV kaikkien sanojen muodostamaa kieltä merkitäänv :llä. Myösλ V. KieliV + = V \{λ} eli kaikkien aakkostonv ei tyhjien sanojen muodostama kieli. 12 / 22 5
Kielten ylinumeroituvuus Kieliä on selvästi ääretön määrä. Lisäksi voidaan todistaa Lause 8.1.Aakkoston kieliä on ylinumeroituvasti ääretön määrä. Toisin sanoen aakkoston kieliä ei voida kirjoittaa listaksi, Tod.... 13 / 22 Kielten operaatioita KieltenL 1 jal 2 katenaatio (tässä järjestyksessä) on kieli L 1 L 2 = {w 1 w 2 w 1 L 1 jaw 2 L 2 }. KielenLn:s (katenaatio) potenssi on kieli L n = {w 1 w 2 w n w 1,w 2,...,w n L}. ErityisestiL 1 = L,L 0 = {λ}. Myös 0 = λ. 14 / 22 6
Kielen katenaatiosulkeuma KielenLkatenaatiosulkeuma on kieli L = L n. n=0 elil on kieli joka muodostuu sanoista jotka saadaan kielenlsanoista katenoimalla. Myösλ L. Vastaavasti kieli L + = L n, n=1 jossa sanaλon mukana vain josλ L. Voidaan osoittaa, että L + = LL = L L. 15 / 22 Säännölliset kielet Säännölliset kielet aakkostossav: 1.,{λ} ja{a}, a V ovat säännöllisiä kieliä. 2. JosLjaL ovat säännöllisiä kieliä, niin myösl L,LL jal ovat säännöllisiä kieliä. Esimerkki Kieli{ab n n =,0,1,...,} on säännöllinen, sillä {ab n n =,0,1,...,} = {a}{λ,b,b 2,b 3,...} = {a}{b}. 16 / 22 7
Säännölliset ilmaisut Säännöllinen kieli kuvataan usein säännöllisen ilmaisun avulla. Säännölliset ilmaisut aakkostossa V: 1.,{λ} ja a, a V ovat säännöllisiä ilmaisuja 2. JosRjaS ovat säännöllisiä ilmaisuja, niin myös(r),r+s,r S jar ovat säännöllisiä ilmaisuja. Esimerkki Alla aakkoston{0,1} säännöllisiä ilmaisuja. λ,0,1,λ +1,0+(1 0)0 1. Operaattoreiden suoritusjärjestys: Sulkujen vähentämiseksi on sovittu säännöllisen ilmaisun operaatioille suoritusjärjestys: ensin, senjälkeen,ja viimeiseksi+. Esimerkiksi säännöllinen ilmaisua+b a on sama kuin(a+(b (a ))). Jos sekaannusta ei synny, jätetään merkitsemättä. Esimerkiksi edellisen säännöllinen ilmaisu voidaan esittää muodossaa+ba. 17 / 22 Yhteys Jokainen säännöllinen ilmaisurmäärää säännöllisen kielenl(r) seuraavasti: L( ) =,L(λ) = {λ},l(a) = {a}, L(R+S) = L(R) L(S),L(RS) = L(R)L(S) jal(r ) = (L(R)). EsimerkiksiL(a+bc ) = L(a) (L(b)L(c )) = {a} (L(b)L(c) ) = {a} ({b}{λ,c,c 2,...}) = {a,b,bc 2,bc 3,bc 4...}. Säännöllisten kielten ja säännöllisten ilmaisujen määritelmien perusteella: Jokainen säännöllisen ilmaisun määräämä kieli on säännöllinen ja jokaisen säännöllisen kielen määrää säännöllinen ilmaisu. Kaksi säännöllistä ilmaisuarjas ovat samat, josl(r) = L(S). Esimerkki Määrää aakkoston{0,1} säännöllinen ilmaisu, jonka määräämä kieli sisältää täsmälleen kaikki parillisen pituiset bittijonot. Ratk.... 18 / 22 8
8.3. Kieliopit 19 / 22 Johdanto Kielioppi on välineistö synnyttää (formaaleja) kieliä. Tietyn kieliopin mukaisella kielellä on (hyvyys)ominaisuuksia, joita voidaan hyödyntää ko. kielellä tehtyjen ohjelmien tarkistamisessa ohjelman kääntämisen yhteydessä. Käytettäessä kieltä kiinnitetään huomiota kahteen asiaan: muotoon (syntaksiin) asiasisältöön (tarkoitukseen, semantiikkaan). Kielioppi säätelee kielen muotoa, syntaksia, ja niinpä kieliopin perusteella voidaan tarkistaa ilmaisun (lauseen) syntaksia. Formaalien kielien kielioppien tarkoituksena ei ole luoda laitetta, joka tuottaa ohjelmointikieliä, vaan aikaansaada kielioppeja, joiden sääntöjä noudattavien kielien muotoa(=syntaksia) on helppo tarkistaa (esim. kääntämisen tai tulkkauksen yhteydessä). 20 / 22 Kieliopin määritelmä Kielioppi G on järjestetty nelikko G = (V,V T,S,P), missä V = aakkosto (kaikkien kirjaimien joukko); V T = lopullisen kielen kirjaimien joukko (terminaalit)v T jav T V ; S = aloitussymbolis V\V T, P = äärellinen produktioiden (=tuotantosääntöjen) joukko,p V V. AakkostoaV N = V\V T kutsutaan ei terminaalien eli apukirjainten joukoksi. Produktioiden joukon sääntö(a,b) P kirjoitetaan yleensä muodossaa B. KielioppiGtuottaa sanoja seuraavasti: Aloitetaan alkukirjaimestas Sovelletaan joukonp sääntöjä, eli korvataan sanassa esiintyväasäännöna B oikealla puolellab. 21 / 22 9
Sanojen tuottaminen OlkootQ,R V sanoja. Määritellään operaatio G (tai josgtunnetaan ) seuraavasti: Q G R, josq = Q 1 αq 2,R = Q 1 βq 2 jaα β P. Q n G R,n 1, jos on olemassa sellaiset sanatq 1,Q 2,...,Q n 1, että Q Q 1 Q 2 Q n 1 R. JosQ = R taiq i R, jollakini, niinq R. 22 / 22 10