2.8 Säännöllisten kielten rjoituksist Krdinliteettisyistä on oltv olemss (pljon) ei-säännöllisiä kieliä: kieliä on ylinumeroituv määrä, säännöllisiä lusekkeit vin numeroituvsti. Voidnko löytää konkreettinen, mielenkiintoinen esimerkki kielestä, jok ei olisi säännöllinen? Helposti. Säännöllisten kielten perusrjoitus: äärellisillä utomteill on vin rjllinen muisti. Siten ne eivät pysty rtkisemn ongelmi, joiss vditn mielivltisen suurten lukujen trkk muistmist. simerkki: sulkulusekekieli L mtch = {( k ) k k 0}. Formlisointi: pumppuslemm. Lemm 2.6 (Pumppuslemm) Olkoon A säännöllinen kieli. Tällöin on olemss sellinen n 1, että mikä thns x A, x n, voidn jk osiin x = uvw siten, että uv n, v 1, j uv i w A kikill i = 0,1,2,... Todistus. Olkoon M jokin A:n tunnistv deterministinen äärellinen utomtti, j olkoon n M:n tilojen määrä. Trkstelln M:n läpikäymiä tiloj syötteellä x A, x n. Kosk M jokisell x:n merkillä siirtyy tilst toiseen, sen täytyy kulke jonkin tiln kutt (inkin) kksi kert itse siss jo x:n n:n ensimmäisen merkin ikn. Olkoon q ensimmäinen toistettu til. Olkoon u M:n käsittelemä x:n lkuos sen tulless ensimmäisen kerrn tiln q, v se os v x:stä jonk M käsittelee ennen ensimmäistä u q w pluutn q:hun, j w loput x:stä. Tällöin on uv n, v 1, j uv i w A kikill i = 0,1,2,... simerkki. Trkstelln em. sulkulusekekieltä (merk. ( =, ) = b): L = L mtch = { k b k k 0}. Oletetn, että L olisi säännöllinen. Tällöin pitäisi pumppuslemmn mukn oll jokin n 1, jot pitempiä L:n merkkijonoj voidn pumpt. Vlitn x = n b n, jolloin x = 2n > n. Lemmn mukn x voidn jk pumpttvksi osiin x = uvw, uv n, v 1; siis on oltv u = i, v = j, w = n (i+j) b n, i n 1, j 1. Mutt esimerkiksi 0-kertisesti pumpttess: v uv 0 w = i n (i+j) b n = n j b n L. u q w Siten L ei voi oll säännöllinen.
3. KILIOPIT JA MRKKIJONOJN TUOTTAMINN Kielioppi = muunnossysteemi merkkijonojen (kielen snojen ) tuottmiseen tietystä lähtöjonost lken, osjonoj toistuvsti nnettujen sääntöjen mukn uudelleenkirjoittmll. Kielioppi on yhteydetön, jos kusskin uudelleenkirjoitusskeless korvtn yksi erityinen muuttujt. välikesymboli jollkin siihen liitetyllä korvusjonoll, j korvus voidn in tehdä symboli ympäröivän merkkijonon rkenteest riippumtt. Sovelluksi: rkenteisten tekstien kuvminen (esim. ohjelmointikielten BNF-syntksikuvukset, XML:n DTD/Schem-määrittelyt), yleisemmin rkenteisten olioiden kuvminen (esim. syntktinen hhmontunnistus). Yhteydettömillä kieliopeill voidn kuvt (tuott) myös ei-säännöllisiä kieliä. simerkki: yhteydetön kielioppi kielelle L mtch (lähtösymboli S): (i) S ε, (ii) S (S). simerkiksi merkkijonon ((())) tuottminen: S (S) ((S)) (((S))) (((ε))) = ((())). Toinen esimerkki: kielioppi C-tyyppisen ohjelmointikielen ritmeettisille lusekkeille (yksinkertistettu). T + T T F T F F (). simerkiksi lusekkeen ( + ) tuottminen: T T F F F () F ( + T) F (T + T) F (F + T) F (+T) F (+F) F (+) F (+). Määritelmä 3.1 Yhteydetön kielioppi on nelikko missä V on kieliopin kkosto; = (V,Σ,P,S), Σ V on kieliopin päätemerkkien joukko; sen komplementti N = V Σ on kieliopin välikemerkkien t. -symbolien joukko; P N V on kieliopin sääntöjen t. produktioiden joukko; S N on kieliopin lähtösymboli. Produktiot (A, ω) P merkitään tvllisesti A ω.
Merkkijono γ V tuott t. joht suorn merkkijonon γ V kieliopiss, merkitään γ jos voidn kirjoitt γ = αaβ, γ = αωβ (α,β,ω V, A N), j kieliopiss on produktio A ω. Jos kielioppi on yhteydestä selvä, voidn merkitä γ. Merkkijono γ V tuott t. joht merkkijonon γ V kieliopiss, merkitään γ jos on olemss jono V:n merkkijonoj γ 0,γ 1,...,γ n (n 0), siten että γ = γ 0 γ 1... γ n = γ. rikoistpuksen n = 0 sdn γ millä thns γ V. Jälleen, jos on yhteydestä selvä, voidn merkitä γ. Merkkijono γ V on kieliopin lusejohdos, jos on S γ. Pelkästään päätemerkeistä koostuv :n lusejohdos x Σ on :n luse. Kieliopin tuottm t. kuvm kieli koostuu :n luseist: L() = {x Σ S x}. Formli kieli L Σ on yhteydetön, jos se voidn tuott jollkin yhteydettömällä kieliopill. simerkiksi tspinoisten sulkujonojen muodostmn kielen L mtch = {( k ) k k 0} tuott kielioppi mtch = ({S,(,)},{(,)},{S ε,s (S)},S). Toinen kielioppi kielen L expr tuottmiseen on expr = (V,Σ,P,), Yksinkertisten ritmeettisten lusekkeiden muodostmn kielen L expr tuott kielioppi missä expr = (V,Σ,P,), missä V = {,,+,,(,)}, Σ = {,+,,(,)}, P = { +,,, ()}. V = {,T,F,,+,,(,)}, Σ = {,+,,(,)}, P = { T, + T, T F, T T F, F, F ()}. Huom: Vikk kielioppi expr näyttää yksinkertisemmlt kuin kielioppi expr, sen ongelmn on ns. rkenteellinen moniselitteisyys, mikä on monesti ei-toivottu ominisuus.
Vkiintuneit merkintätpoj Välikesymboleit: A,B,C,...,S,T. Päätemerkkejä: kirjimet,b,c,...,s,t; numerot 0,1,...,9; erikoismerkit; lihvoidut ti lleviivtut vrtut snt (if, for, end,... ). Mielivltisi merkkejä (kun välikkeitä j päätteitä ei erotell): X,Y,Z. Päätemerkkijonoj: u,v,w,x,y,z. Sekmerkkijonoj: α,β,γ,...,ω. Produktiot, joill on yhteinen vsen puoli A, voidn kirjoitt yhteen: joukon sijn kirjoitetn A ω 1, A ω 2,...A ω k A ω 1 ω 2... ω k. Kielioppi esitetään usein pelkkänä sääntöjoukkon: A 1 ω 11... ω 1k1 A 2 ω 21... ω 2k2. A m ω m1... ω mkm. Tällöin päätellään välikesymbolit edellisten merkintäsopimusten mukn ti siitä, että ne esiintyvät sääntöjen vsempin puolin; muut esiintyvät merkit ovt päätemerkkejä. Lähtösymboli on tällöin ensimmäisen säännön vsempn puolen esiintyvä välike; tässä siis A 1. räitä konstruktioit Olkoon L(T) välikkeestä T johdettviss olevien päätejonojen joukko. Olkoon nnettu produktiokokoelm P, joss ei esiinny välikettä A, j joll B:stä voidn joht L(B) j vstvsti C:stä L(C). Lisäämällä P:hen jokin seurvist produktioist sdn uusi kieliä: produktio A B C A BC A AB ε (vsen rekursio) ti A BA ε (oike rekursio) kieli yhdiste L(A) = L(B) L(C) ktentio L(A) = L(B)L(C), j Kleenen sulkeum L(A) = L(B) Välikkeiden keskeisupotus on yhteydettömille kieliopeille omininen konstruktio, jok tekee usein (muttei in) kielestä epäsäännöllisen: lisäämällä produktio A BAC ε sdn L(A) = [ L(B) i L(C) i. i=0
3.3 KILIOPPIN JÄSNNYSONLMA Rtkistv tehtävä: Annettu yhteydetön kielioppi j merkkijono x. Onko x L()? Rtkisumenetelmä = jäsennyslgoritmi. Useit vihtoehtoisi menetelmiä, erityisesti kun on jotin rjoitettu (käytännössä esiintyvää) muoto. Johdot j jäsennyspuut Olkoon γ V kieliopin = (V,Σ,P,S) lusejohdos. Lähtösymbolist S merkkijonoon γ johtv suorien johtojen jono snotn γ:n johdoksi :ssä. S = γ 0 γ 1 γ n = γ Johdon pituus on siihen kuuluvien suorien johtojen määrä (edellä n). simerkki: luseen + johtoj kieliopiss expr : (i) + T T + T F + T +T +F + (ii) + T + F T + F F + F F + + (iii) + T + F + T + F + +. Johto γ on vsen johto, merkitään γ, lm jos kusskin johtoskeless on produktiot sovellettu merkkijonon vsemmnpuoleisimpn välikkeeseen (edellä johto (i)). Vstvsti määritellään oike johto (edellä (iii)), jot merkitään γ rm Suori vsempi j oikeit johtoskeli merkitään γ j lm γ. rm Olkoon = (V,Σ,P,S) yhteydetön kielioppi. Kieliopin mukinen jäsennyspuu on järjestetty puu, joll on seurvt ominisuudet: (i) puun solmut on nimetty joukon V {ε} lkioill siten, että sisäsolmujen nimet ovt välikkeitä (so. joukost N = V Σ) j juurisolmun nimenä on lähtösymboli S; (ii) jos A on puun jonkin sisäsolmun nimi, j X 1,...,X k ovt sen jälkeläisten nimet järjestyksessä, niin A X 1...X k on :n produktio. Jäsennyspuun τ tuotos on merkkijono, jok sdn liittämällä yhteen sen lehtisolmujen nimet esijärjestyksessä ( vsemmlt oikelle ).
simerkki. Luseen + jäsennyspuu kieliopiss expr : Luseen johto: T F + + T T + T F + T +T +F + T F Johto S = γ 0 γ 1 γ n = γ vstvn jäsennyspuun muodostminen: (i) puun juuren nimeksi tulee S; jos n = 0, niin puuss ei ole muit solmuj; muuten (ii) jos ensimmäisessä johtoskeless on sovellettu produktiot S X 1 X 2...X k, niin juurelle tulee k jälkeläissolmu, joiden nimet vsemmlt oikelle ovt X 1,X 2,...,X k ; (iii) jos seurvss skeless on sovellettu produktiot X i Y 1 Y 2...Y l, niin juuren i:nnelle jälkeläissolmulle tulee l jälkeläistä, joiden nimet vsemmlt oikelle ovt Y 1,Y 2,...,Y l ; j niin edelleen. Konstruktiost huomtn, että jos τ on jotkin johto S γ vstv jäsennyspuu, niin τ:n tuotos on γ. Olkoon τ kieliopin mukinen jäsennyspuu, jonk tuotos on päätemerkkijono x. Tällöin τ:st sdn vsen johto x:lle käymällä puun solmut läpi esijärjestyksessä ( ylhäältä ls, vsemmlt oikelle ) j lventmll vstn tulevt välikkeet järjestyksessä puun osoittmll tvll. Oike johto sdn käymällä puu läpi käänteisessä esijärjestyksessä ( ylhäältä ls, oikelt vsemmlle ). Muodostmll nnetust vsemmst johdost S x ensin lm jäsennyspuu edellä esitetyllä tvll, j sitten jäsennyspuust vsen johto, sdn tkisin lkuperäinen johto; vstv tulos pätee myös oikeille johdoille. simerkki. Luseen + vsemmn johdon muodostminen jäsennyspuust. Jäsennyspuu: 1 2 + T 1 T 2 F 2 F 1 2 Solmut esijärjestyksessä: 1 2 T 2 F 1 1 + T 1 F 2 2 Vsen johto: lm + T lm T + T lm F + T lm +T lm +F lm + 1
Luse 3.3 Olkoon = (V,Σ,P,S) yhteydetön kielioppi. Tällöin: (i) jokisell :n lusejohdoksell γ on :n mukinen jäsennyspuu τ, jonk tuotos on γ; (ii) jokist :n mukist jäsennyspuut τ, jonk tuotos on päätemerkkijono x, vstvt yksikäsitteiset vsen j oike johto S x j S x. lm rm Seurus 3.4 Jokisell :n luseell on vsen j oike johto. Siis: yhteydettömän kieliopin tuottmien luseiden jäsennyspuut, vsemmt j oiket johdot vstvt yksikäsitteisesti toisin. Jäsennysongelmn rtkisuun ktsotn usein kuuluvn pelkän päätösongelmn Onko x L()? rtkisemisen lisäksi jonkin näistä jäsennysesityksistä tuottminen. Kieliopin moniselitteisyys Luseell voi oll kieliopiss useit jäsennyksiä. simerkki. Trkstelln yksinkertisten ritmeettisten lusekkeiden kielioppi: expr = { +,,, ()}. Luseell + on tässä kieliopiss kksi jäsennystä: + Yhteydetön kielioppi on moniselitteinen, jos jollkin :n luseell x on kksi erilist :n mukist jäsennyspuut. Muuten kielioppi on yksiselitteinen. + Moniselitteisyys on tietojenkäsittelysovelluksiss yleensä ei-toivottu ominisuus, kosk se merkitsee että nnetull luseell on kksi vihtoehtoist tulkint. Yhteydetön kieli, jonk tuottvt kieliopit ovt kikki moniselitteisiä, on luonnostn moniselitteinen. simerkiksi kielioppi expr on moniselitteinen, kieliopit expr j mtch yksiselitteisiä. Kieli L expr = L( expr) ei ole luonnostn moniselitteinen, kosk sillä on myös yksiselitteinen kielioppi expr. Luonnostn moniselitteinen on esimerkiksi kieli (Todistus sivuutetn.) { i b j c k i = j ti j = k}.