Formális nyelvek és gépek (definíciós és tétel lista - 09/10/2) ábécé: Ábécének nevezünk egy tetszőleges véges szimbólumhalmazt. Jelölése: X, Y betű: Az ábécé elemeit betűknek hívjuk. szó: Az X ábécé elemeinek egy tetszőleges, véges sorozatát szónak nevezzük. Jelölése: v, w, X ábécé feletti összes szó halmaza: X* nyelv: Az X* valamely részhalmazát az X ábécé feletti nyelvnek nevezzük. nyelvosztály: Nyelvek valamely összességét nyelvosztálynak, nyelvcsaládnak nevezzük. reguláris nyelvek: Reguláris nyelveknek nevezzük azokat az L nyelveket, melyek megfelelnek az alábbiaknak: - L az {a}, az üres szót tartalmazó, az üres nyelvek valamelyike (ezek az elemi nyelvek), ahol a eleme U L nyelv rekurzív: Akkor rekurzív egy nyelv, ha van olyan A eldöntő algoritmus, melynek inputjára egy tetszőleges u szót helyezve, eldönti, hogy ez az u szó benne van-e az L nyelvben, ha igen a válasz, u eleme a nyelvnek, ha nem a válasz, akkor nem. L nyelv parciálisan rekurzív: Akkor parciálisan rekurzív egy nyelv, ha létezik olyan A parciális eldöntő algoritmus, melynek inputjára tetszőleges szót helyezve, eldönti, hogy az benne van-e az L nyelvben. Ha eleme, akkor igen válasszal tér vissza, ha nem vagy nem terminál vagy nem választ ad. L nyelv rekurzívan felsorolható: Az L nyelv rekurzívan felsorolható, hogyha létezik olyan algoritmus, amely felsorolja az elemeit. produkciós rendszer: Produkciós rendszer alatt azt a nyelv definiálási módszert értjük, amely egy hármassal azonosít egy nyelvet. Ezek: X, amely a nyelv ábécéje, P amely a produkciós szabályok véges halmaza (részhalmaza X* x X*) és a Ax egy véges axiómahalmaz (részhalmaza X*-nak). Formális leírását lásd jegyzet 16. oldal. közvetlen levezetés: Egy produkciós rendszerben akkor mondjuk, hogy X*-beli a szóból közvetlen levezethető X*-beli b szó, hogyha létezik a produkciós rendszerben olyan q1, q2 X*-beli szavak, valamint olyan p ->q szabály, amelyekre igaz az, hogy a = q1pq2 és b=q1qq2. Tehát a környezet azonos és a részszavak "egymás közötti megfeleltetésére" van szabály a rendszerben. p.r. által generált nyelv: Egy produkciós rendszer által generált T ábécére relatív L nyelv az a nyelv, amely azokból a T*-beli szavakból áll, melyekhez létezik olyan elem az axiómahalmazban (Ax) melyből a produkciós rendszerben közvetett levezetés vezet a nyelv egy szavához. p.r. által elfogadott nyelv: Egy produkciós rendszer által elfogadott T ábécére relatív nyelv az a nyelv, amely azokból a T*-beli szavakból áll, melyekből egy axiómahalmazbeli elem közvetett levezethető. Mi a különbség a generált és az elfogadott nyelv között? A generált nyelvben tehát az axiómahalmazbeli elemből vezettük le a generált nyelv elemeit, míg az elfogadott nyelvben az elfogadott nyelv szavaiból vezettük le az axiómahalmazbeli elemet. generatív nyelvtanok: G=[T,N,P,S] (T: terminális jelek, N: nyelvtani jelek, P: véges szabályhalmaz, S: kezdőszimbólum) mondatforma: Terminális jelekből és nyelvtani jelekből álló összetételek. (T unió N)* terminális szavak: Terminális jelekből alkotott szavak. Jele: T* - 1 -
Chomsky-féle hierarchia (nyelvosztályok): 4 nyelvosztály létezik, 0-ás, 1-es, 2-es és 3-as típusú. 0-ás típus: Nincs megkötés rá, ami azt is jelenti, hogy minden nyelvtan egyben 0-ás típusú nyelvtan is. Egyetlen megkötés az az "alap" megkötés, miszerint a szabályok bal oldalán mindenképpen szerepelnie kell nyelvtani jelnek. 1-es típus: Két szabályformát enged: - q1aq2 -> q1qq2, ahol q1 és q2 mondatforma, tehát (TUN)* és ezt nevezzük környezetnek és A eleme a nyelvtani jeleknek, q pedig szintén mondatforma: (TUN)+, a csillag helyett + jel azt jelenti, hogy q bármilyen mondatforma lehet, kivétel az üres szó. Ez a szabályforma a környezetfüggő szabályforma. - S -> epsz, tehát üres szó. Ezt úgy használhatjuk a nyelvtanunkban, hogy S a kezdőszimbólum ugyanebben a nyelvtanban és ha ez a szabály használt, akkor S nem szerepelhet a szabályok jobboldalán. Tehát a szabályok jobboldala ne legyen közvetlen leképezhető üres szóra. 2-es típus: Itt is két szabályforma lehetséges és következik az 1-es típusúból. További megkötése, hogy az 1-es típusnál megismert szabályban a környezet, azaz q1 és q2 üres szó legyen! Tehát ebből következnek az alábbi szabályformák: - A -> q, ahol A eleme a nyelvtani jeleknek és q egy mondatforma, kivétel az üres szót (TUN)+. Ez a környezetfüggetlen szabályforma. - Ugyanaz mint az 1-es típusúnál: S -> epsz 3- típus: További megszorítás a 2-es típusúhoz képest, hogy q csak bizonyos formájú lehet. Három megengedett szabályforma van tehát: - A -> ab, ahol A és B nyelvtani jelek és a egy terminális jel. - A -> a, ahol A egy nyelvtani jel és a egy terminális jel. - Ugyanaz mint az -1es és 2-es típusnál: S -> epsz Mindhárom típusnál az S -> epsz szabályforma csak az egyéb szabályokkal nem levezethető üres szó levezetésére szolgál. Egyértelműen látható, hogy az egyes nyelvtanok egymás részhalmazai és a 0-ás típusú a "legnagyobb" ennek részhalmaza az 1-es, ennek a 2-es és a 2-esnek a 3-as. Church-tézis: Minden valamilyen konstruktív módon megadható nyelv leírható nyelvtannal. kiterjesztett nyelvtani típusok kiterjesztési tétel: Nem lesz vizsgán, így nem részletezem. e-mentesítés (e: üres szó): Az az eljárás mely eltűnteti az olyan szabályokat, amelyek jobb oldalán áll üres szó. láncszabályok: (A -> B ahol A,B eleme N) Olyan szabály, amelynek bal és jobb oldalán is 1-1 nyelvtani jel áll. láncmentesítés: A láncszabályokat eltűntető eljárás. hosszredukció: Álljon itt a példa: A -> ub, azt szeretnénk elérni, hogy u csak egy betű legyen. A hosszredukció az az eljárás, melyben az ilyen szabályoknál felbontással érjük el, amit szeretnénk, így több szabályt kapunk, de az már mind "jó". A -> ub-re pl. A -> t1z1; Z1 ->t2z2... Zk-1 ->tkb, ahol Z-k új nyelvtani jelek. - 2 -
Kuroda normálforma tétel: Tetszőleges 3-as nyelvcsaládba tartozó nyelv esetén, létezik olyan G nyelvtan, amely Kuroda normálformájú és L(G)=L, azaz a G Kuroda normálformájú nyelvtan által generált L nyelv, egyenlő a tetszőleges L nyelvünkkel. Kuroda normálforma szabályai: - S -> epsz, ilyenkor S kezdőszimbólum és nem állhat S a szabályok jobboldalán. - A ->t - A -> BC - AB -> AC - BA -> CA ahol A, B, C 1-1 nyelvtani jel és t egy terminális jel. Chomsky normálforma tétel: Tetszőleges 2-es nyelvcsaládba tartozó nyelv esetén, létezik olyan G nyelvtan, amely Chomsky normálformájú és L(G)=L, azaz a G Chomsky normálformájú nyelvtan által generált L nyelv, egyenlő a tetszőleges L nyelvünkkel. Chomsky normálforma szabályai: - S -> epsz, ahol S kezdőszimbólum és nem állhat S a szabályok jobboldalán. - A -> t - A -> BC ahol A, B, C 1-1 nyelvtani jel és t egy terminális jel. Greibach normálforma tétel: A tétel és bizonyítása nem lesz a vizsgán. Greibach normálforma szabályai: - S -> epsz, ahol S kezdőszimbólum és nem állhat S a szabályok jobboldalán. - A -> tq ahol A nyelvtani jel és t egy terminális jel és Q egy tetszőleges nyelvtani jelsorozat: N* 3-as normálforma szabályai: - A -> epsz - A -> ab ahol A és B nyelvtani jel és a terminális jel. Vegyük észre, hogy a Chomsky és Kuroda normálformánál csak S, mint kezdőszimbólumból volt levezethető üres szó, itt viszont tetszőleges A nyelvtani jelből is. rekurzív nyelvtani jel (balrekurzív, jobbrekurzív): Az A nyelvtani jel rekurzív, vagyis önbeágyazott, ha indul belőle egy olyan nem triviális levezetés alfa1aalfa2-re, ahol alfa1 és alfa2 eleme a terminális és nyelvtani jelek összességének. Egy A nyelvtani jel, akkor balrekurzív, ha alfa1 (azaz baloldali környezet) = üres szó és akkor jobbrekurzív, ha alfa 2 (azaz jobboldali környezete) üres szó. nyelvtan redukálása: A nyelvtan redukálása az, amikor a felesleges nyelvtani jeleket és szabályokat elhagyjuk. A felesleges jelek leképzése során zsákutcába visznek, vagyis belőlük semmilyen T*-beli szó nem vezethető le. Felesleges nyelvtani szabályok pedig azok, amelyek a kezdőszimbólumból nem elérhetőek. zsákutca-mentesítés: Első lépésben keressük meg a zsákutcákat, azaz az olyan részleképzéseket, melyekből nem tudunk tovább lépni, de az még nem T*-beli szó. A lényeg, hogy építsük fel azt a H halmazt, amely tartalmazza az összes elérhető nyelvtani jelet és végül ezt vonjuk ki az összes nyelvtani jelünkből. H halmaz konstrukciós lépéseit lásd a jegyzet 51. oldalán. összefüggő nyelvtan, összefüggővé alakítás redukált nyelvtan: Egy zsákutcamentes és összefüggő 2-es típusú nyelvtant redukáltnak nevezünk. - 3 -
rendezett nyelvtan: Egy G nyelvtan rendezett nyelvtan, hogyha a nyelvtani jelei megszámozhatóak úgy, hogy N = {A1,... An} és Ai -> Ajq egy szabály, akkor i<j és q eleme a terminális nyelvtani jeleknek. kvázi Greibach normálformájú nyelvtan zárt nyelvcsalád (jel) nyelvi operátorra: Egy nyelvcsalád akkor zárt egy nyelvi operátorra, ha a nyelvcsalád nyelvei a nyelvi operátor végrehajtásának hatására is az adott nyelvcsaládbeli nyelvek maradnak. zártsági tétel: Mind a négy nyelvosztály zárt az unió, a konkatenáció és a lezárás műveletére. veremautomata: Egy olyan speciális matematikai gép, amelyben n-verem van és a következőkből áll: A az automata lehetséges állapotainak véges halmaza, T egy ábécé itt a bemenő ábécé, az i. verem ábécé epsziloni, gamma az állapotátmeneti függvény, a0 eleme A-nak ez a kezdőállapot, az i. verem kezdőszimbóluma, F pedig részhalmaza A-nak és a végállapotok halmazát jelöli. konfiguráció: Azoknak az adatoknak az összessége, melyektől a gép elkövetkezendő működése függ. közvetlen és közvetett konfiguráció-átmenet: Közvetlen konfiguráció-átmenetről beszélünk, hogyha V veremautomata 1 lépésben vált át egyik konfigurációból a másikba. Közvetett konfigurációátmenet pedig a közvetlen átmenet reflexív, tranzitív lezártja. Azaz egyszerűen szólva, hogyha egy megadott állapotból egy másik állapotba több lépésen keresztül jutunk el. termináló konfiguráció: Az a konfiguráció, amelynek nincs már rákövetkezője. Az "utolsó lépés". végállapottal illetve üres veremmel elfogadó konfiguráció: Végállapottal elfogadó egy [f, epszilon, béta1... bétan] konfiguráció, hogyha f eleme F-nek (F a végállapotok halmaza). Üres veremmel elfogadó pedig akkor, hogyha béta1 = epszilon. determinisztikus veremautomata: Egy adott V n-verem determinisztikus, ha minden konfigurációnak legfeljebb egy rákövetkezője van. 0-vermek: Nincsen benne kiegészítő tár, működése az input jeltől és az aktuális állapottól függ csupán. A szavak elfogadása is csak végállapottal lehetséges, épp ezért elég simán elfogadásról beszélni. 0-vermek osztályozása: 4 osztály van, egyre több megkötéssel. Ezek részleteit lásd a jegyzet 74. oldalán. állapotátmenet függvény: Értékkészlete véges halmaz legyen. Igazából az a függvény, amely leírja az egyik konfigurációból másikba való lépést formálisan. Létezik kiterjesztése is. Kis Bar-Hillel lemma: Minden nyelvhez, amely a 3-as típusú nyelvcsaládba tartozik, van olyan n=n(l) eleme N nyelvfüggő konstans, hogy a nyelv minden szavának egy tetszőleges n-nél hosszabb vagy azzal egyenlő részszavában létezik egy elég rövid (n-nel egyenlő vagy annál kisebb, de 0-nál nagyobb) részszó, amely nem üres és beiterálható. adott L nyelv p eleme T*-ra vonatkozó maradéknyelve Lp: L nyelv p-re vonatkozó maradéknyelve, azokat az u szavakat adja meg, amelyekre igaz, hogy pu eleme az L nyelvnek. A determinisztikus automata A-beli q állapotra vonatkozó maradéka: Azokat az u szavakat tartalmazza, melyek hatására az automata q állapotból végállapotba jut. Myhill-Nerode tétel: Egy nyelv akkor és csak is akkor eleme a 3-as típusú nyelvcsaládnak, ha p-re vonatkozó maradéknyelve, ahol p a terminális szavak egy eleme, kisebb végtelennél, azaz véges. - 4 -
minimál automata: Egy 3-as típusú nyelvez adott minimális állapotszámú, véges, determinisztikus automatát a nyelv minimális automatájának hívjuk. minimál automata előállítása: lépések: 1. összefüggővé alakítás, 2. redukció összefüggő automata: Egy automata akkor összefüggő, hogyha minden állapotához (a) létezik egy olyan terminális szó (u), amellyel egy a0 állapotból az a állapotba léphetünk, azaz a kezdőállapotból elérhető ez az állapot. redukció, redukált automata: Ha két állapot ugyanazon szavak hatására kerül végállapotba, akkor azt nem tekintjük megkülönböztethető nyelveknek a nyelvelfogadás szempontjából. Redukált automatába ilyen állapotok nincsenek. Kleene tétele: A 3.as nyelvcsaládba tartozó nyelvek reguláris nyelvek. 3-as típusú nyelvosztály zárt a komplementer, a metszet, a különbség és a szimmetrikus differencia műveleteire. algoritmikusan eldönthető problémák: Egy adott probléma algoritmikusan eldönthető, ha létezik olyan algoritmus, mely igen válasszal áll le, ha a problémának van megoldása és nem választ ad, ha nincsen. G feletti szintaxisfa: A levezetések szerkezetét tudjuk vele ábrázolni. G tetszőleges 2-es típusú nyelvtan. A t nemüres fát G feletti szintaxisfának nevezzük, hogyha pontjai a nyelvtan terminális és nyelvtani jelei vagy az üres szóval vannak címkézve. Azaz T u N u {epsz}. Belső pontjai nyelvtani jelekkel vannak címkézve (N elemeivel) és ha egy belső pont címkéje X, a közvetlen leszármazottjai balról jobbra X1, X2.. Xk, akkor X -> X1X2... Xk egy szabály a nyelvtanunkban. legbal és legjobb levezetés: Ez hosszabb, mintsem, hogy itt leírjam és egy szép kis ábra is van hozzá a jegyzet 110. oldalán. legbal és legjobb mondatforma: Legbal, illetve legjobb levezetés során előforduló mondatformák. egyértelmű nyelvtan: Egy kiterjesztett 2-es típusú nyelvtan akkor egyértelmű, hogyha a nyelvtanunk feletti L nyelv minden szavának pontosan egy szintaxisfája létezik. egyértelmű nyelv: Egy 2-es típusú nyelv akkor egyértelmű, hogyha létezik hozzá olyan kiterjesztett 2-es típusú nyelvtan, amely egyértelmű. lényegesen nem egyértelmű nyelv: Egy 2-es típusú nyelvet, akkor nevezünk lényegesen nem egyértelmű nyelvnek, hogyha az adott nyelvhez nem létezik egyértelmű nyelvtan. Nagy Bar-Hillel lemma: Egy 2-es típusú nyelvben lévő minden elég hosszú szóban van két, egymáshoz elég közel álló, nem triviális, párhuzamosan beiterálható részszó. legbal kezdőszelet-egyeztetéses elemzés: Egy 2-es kiterjesztett nyelvtan legbal kezdőszeletegyeztetéses elemzésének hívjuk azt az elemzési módszert, amely során egy tetszőleges u szó egy S kezdőállapotból induló legbal levezetését konstruáljuk meg a levezetés során kialakult mondatforma terminális jeleiből álló kezdőszeletének az eredeti u szó kezdőszeleteivel való egyeztetésével. Ez akkor sikeresen, ha az a tetszőleges u szó, a nyelvtanunk felett lévő L nyelv egy szava. determinisztikus 1-vermek 1-es normálformájú 1-verem 2-es normálformájú 1-verem 3-as normálformájú 1-verem - 5 -
fordítóprogramok elemzései: lexikális elemzés, szintaxiselemzés, szemantikus elemzés szintaxiselemzési módszerek (top-down és bottom-up, left to right elemzők) LL(k) nyelvtanok LR(k) nyelvtanok Turing automaták: Turing automata elmélete nem lesz vizsgán, így nem tárgyalom. Viszont Turing programozás várható. - 6 -