Fordtprogramok 2 Programoz matematikus szak 20032004 es tanv








































- Slides: 40
Fordítóprogramok 2 Programozó matematikus szak 2003/2004 -es tanév II. félév Készítette: dr. Nagy Ferenc 2004. I. Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 1
Relációk - 1 Definíció: Hatványhalmaz Legyen H tetszőleges halmaz. H hatványhalmaza 2 H={A A H} Jelölés: HC jelenti H komplementerét H jelentése H számossága Definíció: H feletti reláció H H a és b relációban vannak jelölése (a, b) , vagy a b Definíció: Relációk kompozíciója Legyen , H H két reláció. Kompozíciójuk: ={(a, c) b: (a, b) , és (b, c) } Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 2
Relációk - 2 Definíció: Reláció k-dik hatványa k 0={(a, a) a H} 1= k+1= k , ha k 1 Definíció: Reláció tranzitív lezártja + += 2 3 … k … Definíció: Reláció reflexív, tranzitív lezártja * *= 0 + Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 3
Formális nyelvek - 1 Definíció: Ábécé Szimbólumok véges, nem üres halmaza Definíció: Szó Ábécé elemeiből képezett a 1 a 2…ak alakú sorozat, ahol k 0, a 1, a 2, …, ak Definíció: * A ábécé elemeiből képezhető összes szavak halmaza * ={a 1 a 2…ak k 0, a 1, a 2, …, ak } Ha k=0, akkor a szó üres szó, jele . Definíció: + + = * { } Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 4
Formális nyelvek - 2 Definíció: Szavak konkatenációja Legyen u, v * , a két szó konkatenációja (egymás után írása): uv * w 0= , wn=ww…w (n-szeri egymás után írás) Definíció: Szó prefixe Az x szó a w szó prefixe, ha van olyan y szó, melyre w=xy. minden szónak prefixe. Ha x , akkor valódi prefixről beszélünk. Definíció: Szó hossza ( w ) Ha w = , akkor w =0. Ha w , akkor w =1+ v , ha w=av valamely a és v *. Definíció: *, k = {w * w k} Fordítóprogramok FORD 01 (Mindig véges halmaz) Programozó matematikus III. évf. Miskolci Egyetem 5
Formális nyelvek - 3 Definíció: feletti nyelv (L) L * Definíció: Műveletek nyelvekkel, Reguláris és Bool műveletek Reguláris Legyen L 1, L 2 * két nyelv. Egyesítés 1. L 1 L 2 egyesítés Konkatenáció 2. L 1 L 2 metszet Iteráció 3. L 1L 2 különbség 4. L 1 C komplementer *-ra (L 1 C = * L 1) 5. L 1 L 2 nyelvek konkatenációja 6. L 1*= { } L 1 L 1 L 1 … az L 1 nyelv iteráltja Bool Egyesítés Metszet Komplementer Definíció: Nyelvosztály zártsága műveletre Az L nyelvosztály zárt a o műveletre, ha L 1, L 2 L maga után vonja, hogy L 1 o L 2 L Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 6
Generatív nyelvtanok - 1 Definíció: Generatív nyelvtan (G) G=(N, , P, S), ahol N a nemterminálisok ábécéje A terminálisok ábécéje, N = S N a kezdőszimbólum P alakú átírási szabályok véges halmaza A szabály baloldala A szabály jobboldala , (N )* -ban van legalább egy nemterminális szimbólum Definíció: Közvetlen deriváció (közvetlen levezetési reláció, G) Legyen , (N )* G , ha van olyan P szabály és vannak olyan ’, ’ (N )* szavak, hogy = ’ ’ és = ’ ’ Gn - n lépéses levezetés G+ - legalább egy lépéses levezetés G* - levezethetőség (esetleg nulla lépésben is) Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 7
Generatív nyelvtanok - 2 Definíció: G által generált nyelv L(G) Legyen G=(N, , P, S) generatív nyelvtan. L(G)={u * S G* u} Definíció: Ekvivalens nyelvtanok Legyenek G=(N, , P, S) és G’=(N’, ’, P’, S’) generatív nyelvtanok. Ekvivalensnek nevezzük őket, ha L(G)=L’(G’) Jelölés: a, b, c, d , u, v, w, x, y, z * Fordítóprogramok FORD 01 A, B, C, D N U, V, W, X, Y, Z (N ) , , , (N )* Programozó matematikus III. évf. Miskolci Egyetem 8
Generatív nyelvtanok - 3 Definíció: Chomsky nyelvosztályok 0 típusú nyelvtan (kifejezés struktúrájú), ha semmilyen korlátozás nincs 1 típusú nyelvtan (környezetfüggő), ha P-ben minden szabály A alakú, ahol , kivéve esetleg az S szabályt, mely esetben = = = , de ekkor S nem szerepelhet egyetlen szabálynak sem a jobboldalán 2 típusú nyelvtan (környezetfüggetlen), ha P-ben minden szabály A alakú. 3 típusú nyelvtan (reguláris, jobblineáris), ha P-ben minden szabály A x. B, vagy A x alakú. Definíció: Nyelv típusa Egy L * nyelvet i típusúnak mondunk (i=0, 1, 2, 3 lehet), ha van olyan i típusú nyelvtan, ami éppen L-et generálja. Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 9
Generatív nyelvtanok - 4 0 0 1 2 2 3 Nyelvtanok tartalmazása Fordítóprogramok FORD 01 1 3 Nyelvek tartalmazása Programozó matematikus III. évf. Miskolci Egyetem 10
A PL/0 nyelv generatív nyelvtana - 1 Betű a z A Z Szjegy 0 9 Előjel + - Azon Betű Azon Szjegy Azon Betű Szám Előjel Szjegy Szam Szjegy Aművjel + - Mművjel * / Rjel = <> < <= > >= Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 11
A PL/0 nyelv generatív nyelvtana - 2 Prog Blokk Cdef Vdef Pdef Ut Ceq Azon = Szam Clist , Ceq Clist Cdef CONST Ceq Clist ; Vlist , Azon Vlist Vdef VAR Azon Vlist ; Pdef PROC Azon ; Blokk ; Pdef Ut Értut Callut Zjel Ifut Whileut Értut Azon : = Kif Callut CALL Azon Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 12
A PL/0 nyelv generatív nyelvtana - 3 Utlist ; Ut Utlist Zjel BEGIN Ut Utlist END Ifut IF Felt THEN Út Whileut WHILE Felt DO Út Felt ODD Kif Rjel Kif Előjel Tag Ttag Aművjel Tag Ttag Tény Ttény Mművjel Tény Ttény Tény Azon Szám ( Kif ) Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 13
Reguláris nyelvek - 1 Definíció: Nemdeterminisztikus automata (M) M=(Q, , , q 0, F), ahol Q az állapotok halmaza, véges, nem üres az input ábécé q 0 Q a kezdő állapot F Q a végállapotok halmaza : Q 2 Q, az átmenetfüggvény Definíció: Determinisztikus automata Az M=(Q, , , q 0, F) automatát determinisztikusnak nevezzük, ha minden q Q és a esetén a (q, a) halmaz legfeljebb egyelemű. Definíció: Teljesen definiált automata Az M=(Q, , , q 0, F) automatát teljesen determináltnak nevezzük, ha minden q Q és a esetén a (q, a) halmaz legalább egyelemű. Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 14
Reguláris nyelvek - 2 Definíció: Automata konfigurációinak halmaza (C) C= Q * (q, a 1 a 2…an) jelentése: M a q állapotban van és az a 1 a 2…an jelsorozatot kapja inputként Definíció: Átmeneti reláció (├M) Tetszőleges (q; w), (q’; w’) C esetén a (q; w) ├M (q’; w’) reláció akkor és csak akkor áll fenn, ha w=aw’ valamely a -ra, és fennáll a q’ (q, a) tartalmazás. Definíció: Automata által felismert nyelv Az M=(Q, , , q 0, F) automata által felismert nyelven az L(M)={w * (q 0, w) ├M* (q, ) valamely q F-re} nyelvet értjük. Tétel: A nemdeterminisztikus automatákkal felismerhető nyelvek osztálya megegyezik a determinisztikus automatákkal felismerhető nyelvek osztályával. Lemma: Tetszőleges M=(Q, , , q 0, F) automatához megadható olyan M’=(Q’, , ’, q 0, F) teljesen definiált automata, melyre L(M)=L(M’). Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 15
Reguláris nyelvek - 3 Definíció: Reguláris kifejezések feletti reguláris kifejezésnek nevezzük az alábbi halmaz olyan U legszűkebb részhalmazát, amelyre az alább felsorolt tulajdonságok teljesülnek: A halmaz: ( { , (, ), +, *})* Tulajdonságok: – a szimbólum eleme U-nak. – minden a -ra az a szimbólum eleme U-nak – ha R 1, R 2 U, akkor (R 1)+(R 2), (R 1)* is elemei U-nak. Definíció: Egy ábécé feletti R reguláris kifejezés által meghatározott R nyelv - Ha R= mint szimbólum, akkor R = , mint nyelv - Ha R=a, mint szimbólum, akkor R = {a}, mint nyelv - Ha R=(R 1)+(R 2), akkor R = R 1 R 2 - Ha R=(R 1)(R 2), akkor R = R 1 R 2 - Ha R=(R 1)*, akkor R = R 1 * Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 16
Reguláris nyelvek - 4 Definíció: Reguláris nyelv Egy L * -nyelvet regulárisnak nevezünk, ha reprezentálható (meghatározható) reguláris kifejezéssel, azaz, ha van olyan feletti R reguláris kifejezés, amelyre L= R . Lemma: A reguláris nyelvek osztálya zárt a reguláris műveletekre nézve. Megjegyzés: Minden véges nyelv reguláris. Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 17
Reguláris nyelvek - 5 Lemma: Tetszőleges ábécé esetén minden feletti L reguláris nyelv generálható 3 típusú nyelvtannal Definíció: Láncszabály Tetszőleges G=(N, , P, S) nyelvtan esetén az A B alakú szabályokat láncszabályoknak nevezzük Amennyiben P-ben nincsenek láncszabályok, úgy a G-t láncszabálymentesnek nevezzük Lemma: Legyen G=(N, , P, S) környezetfüggetlen nyelvtan. Megadható olyan G’=(N, , P’, S) láncszabálymentes környezetfüggetlen nyelvtan, amelyre L(G’)=L(G). Ha G 3 típusú, akkor G’ is 3 típusú lesz. Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 18
Láncszabálymentesítési algoritmus G=(N, , P, S)-ből képezünk egy G=(N, , P’, S) nyelvtant A. Minden A N nemterminálisra képezzük az NA halmazt, ahol: NA={B N A * B láncszabályokkal} NA meghatározási algoritmusa 1. N 0={A}, i=0 2. Legyen Ni+1=Ni {C N B Ni hogy B C P} 3. Ha Ni+1=Ni , akkor megállunk és NA= Ni, egyébként i=i+1, és a 2. lépés következik. B. Ezután P’ kialakítása: P’= Minden A N -re Minden B NA -ra Minden B P -re Ha B nem láncszabály vegyük fel P’-be az A szabályt. Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 19
Szabályegyszerűsítés 3 típusú nyelvre Lemma: Legyen G=(N, , P, S) 3 típusú láncszabálymentes nyelvtan. Akkor van olyan G’=(N’, , P’, S) 3 típusú nyelvtan, amelyre L(G’)=L(G) és P-ben minden szabály A a. B vagy A alakú, ahol A, B N és a . Szabályegyszerűsítési algoritmus 3 típusú nyelvre G=(N, , P, S)-ből képezünk egy G=(N’, , P’, S) nyelvtant (A x. B, A x, A alakú szabályok vannak ) 1. A a. B P, A P szabályt felvenni P’-be 2. A a 1 a 2…an. B P (n>1) esetén felvenni P’-be a következő szabályokat: A a 1 A 1, A 1 a 2 A 2, …, An-1 an. B 3. A a 1 a 2…an P (n>1) esetén felvenni P’-be a következő szabályokat: A a 1 A 1, A 1 a 2 A 2, …, An-1 an. An , An A 1, A 2, … An új nemterminálisok lesznek: N’=N {A 1, A 2, … An } Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 20
Reguláris nyelvek - 6 Lemma: Tetszőleges ábécé feletti 3 típusú nyelv felismerhető automatával. G=(N, , P, S) és M=(Q, , , q 0, F) megfeleltetés: Feltesszük, hogy G láncszabálymentes és szabályai A a. B és A alakúak. Q=N q 0=S F={A N A P} (A, a)={B N A a. B P} Tétel: (Kleene tétele) Tetszőleges ábécé feletti, automatával felismerhető nyelv reguláris. Lemma: Tetszőleges ábécé feletti az alábbi 3 nyelvosztály megegyezik - 3 típusú - automatával felismerhető - reguláris Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 21
Reguláris nyelvek - 7 Lemma: (Pumpáló lemma reguláris nyelvekre) Legyen L *, tetszőleges reguláris nyelv. Akkor megadható olyan (L-től függő) k>0 egész szám, hogy minden w L esetén ha w k, akkor vannak olyan w 1, w 2, w 3 *, szavak, melyekre teljesülnek az alábbiak: - w=w 1 w 2 w 3 - 0< w 2 k - Minden n 0 -ra w 1 w 2 nw 3 L. Lemma: A reguláris nyelvek osztálya zárt a metszetre és a kivonásra. Tétel: A reguláris nyelvek osztálya zárt a Boole műveletekre nézve. Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 22
Környezetfüggetlen nyelvek - 1 Definíció: Derivációk (levezetések) Legyen G=(N, , P, S) környezetfüggetlen nyelvtan. Az 0 1 … n alakú kifejezéseket derivációknak nevezzük. Ha a fenti derivációban minden i=1, 2, …, n esetén i úgy keletkezik, hogy az i-1 -ben a baloldalról nézve legelső nemterminálist helyettesítjük egy rá vonatkozó szabály jobboldalával, akkor baloldali derivációról beszélünk. ( l) Analóg módon beszélhetünk jobboldal derivációról. ( r) Definíció: Mondatforma, mondat -t mondatformának nevezzük, ha teljesül, hogy S * . x-t mondatnak nevezzük, ha teljesül, hogy S * x. Definíció: Részmondat, egyszerű részmondat Legyen = 1 2 egy mondatforma. -t az részmondatának nevezzük, ha van olyan A szimbólum, hogy S * 1 A 2. és A * . Egyszerű részmondatról beszélünk, ha a fentiekben A teljesül. Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 23
Környezetfüggetlen nyelvek - 2 Definíció: Derivációs fák Legyen X (N ). Az X gyökerű derivációs fák halmazán (címkézett, rendezett) fák legszűkebb olyan DX halmazát értjük, amelyre teljesülnek az alábbiak: 1. Az a fa, amelynek egyetlen szögpontja (csak gyökere) van és annak címéje X, eleme DX-nek. Jele X. 2. Ha X P, akkor az a fa, melynek gyökere X-szel van címkézve, a gyökerének egyetlen leszármazottja van, aminek címkéje , eleme DX-nek. Jele X[ ]. 3. Ha X X 1…Xn P, és t 1 DX 1, …, tn DXn, akkor az a fa, melynek gyökere X-szel van címkézve, a gyökérből n él indul rendre a t 1, …, tn fák gyökeréhez, eleme DX-nek. Jele X[t 1, …, tn]. Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 24
Környezetfüggetlen nyelvek - 3 Definíció: Derivációs fa magassága, határa Legyen t egy X gyökerű derivációs fa. Magasságát h(t)-vel, határát fr(t)-vel jelöljük és az alábbi módon definiáljuk. 1. Ha t=X, akkor h(t)=0 és fr(t)=X 2. Ha t=X[ ], akkor h(t)=1 és fr(t)= 3. Ha t=X[t 1, …, tn], akkor h(t)=1+max{h(ti) 1 i n} és fr(t)=fr(t 1)…fr(tn). Tétel: Tetszőleges X (N ) és (N )* esetén X * akkor és csak akkor áll fenn, ha van olyan t DX derivációs fa amelyre fr(t)= . Tétel: Tetszőleges X (N ) és w * esetén a következő három állítás ekvivalens: 1. X * w 2. X l* w 3. X r* w Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 25
Környezetfüggetlen nyelvek - 4 Definíció: Veremautomata (pushdown automata) P=(Q, , q 0, Z 0, F), ahol Q az állapotok véges halmaza az input ábécé a verem ábécé q 0 Q a kezdő állapot Z 0 a verem kezdőszimbóluma F a végállapotok halmaza : Q ( { }) 2 Q * az átmeneti függvény Definíció: Veremautomata konfigurációinak halmaza C=Q * * Definíció: Átmeneti reláció ├ P C C, tetszőleges p, q Q, a ( { }), w * , Z és , *-ra (q, aw, Z ) ├ P (p, w, ) akkor és csakis akkor áll fenn, ha (p, ) (q, a, Z) Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 26
Környezetfüggetlen nyelvek - 5 Definíció: Veremautomata által végállapotokkal felismert nyelv Lf(P)={w * (q 0, w, Z 0) ├ P*(q, , ), ahol q F és * } Definíció: Veremautomata által üres veremmel felismert nyelv L (P)={w * (q 0, w, Z 0) ├ P*(q, , ), ahol q Q } Tétel: A veremautomatákkal végállapotokkal felismerhető nyelvek osztálya megegyezik a veremautomatákkal üres veremmel felismerhető nyelvek osztályával. Lemma: Tetszőleges környezetfüggetlen nyelv felismerhető veremautomatával. G=(N, , R, S) hez a veremautomata P=(Q, , q 0, Z 0, F) megadása: =N , Z 0=S, Q={q}, q 0=q, F= (q, , A)={(q, ) A R} minden A N-re (q, a, a)={(q, )} minden a -ra Lemma: Minden veremautomatával felismerhető nyelv környezetfüggetlen. Tétel: A környezetfüggetlen nyelvek osztálya megegyezik a veremautomatákkal felismerhető nyelvek osztályával. Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 27
Környezetfüggetlen nyelvtanok átalakításai - 1 Definíció: -mentes környezetfüggetlen nyelvtan Egy G=(N, , P, S) környezetfüggetlen nyelvtan -mentes, ha P nem tartalmaz A alakú szabályokat, kivéve esetleg az S szabályt. Ha azonban S P, akkor S nem szerepelhet semelyik P-beli szabály jobboldalán. Lemma: Tetszőleges G=(N, , P, S) környezetfüggetlen nyelvtanhoz megkonstruálható olyan -mentes G’=(N’, , P’, S’) környezetfüggetlen nyelvtan, melyre L(G)=L(G’). Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 28
-mentesítési algoritmus A. Először megadunk egy olyan -mentes G 1=(N, , P 1, S) nyelvtant, amelyre L(G 1)=L(G){ }. Ecélból meghatározzuk azon nemterminálisok H halmazát, amelyekből levezethető . 1. Legyen H 1={A N A P} és i=1 2. Legyen Hi+1=Hi {A N ( A P) úgy, hogy Hi*} 3. Ha Hi+1=Hi , akkor megállunk és H= Hi, egyébként i=i+1, és a 2. lépés következik. B. Ezután G 1 megadásához a P 1 -et úgy adjuk meg, mint a legszűkebb olyan halmaz, amelyre minden olyan A P szabály ( ) esetén, minden olyan A 1 ( 1 ) szabály P 1 -ben van, melyben 1 úgy keletkezik -ból, hogy töröljük belőle a H-beli nemterminálisok 0 vagy több előfordulását. ( L(G) S H)) C. G 1 ismeretében G’ megadása: Ha L(G), akkor G’=G, egyébként G’={N {S’}, , P 1 {S’ S, S’ }, S’} Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 29
Környezetfüggetlen nyelvtanok átalakításai - 2 Definíció: használható szimbólum Legyen G=(N, , P, S) környezetfüggetlen nyelvtan. Az X (N ) szimbólumról azt mondjuk, hogy használható, ha vannak olyan x, y, z * szavak, melyekre S *x. Xz *xyz. Definíció: termináló szimbólum Legyen G=(N, , P, S) környezetfüggetlen nyelvtan. Az A N nemterminális szimbólumról azt mondjuk, hogy termináló, ha van olyan z * szó, melyre A *z. Lemma: Tetszőleges G=(N, , P, S) környezetfüggetlen nyelvtanhoz, ha L(G) , megadható olyan G 1=(N 1, , P 1, S) környezetfüggetlen nyelvtan, melyre L(G)=L(G 1) és minden N 1 -beli nemterminális termináló. Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 30
Nem termináló nemterminálisok kiszűrése Nem termináló nemterminálisok kiszűrési algoritmusa A. Először kiszámítjuk az N-beli termináló nemterminálisok U halmazát az alábbi iterációval. 1. Legyen U 1={A N ( A x P) valamely x *-ra} és i=1 2. Legyen Ui+1=Ui {A N ( A P) úgy, hogy (Ui )*} 3. Ha Ui+1=Ui , akkor megállunk és U= Ui, egyébként i=i+1, és a 2. lépés következik. (L(G) S U) B. G 1 nyelvtan megadása feltételezve, hogy L(G) , azaz S U : Legyen N 1=U és legyen P 1 azon P-beli szabályok összessége, amelyek csak (N 1 )-beli szimbólumokat tartalmaznak. Ezután G 1=(N 1, , P 1, S). Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 31
Környezetfüggetlen nyelvtanok átalakításai - 3 Definíció: elérhető szimbólum Legyen G=(N, , P, S) környezetfüggetlen nyelvtan. Az X (N ) szimbólumról azt mondjuk, hogy elérhető, ha vannak olyan , (N )*-beli szavak, amelyekre S * X. Lemma: Tetszőleges G=(N, , P, S) környezetfüggetlen nyelvtanhoz, ha -ben van legalább egy elérhető terminális, megadható olyan G’=(N’, ’, P’, S) környezetfüggetlen nyelvtan, melyre L(G)=L(G’) és G’ minden szimbóluma elérhető. Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 32
Nem elérhető szimbólumok kiszűrése Nem elérhetö szimbólumok kiszűrési algoritmusa A. Először kiszámítjuk az (N )-beli elérhető szimbólumok H halmazát az alábbi iterációval. 1. Legyen H 0=S és i=0 2. Legyen Hi+1=Hi {X (N ) ( A X P) úgy, hogy A Hi} 3. Ha Hi+1=Hi , akkor megállunk és H= Hi, egyébként i=i+1, és a 2. lépés következik. (X elérhető i, hogy X Hi) B. G’ nyelvtan megadása: N’=N H, ’= H, és legyen P’ azon P-beli szabályok összessége, amelyek csak (N’ ’)-beli szimbólumokat tartalmaznak. Ezután ha ’ , akkor legyen G’=(N’, ’, P’, S). Tétel: Legyen G=(N, , P, S) környezetfüggetlen nyelvtanhoz. Ha L(G) és -ban van elérhető terminális, akkor megadható olyan G’=(N’, ’, P’, S) környezetfüggetlen nyelvtan, melyre L(G)=L(G’) és G’ minden szimbóluma használható. Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 33
Balrekurzió megszüntetése - 1 Definíció: balrekurziv tulajdonság - Közvetlen balrekurzió: Azt mondjuk, hogy A közvetlenül balrekurzív G-ben, ha P-ben van A A alakú szabály - Balrekurzív szimbólum: Az A balrekurzív G-ben, ha van olyan szó, amelyre A + A - Balrekurzív nyelvtan: A G nyelvtan balrekurzív, ha tartalmaz legalább egy balrekurzív nemterminálist. Lemma: Tetszőleges G=(N, , P, S) nyelvtan és A N esetén eldönthető, hogy A balrekurzív-e G-ben. Algoritmus: Megkonstruáljuk a HA={B N A + B } halmazt és megnézzük, hogy A HA teljesül-e. HA konstruálásának iterációja: 1. Legyen i=0 és Hi={B N A B P} 2. Legyen Hi+1=Hi {B N (C Hi ): C B P } 3. Ha Hi+1=Hi , akkor megállunk és HA = Hi, egyébként i=i+1, és a 2. lépés következik. Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 34
Balrekurzió megszüntetése - 2 Lemma: Legyen G=(N, , P, S) környezetfüggetlen nyelvtan és legyen A B P. Legyenek a B baloldalú szabályok B 1 … n. Legyen P’=(P{A B } {A 1 , … A n }) és legyen G’=(N, , P’, S). Akkor L(G)=L(G’). A fenti transzformációt 1 -es típusú transzformációnak nevezzük. Megőrzi a nyelvet. Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 35
Balrekurzió megszüntetése - 2 Lemma: Legyen G=(N, , P, S) környezetfüggetlen nyelvtan és legyen A N közvetlen balrekurzív és legyenek az A baloldalú szabályok A A 1 … A n 1 … m , ahol 1, …, m egyike sem kezdődik A-val. Legyen N 1=N {A’}, ahol A’ (N ) egy új nemterminális Legyen P 1=(P{A A 1, … A A n} P’, ahol P’={A 1 A’, … A m. A’} {A’ 1 A’, … A’ n A’} {A’ 1 , … A’ n } és legyen G 1=(N 1, , P 1, S). Akkor L(G)=L(G 1) és A nem közvetlenül balrekurzív G 1 -ben. A fenti transzformációt 2 -es típusú transzformációnak nevezzük. Megörzí a nyelvet és eggyel csökkenti a közvetlenül balrekurzív nemterminálisok számát. Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 36
Balrekurzió megszüntetése - 3 Tétel: Tetszőleges G=(N, , P, S) környezetfüggetlen nyelvtanhoz megkonstruálható olyan G 1=(N 1, , P 1, S) környezetfüggetlen nyelvtan, amely nem tartalmaz közvetlenül balrekurzív nemterminálisokat és amelyre L(G)=L(G 1). Tétel: Tetszőleges G=(N, , P, S) környezetfüggetlen nyelvtanhoz megkonstruálható olyan G’ nem balrekurzív környezetfüggetlen nyelvtan, amelyre L(G)=L(G’). Konstruktív algoritmus: 1. G-ből kiküszöböljük a közvetlenül balrekurzív nemterminálisokat a 2 -es típusú transzformáció alkalmazásával 2. Ellenőrizzük, maradt-e balrekurzív nemterminális. Ha nem maradt, akkor készen vagyunk. Ha maradt, akkor a balrekurzív nemterminálisra 1 -es típusú transzformációt végzünk. Ezután az 1. pontnál folytatjuk. Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 37
Bar-Hillel lemma Lemma: Bar-Hillel lemma Legyen L * tetszőleges környezetfüggetlen nyelv. Akkor megadhatók olyan (L -től függő) p, q>0 egész számok, hogy minden w L esetén, ha w >p, akkor vannak olyan w 1, w 2, w 3, w 4, w 5 * szavak, melyekre teljesülnek az alábbi feltételek: 1. w= w 1 w 2 w 3 w 4 w 5 2. w 2 w 3 w 4 q, 3. w 2 w 4 , 4. minden n>0 -ra w 1 w 2 nw 3 w 4 nw 5 L Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 38
Környezetfüggetlen nyelvek zártsága Tétel: A környezetfüggetlen nyelvek osztálya zárt a reguláris műveletekre nézve. Lemma: A környezetfüggetlen nyelvek osztálya nem zárt a metszetre. Lemma: A környezetfüggetlen nyelvek osztálya nem zárt a komplementerre. Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 39
Determinisztikus veremautomaták Definíció: Determinisztikus veremautomata Azt mondjuk, hogy a P=(Q, , q 0, Z 0, F) veremautomata determinisztikus, ha minden q Q-ra és Z -ra a következő két feltétel valamelyike teljesül: 1. (q, , Z)= és minden a -ra a (q, a, Z) halmaz legfeljebb egy elemű, vagy 2. Minden a -ra (q, a, Z) = és a (q, , Z) halmaz legfeljebb egy elemű. Tétel: A determinisztikus automatákkal felismerhető nyelvek osztálya valódi részosztálya a veremautomatákkal felismerhető nyelvek osztályának. Fordítóprogramok FORD 01 Programozó matematikus III. évf. Miskolci Egyetem 40