Méret: px
Mutatás kezdődik a ... oldaltól:

Download ""

Átírás

1 Formális nyelvek és fordítóprogramok Könyvészet 1. Csörnyei Zoltán, Kása Zoltán, Formális nyelvek és fordítóprogramok, Kolozsvári Egyetemi Kiadó, Csörnyei Zoltán, Fordítóprogramok, Typotex Kiadó, Budapest, Csörnyei Zoltán, Fordítási algoritmusok, Erdélyi Tankönyvtanács, Kolozsvár, Demetrovics János, Denev, J., Pavlov, R., A számítástudomány matematikai alapjai, Nemzeti Tankönyvkiadó, Budapest, Fülöp Zoltán, Formális nyelvek és szintaktikus elemzésük, Polygon, Szeged, Livovschi, L., Popovici, C. P., Georgescu, H., Țăndăreanu, N., Bazele informaticii, Editura Didactica şi Pedagogică, Bucureşti, Manna, Z., Programozáselmélet, Műszaki Könyvkiadó, Budapest, Révész György, Bevezetés a formális nyelvek elméletébe, Akadémiai Kiadó, Budapest, Bach Iván, Formális nyelvek, Typotex, Budapest,

2 Alapfogalmak ábécé: szimbólumok (jelek) egy nem üres, véges halmaza Például Σ = {a, b, c, d, 0, 1} ábécé betűi: a, b, c, d, 0, 1. a 1 a 2... a n szó, a 1, a 2,..., a n Σ, n 0, n 0 a szó hossza Ha w = a 1 a 2... a n, akkor w = n. n = 0, üres szó: ε (vagy λ) Σ = {a 1 a 2... a n n 0, a 1, a 2,..., a n Σ} Σ + = Σ \ {ε}, Σ n Σ = Σ 0 Σ 1... Σ n... és Σ + = Σ 1 Σ 2... Σ n... Ha u = a 1 a 2... a m és v = b 1 b 2... b n, akkor u = v, ha m = n, és a i = b i, i = 1, 2,..., n. Σ -ban: konkatenáció (illesztés, szorzat, összefűzés) u = a 1 a 2... a m, v = b 1 b 2... b n : = uv = a 1 a 2... a m b 1 b 2... b n uv = u + v asszociatív, nem kommutatív, van egységeleme = Σ monoid (egységelemes félcsoport) szavak hatványozása: Ha u Σ akkor u 0 = ε u n = u n 1 u, n 1 u = a 1 a 2... a n szó tükörképe u 1 = a n a n 1... a 1 (jelölések: u R, ũ) ( u 1 ) 1 = u és (uv) 1 = v 1 u 1. 2

3 v részszava u-nak, ha p, q szavak úgy, hogy u = pvq. Ha pq ε, akkor v valódi részszava u-nak. p az u kezdőszelete (prefixuma), q pedig végszelete (szufixuma) L Σ : Σ feletti nyelv (formális nyelv) üres nyelv, {ε} az üres szóból álló nyelv Műveletek nyelvekkel L, L 1, L 2 egy-egy Σ feletti nyelv egyesítés: L 1 L 2 = {u Σ u L 1 vagy u L 2 } metszet: L 1 L 2 = {u Σ u L 1 és u L 2 } különbség: L 1 \ L 2 = {u Σ u L 1 és u L 2 } komplementum (v. komplementer nyelv): L = Σ \L (szokásos jelölése még L ) szorzat: L 1 L 2 = {uv u L 1, v L 2 } nyelv hatványa: L 0 = {ε}, L n = L n 1 L, n 1 nyelv iteráltja: L = i=0 Li = L 0 L L 2... L i... L + = L \ {ε}, L + = L i. i=1 tükrözés: L 1 = {u 1 u L} ( L 1 ) 1 = L, ( L 1 ) n = (L n ) 1 reguláris műveletek: egyesítés, szorzás, iteráció 3

4 Nyelvek megadása Nyelvek megadása elemeik felsorolásával Nyelvek például: L 1 = {ε, 0, 1}, L 2 = {a, aa, aaa, ab, ba, aba}, L 3 = {ε, ab, aabb, aaabbb, aaaabbbb...} Nyelvek megadása tulajdonság segítségével L 4 = {a n b n n = 0, 1, 2,...} (tehát L 4 = L 3 ) L 5 = {uu 1 u Σ }, L 6 = {u {a, b} n a (u) = n b (u)}, ahol n a (u) az u szóban levő a betűk számát jelöli. Nyelvek megadása nyelvtannal generatív nyelvtan vagy nyelvtan (grammatika) Generatív nyelvtan a G = (N, T, P, S) rendezett négyes, ahol N, a változók (nemterminális jelek) ábécéje, T, a terminális jelek ábécéje, ahol N T =, P (N T ) N(N T ) (N T ) véges halmaz, vagyis P az (u, v) alakú helyettesítési szabályok vagy produkciók véges halmaza, ahol u, v (N T ), és u tartalmaz legalább egy nemterminális jelet. (u, v) jelölés helyett u v is használható. S N a nyelvtan kezdőszimbóluma. Az u v, azaz (u, v) szabályban: u bal, v pedig jobb oldal. Rövidítés: u v 1, u v 2,..., u v r helyett u v 1 v 2... v r 4

5 (N T ) halmazban a közvetlen levezetés v. közvetlen deriváció reláció: u = v, ha u = p 1 pp 2, v = p 1 qp 2 és (p, q) P. Más jelek: vagy a =. = helyett lehet = G A = reláció reflexív és tranzitív lezártját u = v, ha w 0, w 1,..., w n (N T ), n 0, = jelöli: levezetés vagy deriváció. u = w 0,, w 0 = w 1, w 1 = w 2,..., w n 1 = w n, w n = v vagy w 0 = w 1 = w 2 =... = w n 1 = w n u + = v, ahol n 1 (u = v esetében, ha n = 0, akkor u = v.) A G = (N, T, P, S) nyelvtan által generált nyelv: L(G) = {u T S = u}. Példa. Legyen G = (N, T, P, S), ahol N = {S}, T = {a, b}, P = {S ab, S asb}. L(G) = {a n b n n 1}, mivel vagy S S = G asb = G a 2 Sb 2 = G... = G a n 1 Sb n 1 = G a n b n, = G a n b n. 5

6 G 1 és G 2 nyelvtanok ekvivalensek: G 1 = G2, ha L(G 1 ) = L(G 2 ). Példa. 1. Adott a következő két nyelvtan, G 1 = ({S}, {a, b}, {S asb, S ε}, S) és G 2 = ({S}, {a, b}, {S asb, S ab}, S). Ekkor L(G 1 ) \ {ε} = L(G 2 ). A két nyelvtan nem ekvivalens. 2. A következő két nyelvtan ekvivalens, mivel mindegyik az {a n b n c n n 1} nyelvet generálja. G 1 = (N 1, T, P 1, S 1 ), ahol N 1 = {S 1, X, Y }, T = {a, b, c}, P 1 = {S 1 abc, S 1 axbc, Xb bx, Xc Y bcc, by Y b, ay aax, ay aa}. G 2 = (N 2, T, P 2, S 2 ), ahol N 2 = {S 2, A, B, C}, P 2 = {S 2 as 2 BC, S 2 abc, CB BC, ab ab, bb bb, bc bc, cc cc}. Tétel. Létezik olyan formális nyelv, amelyet nem lehet nyelvtannal megadni. A bizonyításhoz kódoljuk a nyelvtanokat. Egy adott G = (N, T, P, S) nyelvtan esetében legyen N = {S 1, S 2,... S n }, T = {a 1, a 2,... a m } és S = S 1. A kódolás a következô: S i kódja 10 } 11.{{.. 11} 01, a i kódja 100 } 11.{{.. 11} 001 i-szer i-szer A kódolásban a jeleket 000 választja el, a nyíl jele 0000, a szabályokat pedig jelsorozattal választjuk el. Nyílván, elég csak a szabályokat kódolni. Példaként vegyük a következô nyelvtant: 6

7 G = ({S}, {a, b}, {S asb, S ab}, S). S kódja 10101, a kódja , b kódja A nyelvtan kódja: }{{} 0000 } {{} 000 } {{} 000 } {{} } {{} 0000 } {{} 000 } {{} Ennek a kódolásnak az alapján a nyelvtanok sorba rendezhetôk, elôször a kód hossza szerint, majd az azonos hosszúságúak esetében ábécésorrendbe: G 1, G 2,..., G k,.... Tekintsük most a T ábécé fölötti nyelvek halmazát: L T = {L L T }. A T halmaz megszámlálhatóan végtelen, hisz szavai sorrendbe írhatók hosszuk szerint, azon belül pedig ábécésorrendbe. Legyen ez a sorrend s 0, s 1, s 2,..., ahol természetesen s 0 = ε. Ekkor minden L T nyelvnek megfeleltethetünk egy b 0, b 1, b 2,... végtelen bináris sorozatot a következôképpen: { 1, ha si L b i = i = 0, 1, 2,... 0, ha s i L Könnyű belátni, hogy az így keletkezett bináris sorozatok halmaza megszámlálhatatlanul végtelen, hisz minden sorozat elképzelhetô úgy, mint egy 1-nél kisebb pozitív valós szám kettes számrendszerbeli ábrázolása (a tizedesvesszôt az elsô számjegy elé képzeljük). Fordítva is igaz, hogy minden 1-nél kisebb pozitív szám kettes számrendszerbeli ábrázolása megfelel egy ilyen sorozatnak, ha a tizedesvesszô utáni részt vesszük. Mivel a (0, 1) intervallum kontinuum számosságú, az lesz a végtelen bináris sorozatok halmaza is. Tehát L T is kontinuum számosságú. Mivel a formális nyelvek halmaza kontinuum számosságú, a nyelvtanok megszámlálhatóan végtelen halmaza és a nyelvek kontinuum számosságú halmaza között nem létezik kölcsönös és egyértelmž megfeleltetés. Tehát, létezik olyan formális nyelv, amelyet nem lehet nyelvtannal megadni. 7

8 Chomsky-féle nyelvosztályok Ha a helyettesítési szabályokra bizonyos megkötéseket teszünk, a következő négy nyelvtantípust különböztethetjük meg. A G = (N, T, P, S) nyelvtan 0-típusú (általános vagy mondatstruktúrájú), ha semmilyen megkötést nem teszünk a helyettesítési szabályaira. 1-típusú (környezetfüggő), ha minden szabálya uxv uwv alakú, ahol X N, u, v (N T ), w (N T ) +. Ezenkívül megengedhető az S ε szabály is, ha S nem szerepel szabály jobb oldalán. 2-típusú (környezetfüggetlen), ha minden szabálya X w alakú, ahol X N, w (N T ) +. Ezenkívül megengedhető az S ε szabály is, ha S nem szerepel szabály jobb oldalán. 3-típusú (reguláris), ha szabályai X ay, X a alakúak, ahol a T és X, Y N. Ezenkívül megengedhető az S ε szabály is, ha S nem szerepel szabály jobb oldalán. Ha G i-típusú nyelvtan, akkor az L(G) nyelvet szintén i-típusúnak (általánosnak, környezetfüggőnek, környezetfüggetlennek, regulárisnak) nevezzük. Egy L nyelv i-típusú (i = 0, 1, 2, 3), ha létezik egy i-típusú G nyelvtan, amelyik az L nyelvet generálja, vagyis L = L(G). Jelölje L i (i = 0, 1, 2, 3) az i-típusú nyelvek osztályát. Ekkor bizonyítható, hogy L 0 L 1 L 2 L 3. A nyelvtantípusok fenti értelmezése alapján a bennfoglalás ( ) nyilvánvaló, de a szigorú bennfoglalás ( ) bizonyításra szorul. Megjegyezzük, hogy a nyelvtantípusokat néhol kicsit másképpen értelmezik, a 2- és 3-típusoknál megengednek tetszőleges X ε szabályokat is. A regulási nyelvtant úgy is lehet értelmezi, hogy szabályai X uy, X u alakúak, ahol u T. 8

9 Példák. Környezetfüggő nyelvtan G 1 = (N 1, T 1, P 1, S 1 ), ahol N 1 = {S 1, A, B, C}, T 1 = {a, 0, 1} P 1 elemei: S 1 ACA AC AACA ABa AaB B AB A A 0 1 Az L(G 1 ) nyelv olyan uav szavakból áll, ahol u, v {0, 1} és u v. Környezetfüggetlen nyelvtan G 2 = (N 2, T 2, P 2, K), ahol N 2 = {K, T, F }, T 2 = {+,, (, ), a} P 2 elemei: K K + T T T T F F F (K) a Az L(G 2 ) olyan algebrai kifejezésekből áll, amelyek a T 2 halmaz elemeiből képezhetők. Reguláris nyelvtan G 3 = (N 3, T 3, P 3, S 3 ), ahol N 3 = {S 3, A, B}, T 3 = {a, b} P 3 elemei: S 3 aa A ab a B ab bb a b Az L(G 3 ) nyelv olyan, a és b betűkből képezhető szavakból áll, amelyek legalább két a-val kezdődnek. 9

10 kasa/formalis.htm Chomsky-féle hierarchia G = (N, T, P, S) nyelvtan: 0-s típusú (általános vagy mondatszerkezet ), ha semmilyen megkötést nem teszünk a helyettesítési szabályaira. 1-es típusú (környezetfügg ), ha minden szabálya αaγ αβγ alakú, ahol A N, α, γ (N T ), β (N T ) +. Ezenkívül megengedhet az S ε szabály is, ha S nem szerepel egyetlen szabály jobb oldalán sem. 2-es típusú (környezetfüggetlen), ha minden szabálya A β alakú, ahol A N, β (N T ) +. Ezenkívül megengedhet az S ε szabály is, ha S nem szerepel egyetlen szabály jobb oldalán sem. 3-as típusú (reguláris), ha szabályai A ab vagy A a alakúak, ahol a T és A, B N. Ezenkívül megengedhet az S ε szabály is, ha S nem szerepel egyetlen szabály jobb oldalán sem. Minden véges nyelv reguláris. L 0 L 1 L 2 L 3. Ha u = a 1 a 2... a n eleme a nyelvnek, akkor bevezetjük a következ szabályokat: S a 1 A 1, A 1 a 2 A 2,... A n 2 a n 1 A n 1, A n 1 a n, ahol S a nyelvtan kezd szimbóluma, A 1,..., A n 1 pedig különböz nemterminálisok. Ha az üres szó is eleme a nyelvnek, akkor azt az S ε szabállyal generáljuk. Az üres halmaz szintén reguláris nyelv, hisz például a G = ({S}, {a}, {S as}, S) reguláris nyelvtan az üres halmazt generálja. 1

11 Átnevezések kiküszöbölése átnevezés: A B alakú szabály, ahol A, B N G = (N, T, P, S) átnevezéseket tartalmazó nyelvtan G = (N, T, P, S) átnevezéseket nem tartalmazó nyelvtan (ugyanolyan típusú) Átnevezés-kizárás(G) 1 valahányszor A B és B C átnevezések P -ben vannak, mindannyiszor vegyük fel P -be az A C átnevezést is mindaddig, amíg P b víthet, 2 valahányszor A B átnevezés és a B α (α N ) szabály P -ben van, mindannyiszor vegyük fel P -be az A α szabályt is, 3 legyen P azon P -beli szabályok halmaza, amelyek nem átnevezések. 4 return G G és G ekvivalensek Ha G i {0, 1, 2, 3} típusú, akkor G is i típusú lesz. 2

12 Példa: G = ( {S, A, B, C}, {a, b}, P, S ahol a P elemei: ), S A, A B, B C, C B, D C, S B, A D, C Aa, A ab, A b. Els lépés. A következ új átnevezések kerülnek be a szabályok közé: S D S C A C B B C C D B Második lépés. A következ új szabályok jelennek meg: S ab S b S Aa A Aa B Aa Az új G = ( ) {S, A, B, C}, {a, b}, P, S (S A és A D miatt), (S B és B C miatt), (A B és B C miatt), (B C és C B miatt), (C B és B C miatt), (D C és C B miatt). (S A és A ab miatt), (S A és A b miatt), (S C és C Aa miatt), (A C és C Aa miatt), (B C és C Aa miatt). nyelvtan szabályai: S b, A b, B Aa, C Aa, S ab, A ab, S Aa A Aa. 3

13 Normálalakú nyelvtanok normálalakú nyelvtan: ha szabályainak bal oldalán terminális bet k nem szerepelnek Σ 1 és Σ 2 ábécékre homomorzmusnak nevezzük a h : Σ 1 Σ 2 függvényt, ha h(u 1 u 2 ) = h(u 1 )h(u 2 ), u 1, u 2 Σ 1. u = a 1 a 2... a n Σ 1 nak a Σ 1 -re való megszorítása, ugyanis h(u) = h(a 1 )h(a 2 )... h(a n ). Könny belátni, hogy tetsz leges esetében a h(u) értéket egyértelm en meghatározza h- Ha a h függvény még bijektív is, akkor izomorzmusról beszélünk. Tétel. Tetsz leges nyelvtanhoz megkonstruálhatunk egy vele ekvivalens, azonos típusú nyelvtant, amely normálalakú. G = (N, T, P, S) eredeti nyelvtan G = (N, T, P, S) normálalakú nyelvtan Legyenek a 1, a 2,..., a k azok a terminális szimbólumok, amelyek szerepelnek a szabályok bal oldalán. Ekkor vezessük be az A 1, A 2,..., A k új nemterminálisokat. Használjuk a következ jelöléseket: T 1 = {a 1, a 2,..., a k }, T 2 = T \ T 1, N 1 = {A 1, A 2,..., A k } és N = N N 1. Használjuk a h : N T N T 2 izomorzmust, ahol: h(a i ) = A i, ha a i T 1, h(x) = X, ha X N T 2 Értelmezzük a P szabályhalmazt: P = { h(α) h(β) } (α β) P { } A i a i i = 1, 2,..., k Ekkor α = β akkor és csakis akkor, ha h(α) = G G h(β). Innen következik a tételünk, hisz S = u S = h(s) = G G h(u) = u. 4

14 Példa. Adott a G = ({S, D, E}, {a, b, c, d, e}, P, S), ahol P szabályai: S aebc adbc Db bd Dc Ebccd be Eb ae aad aae P szabályai a következ k: S AeBC ADBC DB BD DC EBCCd BE EB AE AAD AAe A a B b C c Milyen szavakat generál ez a nyelvtan! S = AeBC = aebc miatt aebc L(G ). S = ADBC = ABDC = ABEBCCd = AEBBCCd = AAeBBCCd = aaebbccd, tehát aaebbccd L(G ). Feltételezzük, hogy S = A n 1 EB n C(Cd) n 1, n 2. Ezt matematikai indukcióval bizonyíthatjuk. Már láttuk, hogy feltevésünk igaz ha n = 2. S = A n 1 EB n C(Cd) n 1 = A n 2 AADB n C(Cd) n 1 = A n B n DC(Cd) n 1 = A n B n EBCCd(Cd) n 1 = A n EB n+1 CCd(Cd) n 1 = A n EB n+1 C(Cd) n, amit éppen bizonyítani kellett. De S = A n 1 EB n C(Cd) n 1 = A n 2 AAeB n C(Cd) n 1 = a n eb n c(cd) n 1. Tehát a n eb n c(cd) n 1 L(G ), n 1. Ezeket a szavakat G-ben is hasonlóan le lehet vezetni. 5

15 Kiterjesztett nyelvtanok 1-es típusú kiterjesztett nyelvtan. Minden szabály α β alakú, ahol α β, kivéve esetleg az S ε szabályt. 2-es típusú kiterjesztett nyelvtan. N, β (N T ). Minden szabály A β alakú, ahol A 3-as típusú kiterjesztett nyelvtan. Minden szabály A ub vagy A u alakú, ahol A, B N, u T. Tétel. Tetsz leges kiterjesztett nyelvtanhoz megadható egy vele ekvivalens, ugyanolyan típusú nyelvtan. Jelöljük G ki -vel a kiterjesztett nyelvtant és G-vel azt a nyelvtant, amelyet minden típusra külön értelmezünk, és amelyr l meg fogjuk mutatni, hogy ekvivalensg ki - vel. 1-es típus. Legyen X 1 X 2... X m Y 1 Y 2... Y n (m n) a G ki nyelvtan egy szabálya, amely nem megfelel alakú. következ szabályokat, ahol A 1, A 2,..., A m új változók: X 1 X 2... X m A 1 X 2 X 3... X m A 1 X 2... X m A 1 A 2 X 3... X m... A 1 A 2... A m 1 X m A 1 A 2... A m 1 A m A 1 A 2... A m 1 A m Y 1 A 2... A m 1 A m Y 1 A 2... A m 1 A m Y 1 Y 2... A m 1 A m... Y 1 Y 2... Y m 2 A m 1 A m Y 1 Y 2... Y m 2 Y m 1 A m Y 1 Y 2... Y m 1 A m Y 1 Y 2... Y m 1 Y m Y m+1... Y n. Vegyük fel G szabályhalmazába a Továbbá, G ki minden megengedett, vagyis γ 1 δγ 2 γ 1 γγ 2 alakú szabályát vegyük át változtatás nélkül G szabályhalmazába. 6

16 Ezek után a L(G ki ) L(G) tartalmazás abból következik, hogy a G ki minden szabályának az alkalmazását egy, a bel le képzett G-beli szabályok alkalmazásával tudjuk szimulálni. Továbbá, mivel a G szabályai csak a felírt sorrendben alkalmazhatók, nem kapunk újabb szavakat, ezért L(G) L(G ki ) is teljesül. Példa. G ki = (N, T, P, S), ahol N = {S, B, C}, T = {a, b, c} és P a következ szabályokból áll: S asbc abc CB BC ab ab bb bb bc bc cc cc. CB BC nem jó. Ekkor, ha A 1 = A, A 2 = D: CB AB AB AD AD BD BD BC Így az új nyelvtan G = ({S, A, B, C, D}, {a, b, c}, P, S), ahol P elemei: S asbc abc CB AB ab ab AB AD bb bb AD BD bc bc BD BC cc cc. már környezetfügg. Igazolni lehet, hogy L(G ki ) = L(G) = {a n b n c n n 1}. 7

17 2-es típus. Legyen G ki = (N, T, P, S). Ki kell küszöbölnünk az A ε alakú szabályokat úgy, hogy csak S ε maradhat, ha S nem szerepel szabály jobb oldalán. Ehhez felépítjük a következ halmazokat: U 0 = {A N (A ε) P } U i = U i 1 {A N (A w) P, w U + i 1 }. Mivel minden i 1 esetében U i 1 U i és U i N, és N véges, k : U k 1 = U k, és legyen ez U. A nemterminális akkor és csakis akkor eleme U -nak, ha A ( ε L(G ki ), akkor és csakis akkor ha S U.) = ε. G szabályait a következ képpen kapjuk G ki szabályaiból: G ki minden olyan A α szabálya esetében melyre α ε, vegyük fel a G szabályai közé ezt a szabályt és mellette azokat is, amelyeket úgy képezünk, hogy α-ból elhagyunk egy vagy több U -beli változót, de csak akkor, ha ezáltal a jobb oldal nem lesz ε. Az így kapott G nyelvtan ugyanazt a nyelvet generálja, mint G ki, kivéve az ε szót, amelyet nem tud generálni. Ha ε L(G ki ), akkor a bizonyítást befejeztük. Ha ε L(G ki ), akkor két esetet különböztetünk meg: 1. Ha az S kezd szimbólum nem szerepel egyetlen szabály jobb oldalán sem, akkor új szabály G-ben: S ε. 2. Ha viszont S szerepel valamelyik szabály jobb oldalán, akkor S új kezd szimbólum, és új szabályok G-ben: S S és S ε. 8

18 Példa Legyen G ki = ({S, B, C}, {a, b, c}, P, S) 2-típusú kiterjesztett nyelvtan, ahol P elemei: S asc B B bb C C Cc ε. Ekkor U 0 = {C}, U 1 = {B, C}, U 3 = {S, B, C} = U. Az új nyelvtan szabályai: S asc ac B B bb b C C Cc c. Mivel az eredeti nyelvtan generálja az üres szót is, és S szerepel szabály jobb oldalán, új kezd szimbólumot kell bevezetnünk és még két szabályt: S S, S ε. Tehát az eredetivel ekvivalens környezetfüggetlen nyelvtan: G = ({S, S, B, C}, {a, b, c}, P, S ), és a szabályok: S S ε S asc ac B B bb b C C Cc c. Mindkét nyelvtan az {a m b n c p p m 0, n 0} nyelvet generálja. 9

19 3-as típus. Alkalmazzuk G ki -re a 2-es típus esetében használt eljárást az A ε alakú szabályok kiküszöbölésére. Majd kiküszöböljük az átnevezéseket az Átnevezés-kizárás algoritmus segítségével. Majd minden A a 1 a 2... a n B szabályra, ahol B N {ε}, vegyük fel G szabályai közé a következ ket: A a 1 A 1, A 1 a 2 A 2, A n 1 a n B, ahol A 1, A 2,..., A n 1 új változók. Könnyen igazolható, hogy az így megkonstruált G nyelvtan ekvivalens G ki -vel. Példa. G ki = ({S, A, B}, {a, b}, P, S) a vizsgálandó 3-as típusú kiterjesztett nyelvtan, ahol P : S aba A bb B S ε. El ször küszöböljük ki a B ε szabályt. Mivel U 0 = U = {B}, a szabályok a következ k lesznek: S aba A bb b B S. Ez utóbbi szabályt (amely átnevezés) ki lehet küszöbölni, bevezetve helyette a B aba szabályt. Hátra van még az S aba és B aba szabályok jobb oldalának a feldarabolása. Mivel mindkét szabály jobb oldala ugyanaz, elég egy új változót bevezetnünk, és az S aba helyett az S ac és C ba szabályokat használni. A B aba helyett ekkor elég a B ac szabályt venni. 10

20 Az új nyelvtan: G = ({S, A, B, C}, {a, b}, P, S), ahol P : S ac A bb b B ac C ba. Be lehet bizonyítani, hogy L(G ki ) = L(G) = {(abb) n n 1}. A Chomsky-féle nyelvosztályok zártsági tulajdonságai reguláris m veletek: egyesítés, szorzat, iteráció Tétel. Az L i (i = 0, 1, 2, 3) nyelvek osztálya zárt a reguláris m veletekre nézve. Kiterjesztett nyelvtanok segítségével végezzük a bizonyítást. Legyenek G 1 = (N 1, T 1, P 1, S 1 ) és G 2 = (N 2, T 2, P 2, S 2 ) i-típusú kiterjesztett nyelvtanok. Feltételezzük, hogy N 1 N 2 =. Egyesítés. Legyen G = (N 1 N 2 {S}, T 1 T 2, P 1 P 2 {S S 1, S S 2 }, S). Könny igazolni, hogy L(G ) = L(G 1 ) L(G 2 ). Ha i = 0, 2, 3, akkor abból, hogy G 1 és G 2 i-típusú, következik, hogy G is az lesz. Ha i = 1, akkor, ha valamelyik nyelvtan generálja az üres szót, akkor a G szabályaiból kivesszük a megfelel (esetleg mindkett ) S k ε (k = 1, 2) szabályt és helyettesítjük S ε szabállyal. Szorzat. Legyen G = (N 1 N 2 {S}, T 1 T 2, P 1 P 2 {S S 1 S 2 }, S). Igazolható, hogy L(G ) = L(G 1 )L(G 2 ). Az i = 0, 2 típusoknál G is ugyanolyan típusú lesz. Az i = 1 típusnál, ha van P 1 -ben S 1 ε szabály, de P 2 -ben nincs S 2 ε szabály, akkor a S 1 ε szabályt helyettesítjük az S S 2 szabállyal. Ha van P 1 -ben S 1 ε szabály és P 2 -ben S 2 ε szabály, akkor ezeket helyettesítjük az S ε szabállyal. 11

21 Másképp kell megadni a szabályokat a reguláris nyelvtanok (i = 3) esetében, mert S S 1 S 2 nem reguláris szabály. Helyette a következ nyelvtant használjuk: G = (N 1 N 2, T 1 T 2, P 1 P 2, S 1 ), ahol P 1 annyiban különbözik P 1-t l, hogy az A u, u T szabályok helyett A us 2 kerül be P 1 -be. Iteráció. Legyen G = (N 1 {S}, T 1, P, S). 2-típusú nyelvtanoknál legyen P = P 1 {S S 1 S, S ε}. 2-típusú lesz. Ekkor G is A 3-típusnál, a szorzathoz hasonlóan átalakítjuk a szabályokat, azaz P = P 1 {S S 1, S ε}, ahol P 1 abban különbözik P 1-t l, hogy minden A u (u T ) alakú szabály helyett A us alakút veszünk, a többit változatlanul hagyjuk. Ekkor G is 3-típusú lesz. i = 0, 1-re nem jók a 2-típusnál megadott szabályok, mert az S S 1 S alkalmazása során megtörténhet, hogy a következ levezetésekhez jutunk: S = S 1 S 1 α, S 1 = α 1 β 1, S 1 = α 2 β 2, ahol β 1 α 2 egy helyettesítési szabály bal oldala. Ekkor az S = α 1 β 1 α 2 β 2 α levezetésben helyettesítve β 1 α 2 -t a neki megfelel szabály jobb oldalával, olyan szót is generálhatunk, amelyik nincsen benne az iterált nyelvben. Hogy ezt elkerüljük, el ször feltételezzük, hogy a nyelvtan normálalakú, majd bevezetünk egy új S nemterminálist, tehát a nemterminálisok halmaza most N 1 {S, S }, a szabályok pedig a következ k lesznek: P = P 1 {S ε, S S 1 S } {as as a T 1 }. Most már az el bbi levezetéseket csak úgy lehet alkalmazni, hogy az S = S 1 S helyettesítéssel kezdjük, majd eljutunk az S = α 1 β 1 S levezetéshez. Ezt csak akkor tudjuk S helyettesítésével folytatni, ha β 1 utolsó bet je terminális, és miután alkalmaztuk valamelyik as as helyettesítési szabályt. Igazolható, hogy mindegyik típus esetében L(G ) = L(G 1 ). 12

22 Véges automaták és reguláris nyelvek Véges automaták értelmezése a 1 a 2 a 3... a n bemeneti szalag vezérlőmű igen/nem Nemdeterminisztikus véges automatának nevezzük az A = (Q, Σ, E, I, F) rendezett ötöst, ahol Q egy véges, nem üres halmaz, az állapotok halmaza, Σ a bemeneti ábécé, E az átmenetek (vagy élek) halmaza, ahol E Q Σ Q, I Q a kezdőállapotok halmaza, F Q a végállapotok halmaza. nemdeterminisztikus véges automata irányított, címkézett gráf, amelynek csúcsai az állapotok, és egy p csúcsából akkor vezet egy a betűvel megcímkézett él a q csúcsba, ha (p, a, q) E. kezdő- és végállapotok átmenetgráf 1

23 1. példa. A = (Q, Σ, E, I, F), ahol Q = {q 0, q 1, q 2 }, Σ = {0, 1, 2}, E = { (q 0, 0, q 0 ), (q 0, 1, q 1 ), (q 0, 2, q 2 ), (q 1, 0, q 1 ), (q 1, 1, q 2 ), (q 1, 2, q 0 ), (q 2, 0, q 2 ), (q 2, 1, q 0 ), (q 2, 2, q 1 ) }, I = {q 0 }, F = {q 0 } q 0 1 q q példa. I = {q 0, q 1 }, F = {q 1, q 2 } I = {q 0 }, F = {q 2 } q 1 q 2 0 q 0 A 1 0,1 0,1 0,1 q 0 0 q 1 1 q 2 B Egy (p, a, q) élnek p a kezdőpontja, q a végpontja, a pedig a címkéje. 2

24 séta (q 0, a 1, q 1 ), (q 1, a 2, q 2 ),..., (q n 2, a n 1, q n 1 ), (q n 1, a n, q n ) élsorozat a nemdeterminisztikus véges automata egy sétája, amelynek címkéje az a 1 a 2...a n szó. Ha n = 0, akkor q 0 = q n és a 1 a 2...a n = ε = üres séta. a séta jelölése a q 1 a 0 2 a q1 3 a n 1 q2 qn 1 vagy ha w = a 1 a 2...a n, akkor röviden: q 0 q 0 a séta kezdőpontja, q n pedig a végpontja a n qn, w q n. Egy séta produktív, ha kezdőpontja kezdőállapot, végpontja pedig végállapot. Azt mondjuk, hogy a nemdeterminisztikus véges automata felismer egy szót, ha az a szó egy produktív séta címkéje. Az ε üres szót a nemdeterminisztikus véges automata akkor ismeri fel, ha van produktív üres séta, amely egyenértékű azzal, hogy van olyan kezdőállapot, amely egyben végállapot is. Egy nemdeterminisztikus véges automata által felismert szavak halmazát a nemdeterminisztikus véges automata által felismert nyelvnek mondjuk. Az A nemdeterminisztikus véges automata által felismert nyelv { } L(A) = w Σ p I, q F, p w q. Az A 1 és A 2 véges automaták ekvivalensek, ha L(A 1 ) = L(A 2 ). 3

25 Értelmezzük a következő átmenetfüggvényt: δ : Q Σ P(Q), δ(p, a) = {q Q (p, a, q) E} egy p állapotnak és egy a betűnek megfelelteti azt az állapothalmazt, amelynek állapotaiba átmehet a véges automata, ha a p állapotban van és az olvasófej az a betűre mutat. q 1 q 2 0 q 0 1 0,1 0,1 0,1 q 0 0 q 1 1 q 2 δ 0 1 q 0 {q 1 } q 1 {q 2 } q 2 {q 2 } {q 2 } δ 0 1 q 0 {q 0, q 1 } {q 0 } q 1 {q 2 } q 2 {q 2 } {q 2 } Jelöljük H -val a H halmaz elemeinek a számát. Egy nemdeterminisztikus véges automata determinisztikus, ha I = 1 és δ(q, a) 1, q Q, a Σ. A δ(q, a) 1 feltételt helyettesíthetjük a következővel: (p, a, q) E, (p, a, r) E = q = r, p, q, r Q, a Σ. 4

26 0 2 q q q 2 0 δ q 0 {q 0 } {q 1 } {q 2 } q 1 {q 1 } {q 2 } {q 0 } q 2 {q 2 } {q 0 } {q 1 } Ha a determinisztikus véges automata olyan, hogy δ(q, a) = 1 minden q Q állapotra és minden a Σ betűre, akkor azt mondjuk, hogy teljes, determinisztikus véges automata. Minden determinisztikus véges automata teljessé tehető egy új csapdaállapot bevezetésével. A = (Q, Σ, E, {q 0 }, F) A vele ekvivalens teljes, determinisztikus véges automata pedig A = (Q {s}, Σ, E, {q 0 }, F), E = E { (p, a, s) δ(p, a) =, p Q, a Σ } { (s, a, s) a Σ }. Mivel ez az új állapot nem produktív, könnyű belátni, hogy L(A) = L(A ). A következőkben, amennyiben csak véges automatát írunk, ezalatt mindig nemdeterminisztikus véges automatát értünk. Ha az automata determinisztikus, akkor ezt mindig hangsúlyozzuk. 5

27 Elérhetetlen állapotok kizárása A = (Q, Σ, E, I, F) Egy állapotot elérhetőnek nevezünk, ha létezik séta valamely kezdőállapotból ebbe az állapotba. Elérhető-állapotok(A) 1 U 0 I 2 i 0 3 repeat 4 i i U i U i 1 6 for minden q U i 1 7 do for minden a Σ 8 do U i U i δ(q, a) 9 until U i = U i 1 10 U U i 11 return U A Q \ U halmaz elemei nem elérhető állapotok, ezért kizárhatók a véges automatából anélkül, hogy az általa felismert nyelvet megváltoztatnánk. Ha Q = n és Σ = m, akkor a fenti algoritmus lépésszáma legrosszabb esetben O(n 2 m), mivel a két egymásba ágyazott ciklus lépésszáma legfeljebb nm, a repeat ciklusé pedig n. L(A) U F A fenti algoritmus kiegészíthető az U F feltétellel, hogy eldöntse, hogy a felismert L(A) nyelv üres-e vagy sem. 6

28 Nemproduktív állapotok kizárása A = (Q, Σ, E, I, F) Egy állapotot produktív, ha létezik séta ebből az állapotból egy végállapotba. δ 1 : Q Σ P(Q), δ 1 (p, a) = {q (q, a, p) E} Ez a függvény egy p állapotra és egy a betűre megadja azt az állapothalmazt, amelynek elemeiből az a betű hatására el lehet jutni a p állapotba. Produktív-állapotok(A) 1 V 0 F 2 i 0 3 repeat 4 i i V i V i 1 6 for minden p V i 1 7 do for minden a Σ 8 do V i V i δ 1 (p, a) 9 until V i = V i 1 10 V V i 11 return V A Q \ V halmaz elemei nem produktív állapotok, ezért kizárhatók a véges automatából, anélkül, hogy az általa felismert nyelvet befolyásolnánk. Ha n az állapotok száma és m a betűk száma, akkor a lépésszám ebben az esetben is O(n 2 m), akárcsak az Elérhető-állapotok algoritmus esetében. L(A) V I 7

29 Nemdeterminisztikus véges automata átalakítása determinisztikus véges automatává Tétel. Tetszőleges nemdeterminisztikus véges automatához mindig megkonstruálható egy vele ekvivalens determinisztikus véges automata. A = (Q, Σ, E, I, F) nemdeterminisztikus véges automata Legyen A = (Q, Σ, E, I, F) determinisztikus véges automata, ahol Q = P(Q) \, E = {(S, a, R) R, S Q, a Σ, R = I = {I}, F = {S Q S F }. Be kell bizonyítanunk, hogy L(A) = L(A). p S } δ(p, a), a) Bebizonyítjuk, hogy L(A) L(A). Legyen w = a 1 a 2...a k L(A). Ekkor létezik a a q 1 a 0 2 a q1 3 a k 1 q2 qk 1 a k qk, q 0 I, q k F séta. Képezzük a következő halmazokat, felhasználva az A véges automata δ átmenetfüggvényét: S 0 = {q 0 }, δ(s 0, a 1 ) = S 1,...δ(S k 1, a k ) = S k. Ekkor q 1 S 1,..., q k S k, és mivel q k F, következik, hogy S k F, tehát S k F. Így létezik az a S 1 a 0 2 a S1 3 a k 1 S2 Sk 1 a k Sk, S 0 I, S k F séta. Vannak olyan S 0,..., S k halmazok, amelyekre S 0 i = 0, 1,..., k-ra S i S i és = I, továbbá minden S 0 a 1 S a 2 1 S a 3 a k 1 2 S k 1 a k S k is produktív séta. Ezért w L(A). Tehát L(A) L(A). 8

30 b) Bebizonyítjuk, hogy L(A) L(A). Legyen w = a 1 a 2...a k L(A). Ekkor létezik a a q 1 a 0 2 a q1 3 a k 1 q2 qk 1 a k qk, q 0 I, q k F séta. Az F definíciója alapján q k F, azaz létezik q k q k F, tehát q k F és q k definíciója alapján létezik q k 1 úgy, hogy (q k 1, a k, q k ) E. Hasonlóképpen, léteznek a q k 2,..., q 1, q 0 állapotok úgy, hogy (q k 2, a k, q k 1 ) E,..., (q 0, a 1, q 1 ) E, ahol q 0 q 0 = I, ezért létezik a a q 1 a 0 2 a q1 3 a k 1 q2 qk 1 séta, tehát L(A) L(A). a k qk, q 0 I, q k F 9

31 q 1 q 2 0 q 0 A 1 0,1 1 S 0 0 S 2 1 S 3 0, 1 A determinisztikus véges automata megkonstruálásában segítségünkre lehet ennek δ átmenetfüggvénye, amely a δ segítségével a következőképpen értelmezhető δ(q, a) = q q δ(q, a), q Q, a Σ. Az A véges automata állapotait fokozatosan kapjuk meg úgy, hogy elindulunk a q 0 = I állapottal, meghatározzuk a δ(q 0, a) állapotokat, minden a Σ elemre. Az újonnan kapott állapotokra szintén meghatározzuk az átmenetek alapján a belőlük elérhető állapotokat. Ezt addig folytatjuk, amíg már nem kapunk új állapotokat. Az előző példánkban legyen q 0 := {q 0, q 1 } a kezdőállapot, és innen δ(q 0, 0) = {q 1 }, ahol q 1 := {q 1 }, δ(q 0, 1) = {q 2 }, ahol q 2 := {q 2 }, δ(q 1, 0) =, δ(q 1, 1) = {q 2 }, δ(q 2, 0) = {q 2 }, δ(q 2, 1) = {q 2 }. Az átmenettáblázat a következő: δ 0 1 q 0 {q 1 } {q 2 } q 1 {q 2 } q 2 {q 2 } {q 2 } 10

32 A következő algoritmus egy A = (Q, Σ, E, I, F) nemdeterminisztikus véges automatához megkonstruálja a vele ekvivalens A = (Q, Σ, E, I, F) determinisztikus véges automata M átmenettáblázatát, de nem tartalmazza annak megállapítását, hogy egy állapot végállapot-e vagy sem. Ez utóbbi azonban könnyűszerrel beépíthető. Az algoritmusban használjuk a Bennevan függvényt, amelyet nem írtunk le, de megjegyezzük, hogy a Bennevan(q, Q) értéke igaz, ha a q állapot már szerepel a Q halmazban, és hamis ellenkező esetben. Legyen a 1, a 2,..., a m a Σ betűinek egy felsorolása. Nemdet-det(A) 1 q 0 I 2 Q {q 0 } 3 i 0 i a sorokat számolja. 4 k 0 k az állapotokat számolja. 5 repeat 6 for j = 1, 2,..., m j az oszlopokat számolja. 7 do q p q i δ(p, a j ) 8 if q 9 then if Bennevan(q, Q) 10 then M[i, j] {q} 11 else k k q k q 13 M[i, j] {q k } 14 Q Q {q k } 15 else M[i, j] 16 i i until i = k return az A automata M átmenettáblázata 11

33 < [ < < A A A "!" $# % & '( &*)+,& % & -. / 0 / ) 1$% / 2 3)54 6$7&$)983*% :. 8*% ;2 2*8',:' 7 : '. 81.=/ 0,/ 7>&*7? & %*' & 0& ' &. & %5% 8 - % 8'. 81 δ(q, a) 8 A = {a} :- elem(a) = aa B, : % % 82 A = (Q, Σ, E, {q 0 }, F ) 6*) A = (Q, Σ, E, {q 0}, F )A % ;C' ;18%*+8.D& '? (q, q ) 8' 82 E;' ' 8F : %$F ; - :"2$8%G% 8 - % 8'.D8 1+8 :' < q Q 6$) q Q AA*A a AA*A A*AA... (q, q ) (elem ( δ(q, a) ), elem ( δ (q, a) )) A*AA... 8H.D&*7*( & ' & 0/ 2&$7?I:'?80JF ; & '?- &&$7?/ 2;' ' 8F : %K4 6*7;' ' 8F : %*+98H.D; )$/ 2I. &$7 0 &.+L82 2 :-D8 1M8' 7:- / %$.3) %C&$N & ( &$1*1 O2P 8Q2*6 %R,&$% &. / 0 / ) 1$% / 2 3)4 6$7&$)R83*% :. 8*% 8 0 &.S& 2$4/ 4 8' & 0 82*6 %G% &$% ) 1*T"' &*7&*)U0 &.D,& % & -. / 0 / ) 1$% / 2 3)V4 6*7&*)583*% :. 8*% ; - W"' ) 1& - & %* & ', X"0*% & 0/ + :7?& 2$4/ 4 8' & 0) & 2$Y & +82 2$:-5& ' TCCM. / 0,"2$&$% % T % ;% 8' 82*Z % ( 32>,&$% & -.=/ 0/ ) 1$%$/ 2 3 )U4 6*7&*) 83% :".D8% ;4 ;+. 8 (,98' 2*8'.D8 1*1 328GN & 0% & CC9' &*Z - %8' 7 :- / %*.=3 ) %800 82L. &$7;' ' 8FZ % ; ) ; - 8+ :7?K& 2$4/ 4 8' & 0) & 2$Y & F6 ',8 q 0 a b b a q 1 q 2 a 7 b b p 0 p 2 a b b a a p 1 a p 3 b \

34 B B A A < A a b (q 0, p 0 ) (q 2, p 3 ) (q 1, p 1 ) (q 2, p 3 ) (q 1, p 2 ) (q 2, p 3 ) (q 1, p 1 ) (q 2, p 3 ) (q 0, p 0 ) (q 1, p 2 ) (q 2, p 3 ) (q 0, p 0 ) 2*6 %4 6*7&*)83*% :. 8*% 8U& 2$4/ 4 8' & 0)+. / 4 & '.=/ 0,& 0D' & & % ) 6$7&$);' ' 8F : %$F ; - % "7? & ' &.C& 4 & % %$O02+"6$). / 0,& 0>F ; -G. / 0,"2$6$%U& ' &. &U4 6*7;' ' 8F : %54 8 7?>&$7?/ 2 ) &.S8 1 F6 ',8 q 0 b b a a q 1 q 2 a 7 b b p 0 p 2 a b b a a p 1 a p 3 b a b (q 0, p 0 ) (q 1, p 3 ) (q 2, p 1 ) (q 1, p 3 ) (q 2, p 2 ) (q 0, p 3 ) (q 2, p 1 ) (q 2, p 2 ) 2$6$%54 6*7&*)U83*% :. 8*% 8>0 &.S& 2$4/ 4 8' & 0 )+.=/ 4 & '8R.D; ) :,/ 2D) :-53*% :' ) WK:) 1 ' :"F ;C 80=8 (q 0, p 3 ) ;' ' 8F : %$F ; -V& ' ) T>& ' &.D&94 6$7;' ' 8F : %+"8>.D; ) :,/ 2F&,/ 70 &.S81 A

35 < 8 % & < < < < A, A [ Z - ( 32KC&=8 % ;C' ; 18*%U& ' ) TK) :- ;0 82 & ' ) TK:) 1 ' :"F ;C 88 i 0 "!$# (q 0, q 0) ;' ' 8F : %*F ; - % i i + 1 ' &$7?& 0 (q, q ) 8 % ;C' ;18% Y &*,/ 2 ) :- ;0 82 & ' ) TK:) 1 ' :"F ;C 80K' & 4 T i ;' ' 8F : %$F ; - ' ( )*.=/ 0,& 0 C& %+- & a Σ, - ) Z - ( 32KC& 8 % ;C' ; 18*% i Y &,/ 2D) :- 8 ( & ' 16$)+=: ) 1 ' :F ;C 88 ( a elem ( δ(q, a) ), elem ( δ (q, a) )) ;' ' 8F : %$F ; - %. ( / ( elem ( δ(q, a) ), elem ( δ (q, a) )) &$7?/ 2=;' ' 8F : % 8 4 6*7;' ' 8F : %*+"8R.D; )$/ 2F&,/ 70 &. 0 # 123 # 4 2 ["5 $6 7 ( Z - ( 32C&=8 elem ( δ(q, a) ), elem ( δ (q, a) )) F ; - % 8 1 & ' ) TK:) 1 ' :"F>2 X 4 & %*2$&*1*TO- &$)L) :- ;C 8+ 8>. 6$7 0 &. ) 1& - & F& '81=& ' ) TK: ) 1 ' :FC 80 [[ 428# / 6 Y &*,/ 2D) :-V& ' ) TR& ' &. &=O- &*) (i + 1) [ 9# Q = n + Q = n 6$) Σ = m +G82 2 :-7?& ' &.=C&K4 6$4 & + : 7?8 $ $!"# < < / 2 ' 3 ) %L' &*7- : ) ) 18CCD&$) &$%$C& 0 nn Y ) 1& -2*& ' '*4 6$7"- & 8 ( % 80 / +8 ( )* < / 2 ' 3) %LF&,/ 7 m Y ) 1& / ) 1;.9Z % 8*% ( 32+ :7?D8. 8=/.D;' / )5' 6 F6*) ) 1;. ' &$7"- :) ) 18CCU&$) &$%$C& 0 O(nn m) ? n = n, 82 2$:- O(n 2 m)a >

36 < A A < < A < A K M M " "V "!" $# B 0 &.D,& % & -. / 0 / ) 1$% / 2 3)=4 6*7&*)>83*% :. 8*% ;2I37?80 8 1$%>8Q0*? & ' 4 : ) 1$% ;'?%/ )*. & - / 2RN & ' +. / 0*%8M,& % & -. / 0 / ) 1$% / 2 3) 4 6$7&$)K83% :".D8% ;2 B 2$X 4 &$%$2*&$1*TQ2$6$%D% 6 % & 'V81$%>.3*% 8*% ( 8+ :7?K&*1 8R0*? & ' 4 : ) 1$% ;'?R0 &..D; )+. / 0*%98>- &*73' ; - / ) 0*? & ' 4 & 2 :) 1$% ;'? 8 6$% & 8 &$7?% &$% ) 1*T"' &*7&*)R,& % & -. / 0 / ) 1$% / 2 3)K4 6$7&$)83*% :. 8*% 8I;' % 8'VN & ' / )*. & - % L 0*? & ' 4+L82 2 :-=. &$7"2 :"0) %*- 3 ;' 8% W:"'? 80J- &*73' ; - / )0?& ' 4% 80+U8. & '?/ 281 0?& ' 4 &$% L 7& 0 & - ;'( 8 A = (Q, Σ, E, {q 0 }, F ) 8 1 0?& ' 4 &$%VN & ' / )*.D& - T=,&$% & -.=/ 0/ ) 1$%$/ 2 3 )4 6$7&$)G83*% :. 8*% 8+ L L = L(A)A - % & '.D&*1*1 O2 8 - &$7"3' ; - / )D0*? & ' 4% 80*%98>2$X 4 &$%$2*&$1*TK) 18C ;'?*:"2 2$8' P G = (Q, Σ, P, q 0 8 (p, a, q) E + p, q Q + a Σ = p aq 8 (p, a, q) E 6$) q F = p a P / ) & C/ 1*:"0*? Z % ( 32+ : 7? L(G) = L(A) \ {ε}a &$7?& 0 u = a 1 a 2... a n L(A) 6*) u εä N & ' / )*.D& - /8 1 ) 1*W %*+' 6$% &*1 / 2=8 u 2 2 :- +V.=/ 4 & ' 81 A 4 6$7&$) 83*% :. 8*% 8 ) 6 % 8 q 0 a 1 A a 2 a q1 3 a n 1 q2 qn 1 qn, q n F 2 2 :- Y C& 0R' 6$% &*1 0 & 2 8>2$X 4 &$%$2*&$1*TK) 18C ;'?*:"2P P a n q 0 a 1 q 1, q 1 a 2 q 2,..., q n 2 a n 1 q n 1, q n 1 a n 3*% WCC /) 18C ;'?L( :"CC:',8' ;0>0 &. ) 1& - & F& ' +. / 4 & ' +% & ;%D' 6 % &$1 / 2 8 q n q n F q 0 = a 1 q 1 = a 1 a 2 q 2 =... = a 1 a 2... a n 1 q n 1 = a 1 a 2... a n ' &$4 &$1&$% 6*) 16 - % A u L(G). :-,Z % 4 8+ ' &*7? & 0 u = a 1 a 2... a n L(G) +6*) 2 2$:-' 6 % &$1 / 2 8 u εa q 0 = a 1 q 1 = a 1 a 2 q 2 =... = a 1 a 2... a n 1 q n 1 = a 1 a 2... a n

37 B 8 < < < < < < < < < A A ' &$4 &$1&$% 6*)+8. & '?C& 08 q 0 a 1 q 1, q 1 a 2 q 2,..., q n 2 a n 1 q n 1, q n 1 a n ) 18C ;'?*:"2$8% 8 ) 1 0 ;' %*32+8. & '?& % & '. &$16*)) 1& - / 0%G81$% ( & ' & 0*%$/ 2+ :7?=81 83% :".D8% ;C 80K' 6 % &$1 / 2 8>2$X 4 &$%$2*&$1*TK) 6$% 8P A 4 6*7&*) a q 1 a 0 2 a q1 3 a n 1 a q2 n qn 1 qn, 6$). / 4 & ' 4 6$7;' ' 8F : %+ 2$X 4 &$%$2*&$1 / 2+ :7? q n u L(A) \ 8I8 B ε Y %/ )KN & ' / )*. & - / +L82 2 :-C& 4 &*1& %*O02M&*7?HE ( q 0 2$&*1, T) 1 /.C W' 3.D: % q & '? & % %*+GC&$4 &$) ) 1 O2K8R) 18C ;'?:22 X16K8 0 q 0 ) 18C ;'?%+. 8 (,I.=/ 0,& 0 ε q 0 α ) 18C ;'?>. & ' ' 6C&$4 &$) ) 1 O2 8 q 0 α ) 18C ;'?%D/ ) A 6 ',8 :',& % & -. / 0 / ) 1$% / 2 3)"4 6*7&*)83*% :. 8*% 8+ A A = ({q 0, q 1, q 2 }, {a, b}, E, {q 0 }, {q 2 }) E = { (q 0, a, q 0 ), (q 0, b, q 1 ), (q 1, b, q 2 ), (q 2, a, q 2 ) } A 8 C δ a a q 0 {q 0 } {q 1 } q 1 {q 2 } q 0 b q 1 b q 2 q 2 {q 2 } % 6$% & '8' 8F ( ;0P G = ({q 0, q 1, q 2 }, {a, b}, P, q 0 ) P ) 18C ;'?8/8R2 X 4 & %*2$&*1*T2P q 0 aq 0 bq 1 + q 1 bq 2 b *:' 8% W + :7? L(A) = {a m bba n m 0, n 0}A B % 6$% & '"C / 1*:0? Z % ;) ;C 80>.D&*78, : % %D.DW, ) 1& - %D2 X"00?& 0=;% Z - q 2 aq 2 aa 8*% ( 32=8' 7:- / %$.3) ) ; A = (Q, Σ, E, {q 0 }, F ),& % & -. / 0 / ) 1$% / 2 3)G83*% :. 8*% ;C W"'2*8F : % % G = (Q, Σ, P, q 0 ) - &*73' ; - / ) 0*? & ' 4% 80=) 18C ;'? 8 / %U8>2 X 4 & %*2$&*1*TK8' 7:- / %$.3) ) 8' 8% ; - : 1*1 32=. &$7 B 1

38 ' [ < < A < < < < < * : 9 A P ( )*.=/ 0,& 0 p Q - ) ( )*.=/ 0,& 0 a Σ % - ) ( )*.=/ 0,& 0 q Q & - ) / ( (p, a, q) E # 12 P P {p aq}, / ( q F. # 12 0 / ( q 0 F ["5 # 12 P P {q 0 ε} [[ # 4 2 G P P {p a} B.D& 00?/ C& 08183% :".D8% 8MN & ' / )*. & - /8 1O- &*)K) 1*W %R/ )+L8MN & 0% /58' 7 :- / %*.=3 )>&*) & %*' &*7 2 / % & - ( &$) 1$% & % %D- &*73' ; - / )D0?& ' 4 &$%L7& 0 & - ;' A X00*?+KC& ' ;%$0/ + : 7?81D8' 7:- / %$.3)GN 3% ; )$//,& ( & Θ(n 2 8=81D;' ' 8F : % :"29) 1;. 8 m), < n 6*)U8>C& %+2 ) 1;. 8 B % ) :- :"2 C 80K' 6$4 T ; - :". < / 2 ' 3) & '?&$% %D' & & % < )*3F ;0 ma &$7?&$%U4 & 00/ + 8>8 1 & ' &.D& / %U4/ 1*) 7;'( 32+& 2 2$:-G8N 3*% ;)$//, T' &*7- : ) ) 18CC>&$) &$%$C& 0 E Θ(p) + 8 :' < p 81;%$. & 0 & % & 2 ) 1;.D8 1=) 1 / 0*% 6 0 A O(n 2 m) +.=/ 4 & ' ' & & % ) 6$7&$)+ :7? <. / 0,& 0;%$. & 0 & %( & ' & 0= :-V8 1 8' 7:- / %$.3)U8R2 X 4 & %*2$&*1*T2*6 FF& 0 Z - 8*% W' &P A

39 & [ A A < + * : 9 A P ( )8. / 0,& 0 (p, a, q) E - ) P P {p aq} % / ( q F # 1$2 P P {p a} ' / ( q 0 F, # 1$2 P P {q 0 ε}. 9# 4 2 G 6$% & 8 L = L(G) - &$7"3' ; - / )0*? & ' :-L. &$7"2 :"0) %*- 3 ;' 8% WR:'?80M0 &.D,& % & - Y <. / 0 / ) 1$% / 2 3)54 6*7&*)U83*% :. 8*% 8+"8. & '?8 1 L 0?& ' 4 &$%5N & ' / )*. & - / A &$7?& 0 G = (N, T, P, S) 81 L 0*? & ' 4 & %V7& 0 & - ;' W=- &$7"3' ; - / )G0?& ' 4% 80 G&0 / ;'( 32L8 1 A 0 &.,&$% & -.=/ 0/ ) 1$%$/ 2 3 )U4 6*7&*)=83% :".D8% ;% 82 X 4 & %*2$&*1*T2*6 FY A = (Q, T, E, {S}, F ) F& 0 Q = N {Z} +8 :"' < Z N T 4 87?/ )9&*7?RE (5) 1 /.=C W"' 3. / 0,& 0 A ab ) 18C ;'?- 8>C&$4 &$) ) 1 O2 E Y C& 81 (A, a, B) ;*%*.D& 0 &$% &$% A / 0,& 0 A a ) 18C ;'?- 8>C& 4 &*) ) 1 O2 E Y C& 8 1 (A, a, Z) ;%$. & 0 & % & % { A 1! $232 7 $ $ 6! {Z} G S ε 7 "! 6, F = {Z, S} 1! $237 $ $ 6! G S ε 7 "! 6. & C/ 1*:"0*? Z % ( 32+ : 7? L(G) = L(A)A &$7?& 0 u = a 1 a 2... a n L(G) + 2 2$:->' 6$% &*1 / 2 u εa u Y 0 82I&*7? G Y C& ' / ' &$4 &$1&$% 6*) & P S = a 1 A 1 = a 1 a 2 A 2 =... = a 1 a 2... a n 1 A n 1 = a 1 a 2... a n. 1 8R' &$4 &$1&$% 6*)U8>2$X 4 &$%$2*&$1*TK) 18C ;'?*:"2 8' 8F ( ;0 % X- % 6 0*%P S a 1 A 1, A 1 a 2 A 2,..., A n 2 a n 1 A n 1, A n 1 a n. 2 2 :-V *7&*)U83*% :. 8*% 8=;%$. & 0 & % &/ 0 & % & '. &$16*) &D8' 8F ( ;0>' 6 % &$1 / A S a 1 a A 2 a 1 3 a n 1 A2 An 1 a n Z, Z F

40 A A < < < A < A A < B < B < < < ) 6 % $%V( & ' & 0*%$/ + 8 A u L(A)A,& & 2 2 :-V8>2*&$1,T;' ' 8F : %54 6$7;' ' 8F : %9/ )+% & &$7?& 0>.9:) % u = a 1 a 2... a n L(A)A ε L(G) :-V4 80 ) 18C ;'?+ S ε ;% 16 - % ε L(A)A L(G) L(A)A 1 8 1$%( & ' & 0*%$/ + :7?R' 6 % &$1 / S a 1 a A 2 a 1 3 a n 1 a A2 n An 1 Z, Z F ) 6 % 8 u 8 1>O- &*)9) 1*W"+82 2$:- & '?&$% % Z < S D& '?>) 1 / 0% 6 0=4 6*7;' ' 8F : % ; ) A &$) &$%$C& 0 < ) 82 Z ) 1& - & F& ' & %K3% :"' ) W"2$6 0*% & ;*% Y C& 0) 1& - & F& ' 0 & 2>82 X 4 & %*2$&*1*T < G ) 18C ;'?*:"2P S a 1 A 1, A 1 a 2 A 2,..., A n 2 a n 1 A n 1, A n 1 a n, 6$)UZ 7?R' 6 % &$1 / S = a 1 A 1 = a 1 a 2 A 2 =... = a 1 a 2... a n 1 A n 1 = a 1 a 2... a n ' &$4 &$1&$% 6*)+% & ;% u L(G) +"6$)9& 2 2$:- L(A) L(G)A 6 ',8 B, : % %D8 G = ({S, A, B}, {a, b}, {S as, S ba, A bb, A b, B ab, B a}, S) - &*73' ; - / )K0?& ' 4% 80 : 1*1;M- & 0,& ' %D4 6$7&$)=83*% :. 8*% 8 A A = ({S, A, B, Z}, {a, b}, E, {S}, {Z}) +$8 :"' < E = { (S, a, S), (S, b, A), (A, b, B), (A, b, Z), (B, a, B), (B, a, Z) } 00 & 2 ;%$. & 0 & % % ;C' ;18% 8=8>2$X 4 &$%$2*&$1*T P A δ a b S {S} {A} A {B, Z} B {B, Z} E 1J8H4 6$7&$)I83% :".D8% 8 &$7? ) 1& - +) Z % &$7?&$%$' & 0 4 6*7;' ' 8F : % % ; a S b A b B & % T b a 7 Z a B 6*) Z ;' ' 8F : % :"2JX ) ) 1&$4 :0 < B 1G& ' T"CC/ % 6$% & '$8' 8F ( ;05Z - 302G&*7?U8' 7 :- / %*.=3 ) %*+8.D& '? :1*1; - & 0,& ' /$8 G = (N, T, P, S) - &*73' ; - / ) 0*? & ' 4% 80 : 1=81 A = (Q, T, E, {S}, F ) 4 6*7&*)983% :".D8% ;% A 8% W"2

41 [ ' < < 8 A A A < : 9 * ; G E Q N {Z} ( )*.=/ 0,& 0 A N % - ) ( )*.=/ 0,& 0 a T & - ) / ( (A a) P # 12 E E {(A, a, Z)}, ( )*.=/ 0,& 0 B N. - ) / ( (A ab) P 0 # 12 ["5 / ( (S ε) P [[ # 12 F {Z} [ $6 7 F {Z, S} [" # 4 2 A E E {(A, a, B)} B 2$; - < ) 82>81 * : 9 8' 7 :- / %*.=3 )=&*) & % 6 C& 0+V8 N 3% ; )$/5/,TQ& CC& 081&$) &$%$C& 0/ ) Θ(n 2 m) + 88J0 &.U% & -. / 0 ;' / ) :2) 1;. 8 < n 6*)>8 % & -.=/ 0 ;' / ) :"2$6 & & %*0 &=8 + % 6$), ) :- :2 C 80R' 6 4 T < / 2 ' 3 ) :2*8*% & '? & % % &*) Z % & 0/ ma &$77? & ' +58. & '?/ 2M8 & '? & % % &*) Z % 6$)$/V) 18C ;'?*:"2 :"0. &$7?4 6*7/ 7 2 2$:-U8 18' 7:- / %$.3) A ' 6 F6$) ) 1;.D8 Θ(p) ' &*) 1+ < p 8=) 18C ;'?:2 ) 1;. 8 B 1=8' 7 :- / %*.=3 )U8R2 X 4 & %*2$&*1*T"P A

42 B [ & A < < < < A A < A : 9 * ; G E Q N {Z} ( )*.=/ 0,& 0 (A u) P % - ) / ( u = a # 12 E E {(A, a, Z)} ' / ( u = ab, # 12. / ( (S ε) P 0 # 12 F {Z} F {Z, S} A 7 2 ["5 $6 [[ # 4 E E {(A, a, B)} & C/ 1*:"0*? Z % : % %*32+ : 7?8- &*73' ; - / )K0?& ' 4 & 2K: ) 1$% ;'?8&*7?C&&$)$/ 2R.=/ 0,M8,& % & -. / 0*Y / ) 1$%$/ 2 3 )4 6*7&*)>83*% :. 8*% ;2+9. / 0,Q8Q0 &.,&$% & -.=/ 0/ ) 1$%$/ 2 3 )=4 6$7&$)R83*% :. 8*% ;2M;' % 8' N & ' / )*.D& - %D0*? & ' 4 & 2 :) 1$% ;'? ;*4 8' A 2 X 4 & %*2$&*1*T ; - :". 0*? & ' 4 : ) 1$% ;'?R.D&*7&*7? &$1 / 2P 8>- &$7"3' ; - / )D0?& ' 4 & 2D:) 1$% ;'? 8+ 8,& % & -. / 0 / ) 1$% / 2 3)54 6$7&$)983% :".D8% ;2 2$8' N & ' / )*. & - &$% T0*? & ' 4 & 2 :) 1$% ;'? 8+ < 8>0 &.,&$% & -.=/ 0/ ) 1$%$/ 2 3 )G4 6$7&$)983% :".D8% ;2 2$8' N & ' / )*. & - &$% T0*? & ' 4 & 2 : ) 1$% ;'?8 < Q 8 - &$7"3' ; - / )+82 2 :-- &$7"3' ; - / ) 82D8>2 X 4 & %*2$&*1*TR0*? & ' 4 & 2=/ )P + + L 1, L 2 L 1 L 2 L 1 L 2 L 1& 02*Z 4O'8>- &*73' ; - / ) 0*? & ' 4 & 2 - &=/ >2$X 4 &$%$2*&$1*T>;' ' Z % ;) :"2=/ ) 1A 7?Q- &$7"3' ; - / )R0?& ' 40 & 2M8I2$:.F' &. & 0%$3.D8/ )- &$7"3' ; - / ) 12 X"00?& 0/ 78 1*:' 8% W A 4 6$7&$)R83% :".D8% ;2) &$7Z % ) 6$76 4 & ' &$7?& 0I3 7? 80/ ) L &*7?J- &$7"3' ; - / )0*? & ' 4I6$) A = (Q, Σ, E, {q 0 }, F ) &$7?+"81 0?& ' 4 &$%5N & ' / )*. & - T=% & '( &$)+,& % & -. / 0 / ) 1$% / 2 3)54 6$7&$)983Y L % :".D8% 8 X"00?& 0>C& ' ;% 8*% W"+ :7?>8 1 83*% :. 8*% 88 1 A = (Q, Σ, E, {q 0 }, Q \ F ) L 0*? & ' 4 & %D/ )*. & - /N & ' 7? A L / ) - &*73' ; - / ) A \

43 < < < < A < < < A A A < < A A < A < 6$%- &*73' ; - / )M0*? & ' 40 & 2M8Q. & % ) 1& % &M/ )- &$7"3' ; - / ).D&$% ) 1&$%U/ ) - &*73' ; - / ) 6$%K- &$7"3' ; - / )K0*? & ' 40 & 2R82 O' X"0C ) 6$7&>/ )K- &$7"3' ; - / ) 2 O' X0C) 6*7>/ ) - &*73' ; - / ) ε K M / 4 & ' +L8 L 1 L 2 = L 1 L 2 / 4 & ' +8 L 1 \ L 2 = L 1 L 2 M B 1 Y ' 6 F6*) &$)L4 6*7&*)983*% :. 8*% 8K800*?/ C 80R2 O' X0C X 1 / 2=80 &.D,& % & -. / 0 / ) 1$% / 2 3)54 6*7&*) ε 83% :".D8% ;% W"' + :7?=.D&*7& 07&*,$( O258 1$%*+ :7?=O- &$)5' 6 F6*) %/ )V4 6$7&$1*1& L;*%*.D& 0 ( & 0 &$7?/ 2;' ' 8F : %*C W'8R. ;)$/ 2 C 8K80 6 ' 2 O' + :7?4 8' 8.=/ '?& 0RC&. & 0 & %$/*( & ' & %9:' 4 8)*0 8 B 1 ε Y ' 6 F6*) &$) A = (Q, Σ, E, I, F ) 4 6*7&*)L83% :".D8% 8=;*%*.D& 0 &$% & / 0 & 2 8'.D8 1; - 89% & '( &*)*O' + < :7? E Q ( Σ {ε} ) Q. B 1 Y ' 6 F6*) &$)54 6*7&*)U83*% :. 8*% 8;*%*.D& 0 &$% N O *? &D8>2$X 4 &$%$2*&$1*T P ε δ : Q ( Σ {ε} ) P(Q), δ(p, a) = {q Q (p, a, q) E}. B 1D8' ;CC/;C - ;0K' ;% 8*% W ε Y ' 6 F6*) &$)G4 6*7&*)U83% :".D8% 8=81 8' 82 E ) 18*4 82$8%U/ )*. & - / uvw N & ' +"8 :' u {1}, v {0} 6*) w {1} A [ 5 [ q 0 ε q 1 ε q 2 6 % & ' &$% ) 1*T"' &*7&*) ε Y ' 6 F6$) &*)4 6*7&*)83*% :. 8*% ; : 19. / 0,/ 7.D&*72$:0 ) %$- 3 ;' 8*% W9&*7? < 4 & ' & & 2$4/ 4 8' & 0) 0 &.D,& % & -. / 0 / ) 1$% / 2 3)G4 6*7&*)983% :".D8% 8+8. & '? ε Y ' 6 F6$) 0 6 ' 2 O' / A B 1 Y ' 6 F6*) &$)D4 6$7&$)=83*% :. 8*% ;*4 8' & 2$4/ 4 8' & 0)K0 &.,&$% & -.=/ 0Y A = (Q, Σ, E, I, F ) ε / ) 1$%$/ 2 3 )G4 6*7&*)U83% :".D8% 8 A = (Q, Σ, E, I, F ) ' &$) 1 B ' 7:- / %$.3)* A F 6*)L8 1 E 8'. 81*:"2$8% 8*% ; - :1*18K.D&*7 7? q ;' ' 8F : %*- 8=( & ' X"'( O2 Λ(q) Y 4 8'8 1*:0M;' ' 8F : % :2 8'. 81;%*+8. & '?& 2 C&>& '' & & % < ( 3*%*0 / q Y C W"' < )*3F 8 ε Y ' 6 F6*) ) & ' C& ' &6 - % 4 &.D8 7;% q Y %9/ ) & - ( &$) ) 1 O2=2 /&$1$%L,&0Z < / W % *A 8'. 81*:"2-8K/ )+"818 1' &*7? & 0 Λ(S) = Λ(q), S Q. q S \ \

44 B & ' [ A < < A B A < < A A A <?/ ' 4 ;0*4 8' W + 2 / ) 1;.9Z % 8*% W2 : 7?. / 0,& 0 q Q Y - 8J6$) S Q Y - 8. / 0, Λ(q) +=.=/ 0, Λ(S) 2$X 4 &$%$2*&$1*T"2 C& 0DN & ' % &*) ) 1 O2+ :7?K&*1& 2=8,: % % 82 2$X 4 &$%$2*&$1*T98' 7 :- / %*.=3 )81G;%$. & 0 & % & 2L.D&*7 8*% ; - :1;) ;%8 ;%$. & 0 & % N O ?5) &$7Z % Y δ ) 6$76 4 & ' 4 6$71 / +"8. & '?&$%U81=8' 7:- / %$.3) & ) :- ;C % & '. &$1 8 Q = n 6$) +82 2$:-L8F ) 1& 3, :"2 W, ' Σ = m, 8' 7 :- / %*.=3 )5N 3*% ;)$/"/,& ( &' &*7- : ) ) 18CC&$) &$%$C& 0 O(n 2 m). 9 A F F {q I Λ(q) F } ( )8. / 0,& 0 q Q - ) ( )8. / 0,& 0 a Σ % - ) δ(p, a) p Λ(q) δ(q, a) Λ(p) p E { (p, a, q), p, q Q, a Σ, q δ(p, a) } A, 9# 4 2 ) :- 8/ C W"'V' ;*% ) 1 / 2+ :7?M8 1 6 ',8 [ 5 [ 5 [ δ ε q 0 {q 0 } {q 1 } q 0 ε q 1 ε q 2 q 1 {q 1 } {q 2 } q 2 {q 2 } B ' 2*8'.D8 1* ' 7 :- / %*.=3 ) % A Λ(q 0 ) = {q 0, q 1, q 2 } + Λ(q 1 ) = {q 1, q 2 } + Λ(q 2 ) = {q 2 } Λ(I) = Λ(q 0 ) +V6*)=& 00 & 2.D&$% ) 1&$% &K8 1 F Y N & 'V0 &. O- &*)+V&$16 - % F = F {q 0 } = {q 0, q 2 }A \

45 B < A (q 0, 0) : = δ(q 0, 0) δ(q 1, 0) δ(q 2, 0) = {q 1 } + {q 1 } Λ(q 1 ) = {q 1, q 2 } δ(q 0, 0) = {q 1, q 2 }A (q 0, 1) : = δ(q 0, 1) δ(q 1, 1) δ(q 2, 1) = {q 0, q 2 } + {q 0, q 2 } (Λ(q 0 ) Λ(q 2 )) = {q 0, q 1, q 2 } δ(q 0, 1) = {q 0, q 1, q 2 } (q 1, 0) : = δ(q 1, 0) δ(q 2, 0) = {q 1 } + {q 1 } Λ(q 1 ) = {q 1, q 2 } δ(q 1, 0) = {q 1, q 2 } (q 1, 1) : = δ(q 1, 1) δ(q 2, 1) = {q 2 } + {q 2 } Λ(q 2 ) = {q 2 } δ(q 1, 1) = {q 2 } (q 2, 0) : = δ(q 2, 0) = δ(q 2, 0) = (q 2, 1) : = δ(q 2, 1) = {q 2 } + {q 2 } Λ(q 2 ) = {q 2 } δ(q 2, 1) = {q 2 }. & ;*%U8 4 6$7&$)983% :".D8% 8;%$. & 0 & % % ;C' ;18% 8=6*)U;%$. & 0 & %,/ 87"- 8.( 8P A [ 5 [ 5 [ δ q 0 {q 1, q 2 } {q 0, q 1, q 2 } q 1 {q 1, q 2 } {q 2 } q 2 {q 2 } 5 + [ 5 + [ q 0 q 1 q 2 B 2$X 4 &$%$2*&$1*T"2 C& 0J6 - % & '.D&*1*1 O2I8Q4 6*7&*)83*% :. 8*% ;2$:0J8 - &$7"3' ; - / )I. +4 & ' & % & 2*& %P &$7?&*) Z % 6$)+) 1*:- 18*%+"/ % & - ; < / W - &,. 6 0?O' A ε Y ' 6 F6*) &$)U83*% :. 8*% ;*%D2*8F302 A. +*4 & ' &$% & 2$&$%) 1&.' 6 ' &$% &*) & 0M;C - ;2 2$8'/ )M.D&*78, ( 32 7?Q0? Z ' ' 8'& ' ' ;*% : % %2 X- - & ' A ( & ' X'( O2L8D2*&$1,T;' ' 8F : % :"2$8%*+ 6$)52*6 %G2$:0 < & 0*%*- / 2 3)G2 X- C T'*;' ' W( & ' ' & '854 6*7;' ' 8F : % :"2$8% \ > 5 + [

46 B A < < < A A 1 A 2 A 1 ε A 2 ε 8 C A 1 A 2 A 1 A 1 A 2 ε A 1 ε ε <, &$7?& 0 & 2 % :".D8% ;2 A 1 = (Q 1, Σ 1, E 1, I 1, F 1 ) 6$) A 2 = (Q 2, Σ 2, E 2, I 2, F 2 ) 4 6$7&$)83Y. +*4 & ' &$%D& - &,. 6 0?&8 1 A Y 4 8' ( & ' X"' % A = (Q, Σ, E, I, F ) ε Y ' 6 F6$) &*)D83*% :. 8*% 8 A & ' % 6$% & ' &*1*1 O2+ : 7?. / 0,& 0M&$) &$%$C& 8&*1M0 &. % & '( &*)*O' +82 2$:- Q 1 Q 2 = A 4 8' 8. & '?/ 2=;' ' 8F : % 8'.D8 1 & ' &. &/ %L;%$0 & 4 &*1*1 O2 7? &$) Z % 6*) +"8 :' A A = A 1 A 2 Q = Q 1 Q 2 {q 0 } + + Σ = Σ 1 Σ 2 I = {q 0 } + + F = F 1 F 2 E = E 1 E 2 { (q0, ε, q) } A q I 1 I 2 \

47 < < A < < < < < 7? 80 81$%K8 1& - &*,".D6 0*?%R2$8F ( 32+ 8'. 81$%&*7?E ( 8CC=2$&*1, T;' ' 8F : % 8I2*&$1,T;' ' 8F : % Y 8'.D &*) ) 1 O28 I 1 I 2 & '?&$% % 2 2 :-"&*7? ;' % 8' ;0 0 &. ' &*) 1 0 & 2 A ε Y ' 6 F6$) & 2 A L(A 1 A 2 ) = L(A 1 ) L(A 2 )A 1*:- 18*% +"8 A A = A 1 A 2 + Q = Q 1 Q 2 + Σ = Σ 1 Σ + 2 F = F 2 + I = I 1 E = E 1 E 2 p F 1 q I 2 :"' { (p, ε, q) } L(A 1 A 2 ) = L(A 1 )L(A 2 )A % & - ; < / W A A = A 1, 8 :"' < Q = Q 1 {q 0 }, Σ = Σ 1, F = F 1 {q 0 }, I = {q 0 } E = E 1 { (q0, ε, p) } p I 1 q F 1 p I 1 { (q, ε, p) }. A B %. % ) ( % / % / & % % % ) / < L(A 1 ) = ( L(A 1 ) ) 1M& ' TCC / & 2 C& 0M,&0 / ;' ; - :. +*4 & ' &$%) &*7 Z 6*76$4 & 'GE 8CCQC / 1*:0? Z ;) ;%K8, %$ :7?8>- &*73' ; - )90?& ' 4 & 291; - 82D8K- &$7"3' ; - )9. +4 & ' & 2 - & 0 6$1$4 &+"37?80 / )L8 1 & - &*,".D6 0*?O'2*8F : % ε 6 F6$) &*)=83% :".D8% 8;% 8' 82*Z 8% WI0 &.D,& & -. / 0 / 1$% 2 3)94 6*7&*) 83% :".D8% ;4 ; \

48 < < A < < < A < A < 7 7 < A < A Q A = (Q, Σ, E, {q 0 }, F ) % & '( &*)+ B. / 0 /.D;' / ) + 8>C ; -. & '? 4 & ' & & 2$4/ 4 8' & 0) A = (Q, Σ, E, {q 0 }, F ) % & '( &*)+ B &$) &$% 6 C& 0 % & '( &*)*O' + : 7? Q Q A B 1 B A = (Q, Σ, E, {q 0 }, F ) p 6$) q ;' ' 8F : % 8 & 2$4/ 4 8' & 0 ) + 8=% &$% ) 1*T"' &*7&*) < u ) 1*W- 8+. / 0,"2$&$% % TC T"'*4 6$7;' ' 8F : %*C 8( 3%$302L4 8 7?=&$7?/ 2 C T"' ) &.( 3%$302L4 6*7;' ' 8F : %$C p q < 89.=/ 0,& 0 u Σ ) 1*W- 8 { u p r, r F p u r, r 8>2*6 %9;' ' 8F : %D0 &.S& 2$4/ 4 8' & 0)+"82 2$:-G.D&*72 O' X"0C X1$% &$% u q s, s F u q s, s F. & % T2 B 1U8' ;CC / 8' 7 :- / %*.=3 )*C 80 < )$/ ' ' 8778' ( & ' X"'( O2U8=. &$7"2 O' X0C X 1$% & % 81=&$7?.D; ) ) 8'& 2$4/ 4 8' & 0) & 2$&$%9F&,/ 7KX ) ) 1&$4 :0 ( 32! &$% T ;' ' 8F : %*F ; - :2*8*%+ &. - & 0,&$1&$% %=;' ' 8F : %$F ; - :"2 :1>;' ' 8F : %$F ; - :"2 C W';' ' WI' / ) % ;*%>- & 0,& ' O02R82*6$) T"CC/.D&*7 < )$/ ' ' 8 7 :1;) - &. 6 0?6 C& 0+" >818' 7:- / %$.3)9) :- ;0K&*7?R;' ' 8F : %*F ; - %. &$7 < Y )$/ ' ' 8 7 :1$%$ :-G. &$7 < )$/ ' ' 87: 1*1 32D8 : 1*1; - & 0,& ' %D' / ) % 8=X) ) 1&$)9& ' &. 6 %9/ ) B 1J8' ;CC /98' 7:- / %$.3) %M:"'? 80 B Y - 8 8' 2$8'. 81* & '?C T'.D; -R2 / 1; - %*32Q8 1 & ' 6 - &$% &$%$' & 0M;' ' 8F : % :2*8*% / 4 & 'V8R4 6*7&*)83*% :. 8*% 8M,&$% & -.=/ 0/ ) 1$%$/ 2 3 )=6*) % & '( &$)+G8 δ(p, a) F :0% :) 809&*7?D& ' &. & %% 8 - % 8'.D8 1+ / % %5/ )8' 2*8'.D8 1*1 32 elem N O ?%*+8. & '? 81=&$7?& ' &. + 8'.D8 1 &$7?&$%$' & 0& ' &.D6$%U8,$( 8 4/ ) ) 18 \

49 < A < A < < < < < < < < < < < A A < < A < A < 8 9 $ A [ ( & ' X'( O2K. &$7>&*7?Y &*7? < )$/ ' ' '8 1DX) ) 1&$)L:"'? 80 { } ;' ' 8F : %$F ; - %+ p, q 8. & '?- & p F 6$) q F 4 87?=N :-,Z % 4 8 A. / 0,& 0L( & ' X' & %*' & 0 { } ;' ' 8F : %*F ; - :1- & 0,& '( O02 &*7?RO- &*)D' / ) % ;*%+ p, q. / 0,& 0L( & ' X' & %*' & 0 { } ;' ' 8F : %*F ; *)D.=/ 0,& 0 p, q a Σ C&$%9+- & 4/ 1*) 7;'( 32K.D&*7>81 { ( ) ( )} ;' ' 8F : %*F ; - :2*8*%+ elem δ(p, a), elem δ(q, a) 88 1DZ 7?2$8F : % %U;' ' 8F : %*F ; - :2K2 X1 O' 4 8' 8.D& '?/ 2. &$74 80 < )$/ ' ' 87: 1$ :- < )$/ ' ' 87: 1*1 32.D&*7>8 { } F ; - %9/ )+ p, q &$7?&$% &.=C& 0=8R.D; -V& ' T1*T' &$7>8 { } F ; - :1- & 0,& ' %D' / ) % 8& ' &.D& / 4 & ' + p, q 2 O' X0C& 0+ 8K8 N & 0*%$/;' ' 8F : %$F ; - :"22 X1 O'&*7?)$/ 0 < )D. &$7 < )$/ ' ' 87: 1$ $:-Z - ( 32KC& 8 {p, q} F ; - %U8 { ( ) ( )} elem δ(p, a), elem δ(q, a) F ; - :2 : 1- & 0,& ' %D' / ) % 8>.=/ 0,&*7?/ 2$6 C& +N & ' % 6$4 & + :7? δ(p, a) δ(q, a) + 4 :0 ( 32 X) ) 1&D8R.D&*7*( & ' X' & %*' & 0 & 2$4/ 4 8' & 0 ) ;' ' 8F : %*F ; - :2*8*% % 9# 4 2 A B 18' 7:- / %$.3)C& N & ( &*1$% 6$4 & ' + 8>8% ;C' ; 18*%*C 80K&*7? < & ' ' 80 &.S% 8 - % 8'.D8 1 < )$/ ' ' 87: %+ 82 2$:-8D0 & 2 /. &$7 N & ' & ' T9) :-6*):) 1 ' :"F9/ 0,&9= &U2*6 %V& 2$4/ 4 8' & 0);' ' 8F : %*+% & ;%X) ) 1& 4 :"0*Y 8% W B 1X ) ) 1&$4 :0 ;) %. / 0,8,,/ 75N :'?% 8% ( 32+8.D&,,/ 7 < ) 82L' & &$% ) 6*7&*) ' % 8' ;0 : ) & 2$4/ 4 8' & 0 < / 8 - & ' ; < / WU815;' ' 8F : % :2 8'.D8 1;*%& 2$4/ 4 8' & 0 < / 8:) 1$% ;'?:2-8UC :0% ( 8 / 0Y,& 0K/ '?& 0=:) 1$% ;'?K;' ' 8F : % 8/&$7?&$%$' & 0K;' ' 8F : % % ; 4 :"0 8*% W2 X) ) 1& &$7*( &*7? 16*) B ' 7 :- / %*.=3 )*302K8CC 80>8 1K&*) & %*C& 0/ )=8' 2$8'. 81 8*% W"+ 8R8R,& % & -. / 0*Y / ) 1$%$/ 2 3 )4 6$7&$)R83% :".D8% 8I0 &. % & '( &*)+L818 1R :'?80;' ' 8F : % :2+L8.D& '? & 2 C T"' 8,: % %DC&.D& 0 &$% /*( & ' - &0/ 0 < )9;*%*.D& 0 &$% 2 2 :- { } F ; -/ )9& ' T N :-,3' 8*%+6$) A, {q} q 4 6$7;' ' 8F : %+ E 7?% & 2 / 0% ( O2+.=/ 0% 8&$1=8>F ; -5.D&*7' & 00 & < )$/ ' ' 87: 1$4 8 \

50 A [ [ A B [ 5 5 [ < [ 5 < < A 8 6 ',8 5 [ q 0 q 1 q 2 [ 5 [ q 3 q 4 q 5 5 q 0 q 1 q 2 q 3 q 4 q 5 5 [ q 0 q 3 q 1 q 5 q [ 2 q 4 B 1G8' 7:- / %$.3)8' 2*8'.D8 1;) ; :1V&*7?5% ;C' ; 18*% : % 8 ) 1 0 ;' & '?C& 0L8 < )$/ ' ' 87: 1; ) % 4 6$7&$1*1 O2 {p, q} ;' ' 8F : %$F ; -. &$7*( & ' X"' 6*) 6 %.D&*7 < )$/ ' ' 8 7 :1;) ;% p ) :-6*) : ) 1 ' :F q 4 87? q ) :-V6*) p : ) 1 ' :F % 8' ;' 2$: 1; ) ;0 ;'& ' & '?&*1& % % < )$/ ' ' 879( & ' 1 / ' T) 1*X-". &$7 < )$/ ' ' 87: 1*1 32G8 {q 2, q 0 } + {q 2, q 1 } + {q 2, q 3 } + {q 2, q 4 } 6*) F ; - :"2$8% {q 2, q 5 }. / 4 & ' 81=&$7?&$%$' & 0 4 6*7;' ' 8F : % q 2 *A \

51 B < < A < A A < B < B < 1 3*% ;0R) :- - 8>4 &$) ) 1 O2>8 < )$/ ' ' 'V. &$7I0 &. ( & ' X"' %;' ' 8F : %*F ; - :2*8*%+V6$)81R8' 7 :- / % Y.=3 )) 1& - / 0%>. &$7 4/ 1*) 7;'( 32RT2*& % &$1,$( O28 {q 0, q 1 } F ; - - :1*1; - & 0,& '( O2R8 A 2$X 4 & %*2$&*1*TK;' ' 8F : %$F ; - :"2$8%*P {elem ( δ(q 0, 0) ), elem ( δ(q 1, 0) ) }, {elem ( δ(q 0, 1) ), elem ( δ(q 1, 1) ) } {q 1, q 4 } + {q 4, q 2 }A / 4 & ' {q 4, q 2 }.D; -G. &$74 80L( & ' X"' 4 &+.D&*7*( & ' X'( O2 {q 0, q 1 } Y %D/ ) A {q 0, q 3 } F ; - &$) &$% 6 C& 08J2$6$%E (F ; - {q 1, q 5 } 6*) {q 4, q 4 }A {q 1, q 5 } F ; - : 1 < :1*1; - & 0,& '( O2 &$7?R' / ) % ;C 808 {q 0, q 3 } Y %*+"8 181 {q 1, q 5 } {q 0, q 3 }. : ) % {q 1, q 5 } Y % & ' N :"'?% 8*% {q 4, q 4 } 6*) {q 2, q 2 } F ; - :"2$8%U2$8F ( 32+8.D& '? & 2 &$198 1 < 8' 7 :- / %*.=3 )D) 1& - / 0%9) &.=.=/ %9) &. - & 0,& ' O02 :"'?% 8*% ( 32>8 {q 0, q 4 } F ; - - 8' :1$Y A 1; - & 0,& ' %DF ; - :"2 {q 1, q 4 } 6$) 7?/ 2 )$/ 0 < ). &$7 < )$/ ' ' 87: 1$4 8+&*16 - % : 1*1; ( 32 {q 4, q 3 }A - & 0,& '( O2G&*7?Y &*7?D' / ) % ;C 80L8 {q 0, q 4 } F ; - %* {q 1, q 4 } {q 0, q 4 }, {q 4, q 3 } {q 0, q 4 }. : ) %>8 {q 1, q 4 } F ; - - 8'N :"'?% 8*% 4 88 {q 4, q 4 } + F ; - :"2$8%R2*8F ( 32+L6$)M. / 4 & ' {q 2, q 3 } &$13% W"CC/5.D&*74 80( & ' X"' 4 & < )$/ ' ' 8778' +U.D&*7*( & ' X'( O28 F ; - %K6$)K8I' / ) % ;C 80 {q 1, q 4 } :1*1; - & 0,& ' % {q 0, q 4 } F ; - %L/ ) 7?DN :'?% 8% $%U2$8F ( 32+ : 7? 6*) A q 0 q 3 q 1 q 5 A 1& 2*& %DX) ) 1& 4 :"0* >;C - ;0' ;% 8*% WM,& % & -. / 0 / ) 1$% / 2 3)94 6*7&*)=83*% :. 8*% ;*%2*8F ( & '?/ 2=& 2$4/ 4 8' & 0 )981=& - &*,& %$/ 4 & ' \

52 Pumpáló lemma reguláris nyelvekre Tétel (pumpáló lemma). Bármely L reguláris nyelv esetében létezik olyan n 1 természetes szám (amely csak L-t l függ), hogy L bármely legalább n hosszúságú u szava felírható u = xyz alakban úgy, hogy (1) xy n, (2) y 1, (3) xy i z L minden i = 0, 1, 2,... értékre. Ha L reguláris nyelv, akkor létezik olyan DVA, amely felismeri az L nyelvet): A = (Q, Σ, E, {q 0 }, F ), tehát L = L(A). Legyen n az automata állapotainak száma, azaz Q = n. Legyen u = a 1 a 2... a m L és m n. A determinisztikus véges automata felismeri az u szót = léteznek a q 0, q 1,..., q m állapotok és a a q 1 a 0 2 a q1 3 a m 1 q2 qm 1 a m qm, q m F séta.... q k 1 q j+1 a k a q 2... j+1 q j q 1 a a j a 3 2 q j = q k a k+1 a 1 qk+1... qm q 0 a m Mivel csak n állapotunk van, és m n, a skatulya-elv alapján a q 0, q 1,..., q m állapotok között van legalább két megegyez. 1

53 ... q k 1 q j+1 a k a q 2... j+1 q j q 1 a a j a 3 2 q j = q k a k+1 a 1 qk+1... qm q 0 a m Legyen q j = q k, ahol j < k és k a legkisebb ilyen index. Ekkor j < k n. Bontsuk fel az u szót a következ képpen: x = a 1 a 2... a j y = a j+1 a j+2... a k z = a k+1 a k+2... a m. Látszik, hogy xy n és y 1. Bebizonyítjuk, hogy xy i z L tetsz leges i-re. Mivel u = xyz L, létezik a q 0 x q j y q k és q j = q k miatt felírható q 0 x q j y q j z q m, q m F séta, z q m, q m F alakban is. y q j séta elhagyható vagy többször is beilleszt- Ebb l következik, hogy a q j het. Tehát léteznek a következ séták: q 0 q 0 x q j x q j z q m, q m F, y q j y... y q j z q m, q m F. Ebb l következik, hogy xy i z L tetsz leges i-re, és ezzel bebizonyítottuk a lemmát. 2

54 1. példa. Bebizonyítjuk, hogy L 1 = {a k b k k 1} nem reguláris. Tegyük fel, hogy L 1 reguláris, és legyen n a pumpáló lemma szerint az L 1 -hez tartozó természetes szám. Mivel az u = a n b n szó hossza 2n, ezért ez a szó is felbontható a lemmában megadott módon. Bebizonyítjuk, hogy ez ellentmondáshoz vezet. Legyen a felbontás u = xyz. A lemma szerint ekkor xy n, tehát x is és y is csak a-t tartalmazhatnak, és mivel y 1, y legalább egy a-t tartalmaz. Ekkor xy i z, i 1-re, különböz számú a-t és b-t tartalmaz, tehát xy i z L 1 tetsz leges i 1 értékre. Ez ellentmond a lemma állításának, tehát az a feltevésünk, hogy L 1 reguláris, hamis. Tehát L 1 L 3. Mivel a G 1 = ({S}, {a, b}, {S ab, S asb}, S) környezetfüggetlen nyelvtan L 1 -et generálja, így L 1 L 2. E két állításból rögtön következik, hogy L 3 L példa. Bebizonyítjuk, hogy L 2 = { u {0, 1} n 0 (u) = n 1 (u) } nem reguláris. (n 0 (u) az u-ban szerepl nullák, n 1 (u) pedig az 1-esek számát jelenti). Az el bbi példához hasonlóan járunk el az u = 0 n 1 n szóval, ahol n most a pumpáló lemmában az L 2 -höz tartozó természetes szám. 3. példa. Bebizonyítjuk, hogy L 3 = { uu u {a, b} } nem reguláris. Legyen w = a n ba n b = xyz, ahol n itt is a pumpáló lemma szerinti L 3 -hoz tartozó természetes szám. Mivel xy n, következik, hogy y csak a bet ket tartalmazhat, és legalább egyet tartalmaz is. De ekkor a lemma szerint xz L 3, ami lehetetlen. Tehát L 3 nem reguláris. 3

55 A pumpáló lemmának több érdekes következménye van. Az L reguláris nyelv akkor és csakis akkor nem üres, ha létezik u L, u < n, ahol n a pumpáló lemmában az L-hez tartozó természetes szám. Az állítás egyik irányba nyilvánvaló: ha létezik n-nél rövidebb szó L-ben, akkor L. Fordítva, legyen L, és legyen u a legrövidebb szó L-ben. Megmutatjuk, hogy u < n. Ha ugyanis u n, akkor alkalmazzuk a pumpáló lemmát, és azt kapjuk, hogy u = xyz, y > 1 és xz L. Ellentmondás, mivel xz < u, és u a legrövidebb L-beli szó. Tehát u < n. Létezik olyan algoritmus, amely eldönti, hogy egy reguláris nyelv üres-e. Tegyük fel, hogy L = L(A), ahol A = (Q, Σ, E, {q 0 }, F ) egy determinisztikus véges automata. L akkor és csakis akkor nem üres, ha tartalmaz n-nél rövidebb szót, ahol n az A automata állapotainak a száma. Következésképpen, elegend azt eldönteni, hogy van-e olyan n-nél rövidebb szó, amelyet A elfogad. Mivel az n-nél rövidebb szavak száma véges, a kérdés algoritmikusan eldönthet. Amikor a véges automaták elérhetetlen állapotainak meghatározására adtunk eljárást, akkor megjegyeztük, hogy az az eljárás használható annak eldöntésére is, hogy az automata által felismert nyelv üres-e. Mivel a véges automaták reguláris nyelveket ismernek fel, immár két eljárást ismerünk annak eldöntésére, hogy egy reguláris nyelv üres-e vagy sem. S t, van egy harmadik eljárásunk is, ha gyelembe vesszük, hogy a nem produktív állapotok kizárására szolgáló algoritmus is alkalmazható arra, hogy eldöntsük egy reguláris nyelvr l, hogy ürese vagy sem. Egy L reguláris nyelv akkor és csakis akkor végtelen, ha létezik u L úgy, hogy n u < 2n, ahol n a pumpáló lemmában az L-hez tartozó természetes szám. Ha L végtelen, akkor tartalmaz 2n-nél hosszabb szót, és legyen u a legrövidebb, de 2n-nél hosszabb L-beli szó. Mivel L reguláris, alkalmazható rá a pumpáló 4

56 lemma, tehát u = xyz, ahol xy n, tehát y n is igaz. A lemma szerint u = xz L. Mivel u < u, és a legrövidebb, de 2n-nél hosszabb L-beli szó u, kapjuk, hogy u < 2n. Másrészt y n miatt u n is teljesül. Fordítva, ha létezik u L úgy, hogy n u < 2n, akkor alkalmazva rá a pumpáló lemmát, következik, hogy u = xyz, y 1 és xy i z L tetsz leges i-re, tehát L végtelen. Feltehetjük a kérdést, hogy alkalmazhatjuk-e a pumpáló lemmát egy véges nyelvre, hisz a pumpálással végtelen sok szót kapunk? A válasz abban rejlik, hogy egy véges L nyelvet felismer bármely véges automata állapotainak száma nagyobb, mint L leghosszabb szavának a hossza. Ezért L-ben egyetlen szó sincs, amelynek a hossza legalább n, ahol n a pumpáló lemmában az L nyelvhez tartozó természetes szám. Tehát egyetlen L-beli szó sem bontható fel xyz alakban, ahol xyz n, xy n, y 1, és ezért nem kaphatunk végtelen sok további L-beli szót. 5

57 Reguláris kifejezések A következ kben tetsz leges Σ ábécé esetén bevezetjük a Σ feletti reguláris kifejezés és az általa jelölt nyelv fogalmát. A reguláris kifejezés lesz. egy formula, míg az általa jelölt nyelv egy Σ feletti nyelv Például, ha Σ = {a, b}, akkor az a, b, a + b kifejezések Σ feletti reguláris kifejezések lesznek, amelyek rendre az {a}, {b}, {a} {b} nyelveket jelölik. Rekurzívan értelmezzük a Σ feletti reguláris kifejezés és az általa jelölt nyelv fogalmát. reguláris kifejezés és az üres nyelvet jelöli. ε reguláris kifejezés és az {ε} nyelvet jelöli. Ha a Σ, a reguláris kifejezés és az {a} nyelvet jelöli. Ha x, y reguláris kifejezések és az X, illetve Y nyelveket jelölik, akkor (x + y), (xy), (x ) is reguláris kifejezések és rendre az X Y, XY és X nyelveket jelölik. Csak azok Σ feletti reguláris kifejezések, amelyeket a fenti szabályok véges sokszori alkalmazásával kapunk. Egy reguláris kifejezésben bizonyos zárójeleket elhagyhatunk, amennyiben - gyelembe véve a m veletek prioritási sorrendjét (iteráció, szorzat, egyesítés), nem változtatjuk meg az általa jelölt nyelvet. x (x + y)-t is írhatunk. Például ((x )(x + y)) helyett Két reguláris kifejezés ekvivalens, ha ugyanazt a nyelvet jelöli, azaz x y, ha X = Y, ahol X és Y rendre az x és y reguláris kifejezések által jelölt nyelvek. 6

58 Ekvivalens kifejézek x + y y + x (x + y) + z x + (y + z) (xy)z x(yz) (x + y)z xz + yz x(y + z) xy + xz (x + y) (x + y) (x + y ) (x + y ) (x + y) (x y ) (x ) x x x xx xx + ε x Megmutatjuk, hogy minden véges L nyelvhez megadható olyan x reguláris kifejezés, amely L-et jelöli. Ha L =, akkor x =. Ha L = {w 1, w 2,..., w n }, akkor x = x 1 + x x n, ahol minden i = 1, 2,..., n esetében x i a {w i } nyelvet jelöl reguláris kifejezés. Ez utóbbit pedig a következ képpen adjuk meg. Ha w i = ε, akkor x i = ε. Különben, ha w i = a 1 a 2... a m, ahol m 1 függ i-t l, akkor az x i = a 1 a 2... a m, ahol elhagytuk a zárójeleket. Stephen Cole Kleene ( ) Tétel (Kleene tétele). Az L Σ nyelv pontosan akkor reguláris, ha van olyan Σ feletti reguláris kifejezés, amely éppen L-et jelöli. 7

59 x reguláris kifejezés = L nyelv, amelyet x jelöl, szintén reguláris. indukcióval: Ha x =, x = ε, x = a, a Σ, akkor L =, L = {ε}, L = {a}. Mivel L mindhárom esetben véges, ezért reguláris. Ha x = (x 1 + x 2 ), akkor L = L 1 L 2, ahol L 1 és L 2 rendre az x 1 és x 2 reguláris kifejezések által jelölt nyelvek. Az indukciós feltevésünk értelmében L 1 és L 2 reguláris nyelvek, így L is az, mivel a reguláris nyelvek osztálya zárt az egyesítésre. Az x = (x 1 x 2 ) és x = (x 1) esetek bizonyítása hasonló. L reguláris nyelv = x reguláris kifejezés, amely éppen az L nyelvet jelöli. Ha L reguláris, akkor létezik egy A = (Q, Σ, E, {q 0 }, F ) determinisztikus véges automata, amelyre L = L(A). Legyenek A állapotai q 0, q 1,..., q n. Értelmezzük az R k ij nyelveket, minden 1 k n és 0 i, j n értékekre. R k ij azon szavak halmaza, amelyek hatására az A véges automata a q i állapotból a q j állapotba kerül úgy, hogy közben nem használja a k-nál nagyobb index állapotokat. Az R k ij halmazokat formálisan is leírhatjuk: R 1 Rii 1 ij = {a Σ (q i, a, q j ) E}, ha i j, = {a Σ (q i, a, q i ) E} {ε}, Rij k = ( ) Rk 1 ij R k 1 ik R k 1 kk R k 1 kj minden i, j, k {0, 1,..., n} értékre. Indukcióval: R k ij halmazok leírhatók reguláris kifejezésekkel. Ha F = {q i1, q i2,..., q ip } az A véges automata végállapotainak halmaza, akkor L = L(A) = R0i n 1 R0i n 2... R0i n p is megadható reguláris kifejezéssel az R0i n 1, R0i n 2,..., R0i n p nyelveket jelöl reguláris kifejezésekb l a + m velet segítségével. 8

60 Reguláris kifejezés hozzárendelése véges automatához 1. módszer. Felhasználjuk Kleene tételének az eredményét, azaz megkonstruáljuk az Rij k halmazokat, és felírjuk az L = Rn 0i 1 R0i n 2... R0i n p nyelvet jelöl reguláris kifejezést, ahol F = {q i1, q i2,..., q ip } az automata végállapotainak halmaza. 1. példa q0 q 1 0 L(A) = R 1 00 = R 0 00 R 0 01 ( R 0 11 ) R 0 10 R 0 00 : 1 + ε 1 R 0 01 : 1 0 R 0 11 : R 0 10 : ε + 0 (11 + ε)0 + ε ε 11 Ekkor az L(A)-nak megfelel reguláris kifejezés: (1 0 + ε) (1 0) 11. 9

61 2. példa. 0 0 q 0 q 1 q 2 q k = 1 k = 0 k = 1 k = 2 k = 3 R k 00 ε ε ε ε R k R k (0 + 10)0 R k (0 + 10) (0 + 10)0 1 R k 11 ε ε ε ε R k R k R k ε 0 + ε 0 + ε 0 R k R k 33 ε ε ε ε Az R nak megfelel reguláris kifejezés: 11 + (0 + 10)

62 2. módszer. A véges automata fogalmát általánosítjuk úgy, hogy az automata gráfjának éleit nem bet kkel, hanem reguláris kifejezésekkel címkézzük meg. Egy ilyen automatában minden séta meghatároz egy reguláris kifejezést, amely meghatároz egy reguláris nyelvet. Az általánosított véges automata által felismert nyelven a produktív séták által meghatározott reguláris nyelvek egyesítését értjük. Könnyen belátható, hogy az ilyen általánosított véges automatákkal is éppen a reguláris nyelvek ismerhet k fel. Az ekvivalens átalakítások a köv. ábrán láthatók. Amennyiben az ábrán látható 1, 2, 4, 5 csúcsok közül bármelyik kett egybeesik, a végeredményben ezeket összevonjuk, így hurokél is megjelenik. x y helyett x + y 1 2 x y z 3 u v 4 5 helyett xy z 1 2 xy v 4 5 uy v uy z El ször átalakítjuk a véges automatát megfelel ε-átmenetek segítségével úgy, hogy egyetlen kezd - és végállapota legyen. Ezután addig alkalmazzuk rá az ekvivalens átalakításokat, amíg gráfja egyetlen élt tartalmaz, amelynek címkéje az eredeti véges automata által felismert nyelvet jelöl reguláris kifejezés. 11

63 1. példa. ε q 0 q 1 ε ε 1 q 0 ε 00 1 ( ) Az eredmény ( ), amely, habár más alakú, de ugyanazt a nyelvet jelenti, mint az el bbi módszerrel kapott kifejezés 12

64 2. példa. a b b c a a ε bb c ε a ε ε ε a + bb ca (a + bb) + (a + bb) ca 13

65 3. példa q 0 10 q 2 q q q 3 11 q q 3 14

66 3. módszer. formális egyenletek módszere Minden állapothoz hozzárendelünk egy X változót (különböz állapotokhoz különböz t) és egy egyenletet, amelynek bal oldalán X, jobb oldalán pedig Y a alakú kifejezések összege vagy ε állhatnak, ahol Y is egy állapothoz rendelt változó, a pedig egy bemeneti szimbólum. Ha az X változónak megfelel állapotba nem vezet él, akkor az X baloldalú egyenlet jobb oldalán ε szerepel, különben az összes olyan Y a alakú tag összege, amelyekre teljesül, hogy a véges automata gráfjában az Y változónak megfelel állapotból egy a-val címkézett él vezet az X változónak megfelel állapotba. Amennyiben az X változónak megfelel állapot kezd állapot és egyben végállapot is, akkor az X baloldalú egyenlet jobb oldalán megjelenik egy ε tag is. Például a köv. ábra esetében 0 0 q 0 q 1 q 2 q legyenek ezek a változók X, Y, Z, U, amelyek a q 0, q 1, q 2, q 3 állapotoknak felelnek meg. A megfelel egyenletek a következ k: X = ε Y = X1 Z = X0 + Y 0 + Z0 U = Y 1 + Z1. 15

67 Ha egy egyenlet X = Xα + β alakú, ahol α, β tetsz leges szavak, amelyek nem tartalmazzák az X változót, akkor könny ellen rizni, egyszer behelyettesítéssel, hogy X = βα megoldása az egyenletnek. Mivel az egyenletek lineárisak a változókban, minden egyenlet felírható X = Xα + β vagy X = Xα alakban, ahol α nem tartalmaz egyetlen változót sem. Ezt behelyettesítve a többi egyenletbe, eggyel csökkentjük azok számát. Így a rendszer, megfelel helyettesítésekkel, megoldható minden változóra. Az egyenletrendszert megoldva a végállapotoknak megfelel változók adják a megoldást jelent reguláris kifejezést úgy, hogy összeadjuk az ezen változóknak megfelel reguláris kifejezéseket. Példánkban X = ε Y = X1 Z = X0 + Y 0 + Z0 U = Y 1 + Z1. a fenti egyenletrendszer els egyenletének segítségével azt kapjuk, hogy Y = 1. Innen Z = Z0, azaz Z = Z0 + (0 + 10), és ezt megoldva azt kapjuk, hogy Z = (0 + 10)0. Innen pedig U egyszer en megkapható: U = 11 + (0 + 10)0 1. Ezt a módszert alkalmazva a köv. ábra esetében q0 q

68 a következ egyenletekhez jutunk: X = ε + X1 + Y 1 Y = X0 + Y 0 Kiemelés után: X = ε + (X + Y )1 Y = (X + Y )0. A két egyenletet összeadva a következ egyenlethez jutunk: X +Y = ε+(x +Y )(0+1), ahonnan (ε-t β-nak, (0+1)-et α-nak tekintve) eredményül kapjuk a következ t: X + Y = (0 + 1). Innen behelyettesítés után megkapjuk X értékét: X = ε + (0 + 1) 1, amely ekvivalens a másik módszerrel kapott kifejezéssel. 17

69 Véges automata hozzárendelése reguláris kifejezéshez A r reguláris kifejezéshez hozzárendelünk egy általánosított véges automatát: r Azután lépésenként alkalmazzuk a köv. ábrán látható átalakításokat mindaddig, amíg a véges automata élei Σ elemeivel vagy ε-nal lesznek címkézve. xy x y helyett x + y x helyett y helyett x ε ε x 18

70 Példa. Induljunk el az ε + (0 + 1) 1 reguláris kifejezésb l. követkeas k: ε + (0 + 1) 1 (a) ε (0 + 1) 1 (b) Az átalakítás lépései a ε ε ε ε 1 (0 + 1) 1 (c) (d) ε 1 1 ε ε 1 ε 1 0 (e) (f) Az utolsó el tti véges automata egyszer bb alakban is megadható, ez az utolsó ábrán látható. Ha ebb l kiküszöböljük a ε-lépést, átalakítjuk determinisztikussá, akkor a köv. ábrán látható véges automatát kapjuk eredményül 0 19

71 amelyr l be lehet bizonyítani, hogy ekvivalens a köv. véges automatával q0 q

72 M M ! " #%$& '(*)%+)%, -.//)%,%0 )*'1'()0 2, 3'4 G = (N, T, P, 367)0 (')*#78 +39*:0 (*3; S)5 A β 30 3#<*3# 5 A N 5 β (N T ) +. = )/)'/)>@?*)%, AB3*+ S ε 8 +39*:0 (C; 8 36D)*''(; 9)*' ')*6E8 +)& )F)*0G)%/()%,%0 )*' 5 S 8 +39:0 (IH J@99KJ0 >30 :' 8 )*61L M + L(G) = {u T S /)%,%0 )*'O'()0 2L P )*& )673Q, J6D3, :# 2)*& )*6D3Q, J@673, :# = G u} '(*)*0 213 G '()0 2, 3'1:0, 30/)'*)& :0,D# $& '(*)%+)%, -./N 367)0 (*)*#K#%$& '()+), -.*//),0 )'1'(*)*0 2)*#),7; 86D)*& '*)#R- )*0 2)*& )*6D3Q, J@673, :#K0 S*'()/S9)*'13993'T#.0 $@'9$+'*)# 3 2S%/)%873Q, J6D3, :#%, U0?J/*( )%/(& S8 +%,V3## J&; 82:0,?*3,%'3#7:0 0 3FJ*, J*,?*3K')*6W0 SF')*#I, J*2:99 3K9)*6D)*'),%;*8 +U@9*3' X.& )%8H )*0 ),IJ0 238'3#Y 6D:8& S%8 +%,R& )*'>)0 #)%+')*#7)%/(D2)*& )*6K67)6ZU& ; :230 L M 2)& )6 9)' 3+1<'LG2)*& )*6D:9S[SVH )*0 );,\, :& J@0H Q#L a 1 a 2 LLL a n ] ^ _^ ` ^ a b l d m g m j z k LLL c ^ f ^ _ bj ^ ` k ` ^ _ c ^ d e f gh _ i z 1 z 0 2)& )673Q, J6D3, 3n)%/(n8 +U,O#%3F 9)67)'*)%,%#S*', 3B#%)+>A:0 0 3FJ*,9U0; '*>@Q0#*; S8K3 2)*& )*6K9)*'O)%/(18F)[; :0 ; 8Z8 +*; 6 9U@0 Q6 3K2)& )6o#)%+>A8 +*; 6 9U@0 Q6731:0 0 L M 6 p# $>S%8 ) 8 J& :'n3*+t3#%,q*:0 ; 8K:0 0 3FJ*, 3B# $2),#%)+AC9)67)'*)%, ; 8 +*; 6 9U@0 Q6 X 36D)*0 (B.& )8 8 +UB; 8 0 )?*)%, Y S%8I3Z2)*& )*6!, )%, ) H S*'K0 ) 2*A 8 +*; 6 9U@0 Q6q; 867)& )%, S9)*'7:0 0 3FJ*, J*,V2:0, S8\3Z2)*& )*6, )%, ) H S*'O0 ) 2*AO8 +*; 6K9U0 Q6r?)*0 (S& )D)/*(K8 +U,Is &\9) X 36D)*0 (K8 +*; ', S'O0 )?*)%,7.& )%87; 8 YL t

73 M S%, - S*0 )G- )*0 ; 86D)*& S%8%;6ZU> 0 )*?), 8 S%/)%8L P S/:0 0 3FJ,, UZ- )0 ; 867)& S8& A@09)%8 +S0.'#?*3 3V2)& )673Q, J6D3, 3\379)*6D)*'),%;%8 +UZ)*0 J0 238 :*8 3ZQ, :'V2S/:0 0 3FJ,%93Z#%)&.0 L V& )%8 2)*& )*6ZN 67)0230 Un- )0 ; 867)& S8& A@0 9)%8 +S0.'#?*3T39)67)'*)%, ;@8 +U)0 J@0 23*8 :8 :'*3#OF; 0 0 3'*3, :9*3' 3Z2)& )6W.& )%8Z0 )/*(*)*'L = )/D- J/H Q# 6KQ, 3,';?*J/( 3K#S,V- )0 ; 867)& S8%;67U>K)*#%2; 230 )*'*8 )%/(67:* L )67>), )*& 6D; '; 8 +%, ; #Q8V2)& )673Q, J6D3, :'3# '*)%2)%++.#D3 V = (Q, Σ, W, E, q 0, z 0, F ) & )'*>)%+)%,,7?*)%, )8, 3?*J0 Q 3*+ :0 0 3FJ, J@# 2S%/)%8 ')*6r.& )87?30 673*+3 5 Σ 3 9)67)'*)%, ;:9S[S 5 W 3 2)*& )*6D:9S[S 5 E Q ( Σ {ε} ) W W Q 3+ :,67)'*)%, )# 23/( S*0 )*#?*30 6D3+3 5 q 0 Q 3 #)%+>A:0 0 3FJ, 5 z 0 W 3 2)*& )*6K67)6ZU& ; 31#)%+>A H )0 ) 3 2S/:0 0 3FJ, J@#?*30 6D3+3L 5 F Q /*( (p, a, z, w, q) :,%6D)*'),I3*+%, H )0 )',%;?*J/(O?*3K3 5 V 2)*& )*6D3Q, J@673, 3 3 :0 0 3FJ*, N p 9*3'D23' 3T9)*6D)*'),%; /@& U@03*+ a H )*0 ),RJ@0 23*8 8 3 X 36D)*0 (T6ZJ8,7.& )8R8 +UT; 8D0 )*?), Y S%8R372)& )6, )%, ) H S*'10 ) 2*A18 +*; 6K9U0 Q6 3##%J& 5 z5 q :0 0 3FJ*,9*316D)%/( :,IS8\2)*& )*6K9)Z3 z?*)0 (*S*& )D3 8 +U*,Is & H 3 X 9),p'#%S', YL w w 8 +U 9)%s & :*8 313K2)*& )*6K9)1# $2),%; 3K, )& 6DS%8 +)%, )8R8 J& & )*'>)%, 3+3*+ 9)%,%p;9*30 & U0 5 w H J99& 3 8 J& & )'*>@9)*'#)*&.0 '*)#O3O2)*& )*6K9) X 3*+3+T3T8 +UCQ, J0 8 UC9),p H )n0 )%8 +T3O2)*& )*6, )%, ) H S*'YL M # $@''()99 J0 238?3, U8 :*/n#%)>*2ss*&,r3 (p, a, z, w, q) :,67)'*)%,7?*)0 (*),,R3 ( ) H )*0 $0 S%8,?38 +':0H Q# 36D)*0 (nq, 30@3& & 3 p,?*j/(t3+ (a, z/w), 9)67)'*)%, q ;*H )*0 )*0 J0 238 :*8 3T?3, :8 :& 3 a 3D2)& )6 9)'1#*; [%8 )& S0H.# z N, w N & )L

74 M V 1 = ({q 0, q 1, q 2 }, {a, b}, {z 0, z 1 }, E, q 0, z 0, {q 0 }) L M + E ( ) ( q0, (a, z 0 /z 0 z 1 ), q 1 ) ( ) ( q1, (a, z 1 /z 1 z 1 ), ) q 1 ( q1, (b, z 1 /ε), q 2 ) q2, (b, z 1 /ε), q 2 q2, (ε, z 0 /ε), q 0.?30 673*+D)*0 )*6D); 4 (a, z 0 /z 0 z 1 ) q 1 q 0 (ε, z 0 /ε) q 2 :,67)'*)%, -.//*2S'(4 (b, z 1 /ε) (a, z 1 /z 1 z 1 ) (b, z 1 /ε) δ : Q (Σ {ε}) W P(W Q), = ; 2)03 2)*& )*6D3Q, J@673, 31')*6D>)%, )& 6 ; '; 8 +%,%; #Q*8 3+ :,67)'*)%, -.//*2S'(1)%8 )%, S9)*' δ(q, a, z) = {(w 1, p 1 ),..., (w k, p k )}!" # $ %'&( δ(q, ε, z) = {(w 1, p 1 ),..., (w k, p k )} ) " *!+ " #, (- 23*/*( 2)*& )*6D3Q, J@673, 3 >), )*& 6D; '; 8 +%, ; #Q8?*3 q Q S8 z W δ(q, a, z) 15 a Σ {ε} 3## J&. δ(q, ε, z) 5 δ(q, a, z) = 5 a Σ L :,67)'*)%,, :90 :*+3, )%8 )%, S9)*' :,67)'*)%, /@& :- /

75 5 5 (a, z 0 /z 0 z 1 ) q 1 q 0 (ε, z 0 /ε) q 2 M +D:,%6D)*'), -.*//2S*'(4 (b, z 1 /ε) (a, z 1 /z 1 z 1 ) (b, z 1 /ε) δ(q 0, a, z 0 ) = {(z 0 z 1, q 1 )} δ(q 1, a, z 1 ) = {(z 1 z 1, q 1 )} δ(q 1, b, z 1 ) = {(ε, q 2 )} δ(q 2, b, z 1 ) = {(ε, q 2 )} δ(q 2, ε, z 0 ) = {(ε, q 0 )}. M +D:,%6D)*'),, :90 :+3,4 Σ {ε} a b ε W z 0 z 1 z 1 z 0 q 0 (z 0 z 1, q 1 ) q 1 (z 1 z 1, q 1 ) (ε, q 2 ) q 2 (ε, q 2 ) (ε, q 0 ) M +\3#%,%Q:0 ; 8G:0 0 3FJ, 379)*6D)*'),%;%8 +U 67S/Z)0*'*)6 J0 238 J,,V& S%8 +)\S%8G3\2)& )6, 3&, 30 6D3 )%/(.,,#S*F)+*; # 3 2)& )673Q, J6D3, 3B)/*( #%J' /@Q& :*[*; U%H :, 23/(; 8 6 ; '>)' q S8 Q5 u Σ 5 v W )%8 )%, S9)*' )%/(T# :[; U@L (q, u, v)

76 S8. u = a 1 a 2... a k v = x 1 x 2... x 0 SF?), X 3*+3+1# m 5 :[; U*,\2:0,%?3, Y4 3## J&\312)*& )*6D3Q, J@673, 3n#S, - S0 )#%SFF)' (q, a 1 a 2... a k, x 1 x 2... x m 1 x m ) = (p, a 2 a 3... a k, x 1, x 2... x m 1 w)5?3 ( q, (a1, x m /w), p ) E (q, a 1 a 2... a k, x 1 x 2... x m ) = (p, a 1 a 2... a k, x 1, x 2... x?3 ( m 1 w)5 q, (ε, xm /w), p ) E. = & )*0 :*[*; Un& ) ) *s 2,%& 3'*+*;, s 2T0 )%+:&, H 3 5 = X H )*0@; 8 Y M + 3Q, J@673, 3 6Kp#%$>S8 )4q)0 ; '*>@Q0 Q'# 3 #%)+>)%, ;D#%J' /@Q& :N (q 0, a 1 a 2... a n, z 0 ) [; U9U@0 6D3 H >67)/?3, :& J++Q#D3+D$8 8 +)%8D0 )?*)%, 8 S/)87# $2),#%)+An# :[; U*, 6D3 H > )%+)#& )D3O& :#%$*2)%,%#)%+A@#%)%, S8Rs /(, J2:99 367)>>; /n0 )?*)%,L M +%, 67J'> H Q#?*J/(o3 V 2)*& )*6D3Q, J@673, 3 2S%/:0 0 3FJ*,, 30 - )*0 ; 86D)*&C)/*( u 8 +U*,?*3O23' V N 9)*0 ;G#%J' /@Q& :*[*; U@#'*3#KJ0 (3'T8 J& J+3, 3 36D)*0 (& )K, )0H )8.0 '*)#O3 # $2),#%)+A# J& J+3,I)0 8 AT)*0 )*6D) (q 0, u, z 0 )5 3C8 J& J+3,6 ; '>)'C)0 )67S9A023' :,67)'*)%,T3C8 J& J+3, # $2),#%)+A )0 )67S9) #*; 2S%2)K?3K[8 3#D)/*(1)0 )6 9A@0: J& J+3,ZQ, J@0 8 UT)*0 )*6D) 3?J@0 (p, ε, w)5 p F S%8 w W L )0 ( (q 0, u, z 0 ) = (p, ε, w)5 w W N & 31S%8 p F N & )L 2S%/:0 0 3FJ*,, 30- )*0 ; 86D)*&,Z'()0 24 L(V) M +%, 67J'> H Q#?J/*(q3 V 2)& )673Q, J6D3, 3.& )%8B2)*& )*6K67)0 - )*0 ; 86D)*&T)%/( u 8 +U*,?*3O23' V N 9)*0 ;G#%J' /@Q& :*[*; U@#'*3#KJ0 (3'T8 J& J+3, 3 36D)*0 (& )K, )0H )8.0 '*)#O3 # $2),#%)+A# J& J+3,I)0 8 AT)*0 )*6D) (q 0, u, z 0 )5 3 8 J& J+3,Z6 ; '>)'K)*0 )*6DS*9A@0*23'K:,%6D)*'),R3K8 J& J+3,7# $2),#%)+A1)0 )67S9) J& J+3,ZQ, J@0 8 UT)*0 )*6D) S8, )%, 8 +A@0 )/)8R:0 0 3FJ*,L (p, ε, ε)5 p

77 (q 0, u, z 0 ) = (p, ε, ε) )0 ( p Q N & 3.& )%8I2)*& )*6K67)0*- )*0 ; 86D)*&,7'(*)*0 24 L ε (V) S*0 >3L 3I3 3Q, J6D3, :,6D)%/2; +8 /:0H Q# S%8 +& ) 2)?*)%, H.# V '(*)*0 2),7; 86D)*& ;- 1 )02S/:0 0 3FJ,, 30 L?*J/(R3+ {a n b n n 0} (a, z 0 /z 0 z 1 ) q 1 q 0 (ε, z 0 /ε) q 2 (b, z 1 /ε) (a, z 1 /z 1 z 1 ) (b, z 1 /ε) P S/)++.#D)*03O0 )%2)%+)%, S8,R3O#%$*2)%,%#)%+A #& 34 aaabbb S%8 abab L M + a 3 b 8 +U*,\- )*0 ; 86D)*& ;3+ 3Q, J@673, 3 6D; 2)* (q 0, aaabbb, z 0 ) = (q 1, aabbb, z 0 z 1 ) = (q 1, abbb, z 0 z 1 z 1 ) = (q 1, bbb, z 0 z 1 z 1 z 1 ) S8O6D; 2)*0 = (q 2, bb, z 0 z 1 z 1 ) = (q 2, b, z 0 z 1 ) = (q 2, ε, z 0 ) = (q 0, ε, 2S/:0 0 3FJ, 3n2)& )673Q, J6D3, 3T- )*0 ; 86D)*& ;G38 +U,L /(3'*3## J& 6 ; ε)5 2)0G3n2)*& )*6 q #*; 0.&.0,.& )8\2)& )6 6D)*0; 8I- )*0 ; 86D)*& ; L = ; 2)03K#)%+>A:0 0 3FJ,V)/*(9)'Z2S%/:0 0 3FJ*,I; 8 )*0 0 )'9)'O.& )%8I2)*& )*6K67)0')*61L 3+.& )%8\8 +U*,I; 8V- )*0 ; 86D)*& ;2S/:0 0 3FJ,, 30 J/*(19)*9; +J@'(*s, 8Q#?*J/( 3+ abab 8 +U,R'*)6q; 867)& ;*- )0 8 +.#8 S%/@.'#\23' 3+R$8 8 +)%8 0 )?*)%, A8 S%/K67)/*2; +8 /:0 :*8 :& 3L $@''(pd9)*0 :,';?J/*(7)99)'R3*+I)8 5 ),9)*'Z[%8 3#I)%/()%,%0 )*' 0 )?*)%, A8 S%/K23'4 (q 0, abab, z 0 ) = (q 1, bab, z 0 z 1 ) = (q 2, ab, z 0 ) = (q 0, ab, :,67)'*)%,, )*?:,7')*6 ; 867)& ;- )*03+ ε)5 abab 8 +U*,L >)K; ''*)'T'; '*[8

78 M S*0 >3L M V 2 = ({q 0, q 1 }, {0, 1}, {z 0, z 1, z 2 }, E, q 0, z 0, ) :,67)'*)%,, :90 :*+3, 34 2)& )673Q, J6D3, 3 z 0 z 1 z 2 z 0 z 1 z 2 z 0 q 0 (z 0 z 1, q 0 ) (z 1 z 1, q 0 ) (z 2 z 1, q 0 ) (z 0 z 2, q 0 ) (z 1 z 2, q 0 ) (z 2 z 2, q 0 ) (ε, q 1 ) (ε, q 1 ) (ε, q 1 ) ε q 1 (ε, q 1 ) (ε, q 1 ) (ε, q 1 ) (0, z 2 /z 2 z 1 ) (0, 1 /z 1 1 (0, z 0 /z 0 z 1 ) (0, z 1 /ε) q 0 q 1 (0, 1 /ε) (1, z 2 /ε) (ε, z 0 /ε) (1, 0 /z 0 2 (1, 1 /z 1 2 (1, z 2 /z 2 z 2 ) (1, z 2 /ε) (ε, z 0 /ε) V 2 2)& )673Q, J6D3, 3 3*+ { uu 1 u {0, 1} } '()0 2)%,Z; 867)& ;- )*0 L

79 = ; 2)0 '*)67>), )*& 6D; '; 8 +%, ; #Q8 #%)+>A@# :[; U9U@0)*0 S*&?*)%, AD$8 8 +)%8 V 2 (q 0, u, z 0 ) :[; U*,R)%/(T<'L 8 +:67s, :8%;- :93',%Q> H Q# :9& :+J@0 '; L S*0 >:Q03 (q 0, 1001, z 0 ) #)%+>A#%J' /@Q& :*[*; U@?J+R, 3&, J+U18 +:67s, :8%;- 34 (q 0, 1001, z 0 ) (q 0, 001, z 0 z 2 ) (q 1, 1001, ε) (q 0, 01, z 0 z 2 z 1 ) (q 0, 1, z 0 z 2 z 1 z 1 ) (q 1, 1, z 0 z 2 ) (q 0, ε, z 0 z 2 z 1 z 1 z 2 ) (q 1, ε, z 0 ) (q 1, ε, ε) (q 1, ε, ε) 3O- 3n)/*(; #0 )%2)*0 ) 2)*& )*6D3Q, J@673, 3.& )%8D2)& )6 6D)*0@- )0 ; 867)& ;3*+ 5 V 2 8 +U*,L M #%$*2L :9& :'C0 :,%?3, U 8 +:6Zs, :*8%; - 3 3''3# 9; +J'(*s, S*#3?*J/( 3 2)& )673QN V, J@673, 31')*6W; 867)& ;- ) U,L M 0 )%2)*0 )*#9)'10 S%2*AT#%J' /@Q& :*[*; U@#%3,R')*6 2 0 )*?), J@0 (, 3,'; S%8Z)%/(; #D8 )6 30 3#<L (q, ε, ε)

80 (q 0, 101, z 0 ) (q 0, 01, z 0 z 2 ) (q 1, 101, ε) (q 0, 1, z 0 z 2 z 1 ) (q 1, 01, z 0 ) (q 0, ε, z 0 z 2 z 1 z 2 ) S%, )0 L /( L '()0 213## J&GS8Z[%8 3#*; 8Z3##%J&; 86D)*&?*)%, AK- ) )0 ( ')*6D>)%N V, )& 6 ; '; 8 +%,%; #Q*8D2)& )673Q, J6D3, :230.& )%8 2)& )6 6D)*0?*3n- )*0 ; 86D)*&?*)%, A )0 ( '*)67>), )*& 6D; '; 8 +%, ; #Q8V2)& )673Q, J6D3, :230*2S/:0 0 3FJ,, 30 L V 2 3*Y )/*(*)*' V 1 = (Q, Σ, W, E, q 0, z 0, ) 2)& )673Q, J6D3, 3 36D)*0 (.& )8G2)& )6 6D)*0; 8 N 67)& ; - )*0%3*+ 5 L '(*)*0 2),L V)'; :0H Q#\3 V 2 = (Q {p 0, p}, Σ, W {x}, E, p 0, x, {p}) 2)*& )*6D3Q, J@673, :, 3?*J0 p, p 0 Q,, x W S%8 { (p0 ) } { (q, ) } E = E, (ε, x/xz 0 ), q 0 (ε, x/ε), p q Q. )*0 A8 +$&)%/( V 2 V 2 ε N 0 S*FS8 8 )*0:,%6D)%/( 3 #%)+>A:0 0 3FJ*, :93 9)%s & 23 V 372)*& )*6K9) 1 x 67)0 0 S N, #%)+>A8 +*; 6K9U0 Q6D:,L,, A@0#)%+>2)D</(16Kp#%$>; # 6D; ', z 0 5 V L )%/(B3>J,,18 +U& 1 3 #*;.& s, ;V3 8 3 H :, 2)& 6DS, 3## J& N '*S0V6DS%/ 6D; '*>; / V 1 V 1 V 673& 3*>O)%/( 2 x 3 2)*& )*6K9)*' 36D)*0 ()%, 5 V 2 ε N 0 S*FS8 8 )*0, $& $0S%8I2S%/:0 0 3FJ*,9*3T#%)&.0 L [%8 3#D3## J&V#%)&.0?),\2S/:0 0 3FJ,%93 V?*3 #*;.& s, )%,, )D3D2)& 6DS,L 2 5 V 1

81 Y )/*(*)*' V 2 = (Q, Σ, W, E, q 0, z 0, F ) )/*( 2)*& )*6D3Q, J@673, 3 36D)*0 ( 3+ 5 L '(*)*0 2),2S%/:0 0 3FJ*,, 30Z; 867)& ;I- )*0 L V)'; :0H Q# 3 V 1 = (Q {p 0, p}, Σ, W {x}, E, p 0, x, ) 2)& )673Q, J6D3, :, 3?J@0 5 p 0, p Q5 x W S%8 { (p0 ) } { (q, ) } E = E, (ε, x/xz 0 ), q 0 (ε, z/ε), p q F, p Q, z W { (p, ) } (ε, z/ε), p p Q, z W {x} )0 A8 +$& V 1 V 1 ε N 0 S*FS8 8 )*0G9)s & H 3n3T2)*& )*6K9) x 67)0 0 S N, 2)*& N z 0 5 V 67S'*)#D#)%+>A8 +*; 6 9U@0 Q67:, )%,, A0#)%+>2)D6 ; ', 6 p# $>; # 3*+3+R2S/:0 0 3FJ,%93VH 2 Q, V 6D; '*>)*'- )0 ; 867)&,K8 +U& 3L ''*)' N 0 SFS%8 8 )0V#*; 2.& s, ;V32)& 6D),L [%8 3#3##%J& V 1 ε V.& s,?*)%, ; #*;3D2)& 6D),?3 2S%/:0 0 3FJ*,9*3O#)*&.0 L 1 V 2 M #%$*2)%,%#)%+AD#%S%,@, S, )*0%3*+%,9; +J'(*s, H 3?J/*(R3Z')*6D>)%, )& 6 ; '; 8 +%,%; #Q*82)& )673Q, J6D3, :# :0, 30- )*0 ; 86D)*&,Z'()0 2)#1?*30 6D3+3KS*FF)*'K3O#%$& '()+), -.*//),0 )'1'(*)*0 2)*#1?30 673*+3L S%, )0 L G #%$& '()+), -.*//),0 )'K'()0 2, 3' 3##%J&0 S%, )+*; #D)%/( J0 (3', )& 6 ; '; 8 +%,%; #Q*82)*& )*6D3Q, J@673, 3 367)0 (1.& )%8V2)*& 5 )*6K67)0- )*0 ; 86D)*& ;3*+ 2), 3+3*+ L ε (V) = L(G) L V ')*6D>)%N L(G) '()0 N 8 3#V3Z9; +J'(*s, :8$*,0 )%, S%,3*>%H Q#R67)/@L )%/()' )%/(Z#%$& '()+), -.*//),0 )' G = (N, T, P, S) '(*)*0 2, 3'L &, )0 6D)%++.#D3 V = ({q}, T, N T, E, q, S, ) 2)*& )*6D3Q, J@673, :, 3?J@0 5 q N T, 3+ :,67)'*)%,%?30 673*+7S&, )*0 67)+S%8 ) F)>; /@4 E 3T0 S%, )+*; #K3. G '(*)*0 2, 3'18 +39:0 (3; # $+$*,, A α 8 +39:0 ( 3##%J&2)%/(.#O9) 5 E N 9)D3 ( q, (ε, A/α 1 ), q ) :,67)'*)%, )%, = ; '>)' a T H )0 & )Z2)%/(.#19) E N 9)D3 ( ) :,%6D)*'), ),L q, (a, a/ε), q 3R23' S α 8 +39*:0 ( G N 9)*' 3R2)& )673Q, J6D3, 3Z)%/( N 0 S*FS8 8 )*09)%s & H 373Z2)*& )*6K9) 5 ε 3+ α,%.# $& #%SFS,L 3n3 9)%J@0 23*8 J*,,19),pn)%/()+*; #O3O2)& )6, ), ) H S' 0 S%2*A*2)0 3##%J&, $& 0 ;3*+%, 3O2)*& )*6K9A0. L 3n3O2)*& )*6r, )%, ) H S*'n3+ A ')*6Z, )& 6 ; ':0 ; 819),p123' 3##%J& 9) 2; 8 +*;*3I2)*& )*6K9) )0 (; # N 230#%)+>A>AZ8 +39*:0 (H J99RJ0 >30 :'*3#I3I,%.# $& 5 #%SFS,L A 3K3K8 +Un9)%J@0 23*8 :8 3D2S/S'K3D2)& )6r#*;.&.0 3D2)& )673Q, J6D3, 37- )0 ; 867)&, )D3 8 +U*,L t

82 . 5 M #%$*2)%,%#)%+A 30 /J& ;,%6KQ8K)/*( #%$& '()+), -.*//),0 )''()0 2, 3'?J+ G = (N, T, P, S) 67)/#%J'*8,%& Q*:0H 3K3+%,Z3 V = ({q}, T, N T, E, q, S, ) 2)*& )*6D3Q, J@673, :, 36D)*0 (; #.& )%8I2)*& )*6K67)0*- )*0 ; 86D)*& ;3 :0, 30/)'*)& :0,7'(*)*0 2),L 5 G!" $# G% & '( 6 ; '>)' 8 +39*:0 (& 3 A α ) *' 2)/*(.#19) E N 9)D3 ( q, (ε, A/α 1 ), q ) :,67)'*)%, )%, + & '( 6 ; '>)', )& 6 ; ':0 ; 8& 3 a T, *' 2)/*(.#19) E N 9)D3 ( ) :,67)'*)%, )%, q, (a, a/ε), q - (.0/ 1( 2 V 3O3 G '()0 2, 3'18 +39*:0 (*3; '*3# 8 +:6D3 3K, )*& 6D; '*:0 ; 8 9),p#S1F)>; / 3##%J&3*+ 30 /J& ;,6 Q*870 S*FS8 8 +:6D3 n5 m5 Θ(n + m) L S*0 >3L )/*(*)*' G = ({S, A}, {a, b}, {S ε, S ab, S aab, A aab, A ab}, S) L ## J& 3Z# $2),#%)+A V = ({q}, {a, b}, {a, b, A, S}, E, q, S, ), :,67)'*)%,, :90 :*+3,, 30 L Σ {ε} a b ε W a b S A (ε, q) (ε, q) (ε, q) (baa, q) q (ba, q) (ba, q) (baa, q) S++.#O67)/?J/*(*3'T; 867)& ;- )0@3 V 2)& )673Q, J6D3, 313+ aabb 8 +U, '(*)*0 2, 3'93'K3T# $2),#%)+A#S*FF)*'10 )*?),70 ) 2)+),'; L 5 S = aab = aabb, 3?*J030 #%30 6D3+%,Q#D3+ S aab S%8 A ab t t 8 +39*:0 (J#3,L 36D)*0 ()%,Z3 G

83 M (q, aabb, S) (q, aabb, ε) (q, aabb, baa) (q, aabb, ba) (q, abb, ba) (q, abb, b) (q, abb, bbaa) (q, abb, bba) (q, bb, bba) (q, bb, bb) (q, bb, bbbaa) (q, bb, bbba) (q, b, b) (q, ε, ε) S%, )0 L V '*)67>), )*& 6D; '; 8 +%, ; #Q8\2)& )673Q, J6D3, 3 3## J&\0 S%, )+*; #K)%/(1J0 (3' 5 G #%$& '()+), -.*//),0 )'C'()0 2, 3'?J/*( 5 V.& )812)*& )*6K67)0- )0 ; 867)& ;V3*+ L(G) '(*)*0 2), 3+3*+ L ε (V) = L(G) L ; +J@'(*s, :*8?*)0 (*),,67)/3> H Q#?J/*(*3' #%)0 0V>) '; :0 ';V3 '(*)*0 2, 3',L G )%/()'B3 '*)67>), )*& 6D; '; 8 +%, ; #Q8V2)& )673Q, J6D3, 3 V = (Q, Σ, W, E, q 0, z 0, ) L ## J& 3?*J0 G = (N, T, P, S)5 N = {S} {S p,z,q p, q Q, z W } S%8 T = Σ L 8 +39:0 (3;,7F)>; /T3O#%$*2)%,%#)%+A@#%SFF)'K#3F H Q#167)/@L P = ; '>)' q :0 0 3FJ*,& 3D2)/*(.#19) P N 9)D3* :0 (,L S S q0,z 0,q 3 (. q, (a, z/zk... z 2 z 1 ), p ) 3?J@0 E 5 q Q5 z, z 1, z 2,... z k W X k 1 Y S%8 2)/*(.#19) a Σ {ε}5 P N 9)K6 ; '>)'O0 )?*)%, 8 S/)8 :0 0 3FJ*,& 3K3*+ p 1, p 2,..., p 8 +39*:0 (J#3,L k S q,z,pk as p,z1,p 1 S p1,z 2,p 2... S pk 1,z k,p 3 ( ) 3?J@0 k. q, (a, z/ε), p E5 p, q Q, z W, S%8 2)%/(.#T9) a Σ {ε}5 P N 9) :0 (,L S q,z,p a t

84 M M +Bs /*(!S*&, )0 6D)%+)%,,B'(*)*0 2, 3'!#*;, )& H )8 +%, )%,,B#%$& '()+), -.*//),0 )' '(*)*0 2, 3' 36D)*0 (N?*)+ 6D; ',,%Q> H Q# 6 ; '>; /1?*J++:& )*'>)0?), AD)%/(Z2)0 )Z)#%2; 230 )'8R# $& '(*)%+)%, -.//)%,%0 )*' '(*)*0 2, 3'L # $2),#%)+A!30 /J& ;,6 Q*8)%/( 2)& )673Q, J6D3, :?*J+ V = (Q, Σ, W, E, q 0, z 0, ) 67)/#%J'*8,%& Q*:0H 3 3+%,3 G = (N, T, P, S) # $& '(*)%+)%, -.//)%,%0 )*' '()0 2, 3', 36D)*0 ( 2)& )673Q, J6D3, 3B:0, 30R.& )812)& )6 6D)*0G- )*0 ; 86D)*&,# $& '(*)%+)%, -.//)%,%0 )*' 5 '()0 2)%, V /)'*)& :0H 3L! " # & ' ( 6D; '*>)*' q Q ) *' 2)%/(.#19) P N 9) *:0 (, S S q0,z 0,q + & ' ( 6D; '*>)*' ( q, (a, z/zk... z 2 z 1 ), p ) E V% q Q5 z, z 1, z 2,... z k W X k 1 Y 5 a Σ {ε}, *' & ' ( 6D; '*>)*' :0 0 3FJ*,& 3 p 1, p 2,..., p k - *' 2)%/(.#19) P N 9) 3+ S q,z,pk as p,z1,p 1 S p1,z 2,p 2... S pk 1,z k,p 8 +39:0 (J@#%3, k & ' ( 6D; '*>)*' ( ) q(a, z/ε), p E p, q Q, z W 5 a Σ {ε} *' 2)%/(.#19) P N 9) :0 (, S q,z,p a (./ 1( 2 G 3O3+13Q, J6D3, 3O:0 0 3FJ*, 3; '*3# 8 +:673 :,%6D)*'), ); '*)# 8 +:6D3TF)>; / 3##%J& 3D- )',%;30 /J& ;,6 Q*870 )/*- )*0H )*99 n5 m5 n + mn + m 0 SFS%8,7?3 H,\2S/& ), )?*:,R3O0 SFS%8 8 +:673 0 )/& J K)%8 )%,%9)' 5 O(nm) L P S%/@.09; +J@'(*s, :*8'S*0 #.06D)%/)*6K0 s, H.#?J/*(R3I>), )*& 6D; '; 8 +%, ; #Q8 2)*& )*6D3Q, J@673, :##%30 - )0 ; 867)&?), A7'(*)*0 2)*#VJ8 +%, :0 (3V230 U>;*& S8 +)3Z')*6D>)%, )& 6 ; '; 8 +%,%; #Q*82)& )673Q, J6D3, :##30 - )0 ; 867)&?), A '()0 2)#J8 +%, :0 (:'*3#L 99A0V3 8 +)6 FJ@',9U032)& )673Q, J6D3, :#3 2S%/)%8Z3Q, J@673, :#%, U@0)*0, S& An67U>J@'D2; 8 )0 #)>@'*)#L t /

85 M S*0 >3L V = ({q}, {a, b}, {a, b, A, S}, E, q, S, ) L Σ {ε} a b ε W a b S A (ε, q) (ε, q) (ε, q) (baa, q) q (ba, q) (ba, q) (baa, q) '(*)*0 2, 3'K3T# $2),#%)+A@4 G G = ({S, S a, S b, S S, S A, }, {a, b}, P, S), 3?*J0V6D; '*>)*' z {a, b, S, A} )%8 )%, S' 3+ H )*0 $0 S%8T& $2; >s, S%8 )L )0 s & H Q#T3 S z S 2)*& )*6D3Q, J@673, 3K:,67)'*)%, )*;,4 q,z,q ( q, (a, a/ε), q ) 5 ( q, (b, b/ε), q ), ( q, (ε, S/ε), q ) 5 ( q, (ε, S/ba), q ) 5 ( q, (ε, S/bAa), q ), ( q, (ε, A/ba), q ) 5 ( q, (ε, A/bAa), q ). +)*# 30 3F H :'K3T# $2),#%)+AK8 +39*:0 (J#3,R>) '; :0?3, H Q#4 S S S S a a S b b S S ε S a S b S a S A S b S A S a S A S b S a S b. S S )*0?*3*/*(?3, U S ε S a S b S a S A S b, S A S a S A S b S a S b, S a a5 S b b5 )%+)#D *:0 (J#KF)>; /n?)*0 ()%,, )%8 s,%?), A# 3O# $2),#%)+A##)*0 4 S ε ab aab, A aab ab L t

86 $& '()+), -.*//),0 )'1'(*)*0 2)*# P )%/*(.'#1)/*( G = (N, T, P, S) # $& '(*)%+)%, -.//)%,%0 )*'n'(*)*0 2, 3',L G )/*( 0 )%2)%+)%, S8%; - : H :'3# )/*(7J@0 (*3'R2S/)8 & )'*>)%+)%,, [s 6K#%S+),,- :,I'*)%2)%+.'# 36D)*0 ('*)#I/*($#)*& )I3*+ S #)%+>A8 +*; 6 9U@0 Q6 6D3023'[s 6K#%S+%2) 6 ; '>)' 9)*0 8 A [%8<[%8K[%s 6 #S H )O)/*(B')*6Z, )& N 6D; '*:0 ; 8Z8 +*; 6K9U0 Q6 S8 0 )%2)*0 );, )*& 6D; '*:0 5 ; 8R8 +*; 6 9U@0 Q6ZJ@##%3023''3#K[s 6K#%S+%2)L )*0 N H )%8.0\, J2:99*: 3*+ 3 - )*0, S%, )0?*J/(?3 )%/(q9)*0 8 A [%8<[%8 [%s 6 #S H ) 3+ ')*6Z, )& N A 6D; '*:0 ; 8 S8T3C[%8<[%8'3# k #%$+%2)%,%0 )*' 0 )%8 +:& 673*+J*,, H 323' 3## J& 5 P N 9)*' 23'B)/*( J0 (3' 8 +39*:0 (?J/*(O)+)*# 3T#%$+%2)%,%0 )*'T0 )8 +:& 6D3+J,, 3#K& )*'>& )D3*+ A a 1 a 2... a LLL 8 +*; 6K9U0 k Q67J##3023''*3#O[s 6K#%S+%2)L M 0 )%2)%+)%, S8%;@- 3 )& )>6DS*'() 3*+ a 1 5 a 2 5 a k T - )0 )%,,%;8 +U 367)0 (*),D</(T#3FQ'#?J/*(O3-3T0 ) 2)0 )*; ')*# [s 6K#%S H S,7930 & U@0H J99& 3?*30 3>*23 $8 8 +)%J@0 5 23*8 8Q#L M 0 ) 2)+), S%8%;- :,76DS%/ 8 +*; ', 3 ; 8 - :'*3# ; 8D') 2)++.#L )*#*; ', 8.# 3 G = ({S, A}, {a, b}, {S aa, S a, S ε, A aa, A # $& '(*)%+)%, -.//)%,%0 )*'B'()0 2, 3',L +n3c'()0 2, 3' 3*+ aab, A ab, A b}, S) L(G) = {a n b m n m 0} '(*)*0 2),V/)'*)& :0H 3L M + 8 +U10 )%2)%+)%, S8 ) a 4 b 2 L(G) 3O#%$*2)%,%#)%+A 4 S = aa = aaa = aaaab = aaaabb. +%,730 )%2)%+)%, S8,7:9& :+J@0?3, H Q#T0 )%2)%+)%, S8%;- : )0 (')*#1)*& )>@67S'(*) 3*+ 8 +U@L aaaabb a S a A A a A b a b t

87 = ; '>)'T0 )%2)%+)%, S8?*)+1?J++:& )'*>)*0?*)%, AT)%/(n0 )%2)%+)%, S8%;- 3L *J& >s, 23 )/*(0 )%2)%+)%, S8%; - :?J+Z, $99O0 )%2)%+)%, S8Z; 8D& )'*>)*0?*)%, A L S*0 >:Q0 3D- )*', ; 0 )%2)%+)%, S8 )*'O#s 2.03 S = aa = aaab = aaaab = aaaabb. 0 )%2)%+)%, S8Z; 8D?*J++:& )*'>)0?), A@L M + 0 ) 2)+), S%8, 0 )/930 J0 >30 ; 99T0 ) 2)+), S%8')*# '*)%2)%++.# α 0 = α 1 =... = α?*3t6d; '*>)*' n i = 1, 2,..., n 1 )8 ), S*'D23' J@0 (*3' u i T 5 β i (N T ) 8 +UOS8 (A i γ i ) P 8 +39*:0 (?J/*(, )*0H )%8.0 ')*# 3+ 5 $8 8 +)%-.*//S%8 )#L α i = u i A i β i α i+1 = u i γ i β i )*#*; ', 8.#D3T# $2),#%)+AT'()0 2, 3',4 G = ({S, A}, {a, b, c}, {S ba, S bas, S a, A cs, A a}, S) L M bcbaa 8 +U@'*3#K#%S%, )%/(67:*8, U@0@#.0 $'9$+An0 )%/@9*30 J@0 >30 ; 99O0 )%2)%+)%, S8 )R23'4 5 S = ba = bcs = bcbas = bcbas = bcbaa5 S = bas = bcss = bcbas = bcbas = bcbaa L /*( G # $& '(*)%+)%, -.//)%,%0 )*' '()0 2, 3' '*)6 )%/(S&, )*0 6 p?*3 N 9)*' 23'BJ@0 (*3' 5 L(G) 8 +U 367)0 (')*#Z)%/('*S0, $@99K0 )/930 J0 >30 ; 99 0 ) 2)+), S%8 )\23'L.0 $@'9)'73 '()0 2, 3' G )%/(S&, )*0 6 p L M 8 ; S 5, 0,,, - 2,, S,, +O)*0 A99; G '(*)*0 2, 3'')*6 )%/(S& )*0 6 p 6D)*&,D3 +U'3#K, 30 :0,Q'#n#%S%,K0 )%/N bcbaa 9*30 J@0 >30 99T0 )%2)%+)%, S8,L /*(n'()0 2)%,I, $99T'()0 2, 3'T; 8Z/)*')*& :0?*3, S%87)+)*#1#%$+$, )?*)%,%')*#)/*(*S*& )0 6Kp*)#nS8n')*6 )%/(S& )*0 6 p)*# ; 8L /*( #%$& '()+).*//),0 )'B'()0 30 3F2) A)*'')*6 )%/(S& )*0 6 p?*3')*6e0 )%+*; #O)%/()%,%0 )*'T)/*(*S*& )0 6Kp'(*)*0 2, 3'O8 )6 36D)*0 ( /)*')*& :0H 3L t

88 M M 5 S*0 >3L P ; +8 /:0H Q#K6D)%/O3T# $2),#%)+AT#S,7'()0 2, 3',L G 1 = ({S}, {a, +, }, {S S+S, S S S, S a}, S) ')*6 )%/(S&, )*0 6 p 67)&, 5 S = S + S = a + S = a + S S = a + a S = a + a S + S = a + a a + S S8 = a + a a + a S = S S = S +S S = a+s S = a+a S = a+a S +S = a + a a + S = a + a a + a. '(*)*0 2, 3' G 2 = ({S, A}, {a,, +}, {S A + S A, A A A a}, S) )%/(S&, )*0 6 pl )K0 )*?),79; +J@'(*s, 3';?*J/( L(G 1 ) = L(G 2 ) L t

89 ! " #$% &'( )*( +% %-,/ :99+ 6( +3/34:+:( ;+:.2 + < :99+ 6( +3=34+( ;+.2 B 6 +15:>.A, 2 +9$( '2 6C&$% &'( ) ( +% %-'D:E5FD,@ EG3( )*( +% %-,H ICB16 +( H 5JG( +9+@ L :99+ 6( +3 34:+:( ;D:+5%-+19,:KGD:,6 )L+194E( 4,3 n 6 +2 %-B1@ @/@ 5'%NM,%=+( 4PO@,.,:5,KE6 6 34:+:( ;6 JG(Q7 899RS:9:4:T=D:E94P,U34:+:( ; %-> 3:K+:3 5,WW nv 5,;'6X7 +:(Q( +:D+ 6-Y 2 3>,(,.W,3TB@F> 9,5,.Z, uvwxy. 0; J.[ M \R w 1 T M ]R vx 1 T M ^R vwx n T M _R uv i wx i y +:%-+ 3+:.T % > 3K+3 B:2 6 B.2 +H LV i 0 ` G = (N, T, P, S) +9:4*E( 4,3T'63:+1;+15B@ +:.+ 6F3:+%a6,2 6,( %=,:5)L : :99+ 6( +3Z34:+:( ;6,3TG,%-+:( 4 + 6A9+:3+:2 '(b,h V,c3:+%?6 +:2 %-> 3:'( LV b +( +.-@ 5'%-,T m = N l, W+( >@ 5,W'( 4EG.db EGWWFE( K,(,> 5'3,.F%-,e> % $%=,T,5,:5 PV l = max { α A N : (A α) P } H n = l B1@ m+1 z L(G) S:9:4:T D:E94 z > n H f.. E2d( B 6 +15:>.-+194FEG( 4:,3 F ( + ;+5+ 6 B1@1>7,TG,%-+:( 43: K%-B:34+ z H F '9,/M,F9:40.B:2 6 JG(,Z( + ;+( +.:> 9F; '3:,.=,c%=,e> %F$%-,:R[ h H gz> ;+( W+3 %-> 3:K+:3 J O@S:O@3:,.=( +9:7 +:(b +:WW FV l ( +1@ 5'2 %=,:5E:6 6 b,a;,3t+15b2 6 3:+. ( +9:7 +:(b +:WW FV l ( + ;+( h z l hh h

90 V S F A F A F u v w x y gz> ;+( z > l m+1t+15b2 6 l h z > l m+1tb1@c+:..1e2 f WWJG(.10:; :>.T h > m+1. DE9:4F,5 F ( + ;+5+ 6 B1@1>7 'W:,3X;,3-EG( 4:,3/S6C940G.1B2 6 J(( +1;B:( > 9 T,%=+( 4W+3 3B:( (m + 6 0GWW?O@S:O@ ;,3HQI+:.:> ( 4:+:3-$6,6HCgZ> ;+:( 1)V G 3:+%?6 +:2 %-> 3:'( 3:,.@ 5'%-, m B1@d+5+:3X,:5=S6 E3 % > 3K+3T( + ;B( 6 J(.8( 0G3W05J-O@S:O@C3+:%X6 +2 % > ;,3=O1Y 4, +:( 5+2 > 36=;,3*E( 4,3 3+:%X6 +2 % > 3'( 4>.( +9,( 'WW.B 5+:27 E2 KG$( +:( JZ+5+:3F,5/S6 E3H I+:.:> +:2 %-> 3:'( 6T,%-+:( 4>.,Z( + ;B( 6 J(, 940G.1B2 > 9*D,(,:K;,Z( +9+( J@ 502 6( JK>.C,:5?S6 E3?B@b +( 0G(b 8. ;,( H :+( 0G(b 8. ;+:(,:516d2 B@ 517 '6T:,%-+:( 43:+.d9:40.+:2 + AV F V A ( J7 E2 K$( ':@,H d,@ EG3( ).B:&&+:3T b +:( 0(b 8. ;+(,:516Z,P2 B1@ 517 '6TC,%=+( 43+:. F 9:40.+:2 +,:5 V A. 0; JM %=':@ EK>.RX+( J7 E2 K$( ':@,/,5ZS6 EG3HF`+9:4:+:3 +2 +K%-B:34+ F w H?.. E2 +2 +K%-B:34+ F vwx T-%XY 9 F +2 +K%-B:34+,(,.W,3LY 2 D,6 )!M ( H uvwxy 'W2,:RH g/+19g% $6,6 b $.T D:E94 7 +:( WE36 ':@,c.:> +( B9Y 6 >,*( +% %-'W,3c%=+9.10:;+16 +( 6-M \:R z M _RA7 +( 6 B 6 +:( +:.+ 6H gz> ;+:( PV w 1 H W+:3*3> 3:O@ +:3+:. 5,W:'( 4E./M.:> ;B1;+ +1@ +161( +19c,5 S 5,W:'( 46 RTG+5B:2 6 gz> ;+:(,Z( +1; B@1>7,Z%-> 3:K+:3FO@S:O@ 'W)G(B1@?Y 94 9:40.+:2 +19,( 'WWZ.1B16?B:( F 7 $6=.:> M 3O1@ +3:+.-'63:+1;+15B@ +:.=@ +:%-RT+5B:2 6 vx 1 H

91 gz> ;+(,5L, 3:+%?6 +:2 %-> 3:'( 4>.L, ;> 9'( 6 S6 E3P,U( + ;B( 6 J(C, 9:40.B:2 > 9 A D:,(,K:;,/( +9+( J@ JK>.T+5B:2 6 '9, ( (b +WW T,%-> WJ( F m :; :>.T D:E94 vwx l m+1 = n H, WJ(Q+( 6 ';:EG( Y 6 b $. O@S:O@,> 6TdO1@,.*,*940G ZD:,:9:4;, %-+19 Td,..1E2?,5cY 9:4 FV F.,&E:6 6C7,/+:2 +KG%=B34:+ uay TG,5,:5 S = uay H G,:@ E3( )G.1B&&+3Z.1,& b $. K+ 3:Y O:> )1b,Z%->,6 6T DE9:4 I+:D'6 S S = G uay F V A WJG(+( 6 ';:EG( Y 6 ;, = G w. F V 6TQDE9:4 = uay, A = vax A 33:+3 = w. G G G = G uvaxy B:2 6 B.2 +HQI+D:'6C6 + 5J( +19+1@ 2, i 0V uv i wx i y L(G) H &$% &'( )c( +:%F%=,Z.10:; %-B:34+:> =... = uv i Ax i y G G S A S = G vax TcB1@?;B19G8( F = uay = uwy B@ G G = uv i wx i y 6 + 5J( +19+1@ i 1 G = uv i wx i y + 5J( +19+1@ 2, i 0V \HA.10:;H H L 2 L 1. 0; %=B34F,516?'( ( Y 6 b,t D:E94Z( B 6 +15:>.=EG( 4:,3c : Jc34+( ;TG,%=+( 4c3:+% : ( +:3T6 +D:'6X,F6,2 6,( %=,:5'@?@ 5:> 9E2 SH f 33+:.ZW> 5EG34:Y 6 ':@ 'D:E5F+:( B19 TD:, 6,( '( $ EG( 4:,3P : JU34:+:( ;+ 6TC,%=+( 42 +*,5+:( JWW>A&$% &'( )U( +% %-, 3:+% 6 +(b +@8( H?` L = {a m b m c m m 1}. f5-,c34:+:( ;c : J T &( Hd,Z.10:;HA34+( ;6,3:E./%-> 3:K+194>.+=9+3:+2 '(b,[ G 1 = (N 1, T, P 1, S 1 ) TG,D:E( N 1 = {S 1, X, Y } T T = {a, b, c} T P 1 = {S 1 abc, S 1 axbc, Xb bx, Xc Y bcc, by Y b, ay aax, ay aa} H

92 , G 2 = (N 2, T, P 2, S 2 ) TG,D:E( N 2 = {S 2, A, B, C} T T = {a, b, c} T P 2 = {S 2 as 2 BC, S 2 abc, CB BC, ab ab, bb bb, bc bc, cc cc} H ` n,f&$%f&:'( )Z( +:%F%='W:,3=,5 D:+5A6,2 6 E5)-6 +2 %-B1@ @@ 5'%FTB@6 +:.:> LV z = a n b n 5):6H/gZ> ;+:( n z = 3n > n T z 7 +( Y 2 D,6 ),(,.W,3*S:9:4:T z = uvwxy DE9:4?6 +:(b +1@8( 3+:.?,-&$%F&:'( )F( +% %-'W,3?@ 5+:2 +:&( JFM \R M _RQ7 +( 6 B 6 +:( +:.HAg/+19G% $6,6 b $.T DE9:4/+5-+( ( +:361%=E3K':@DE5?;+5+ 6H f ( J@ 502d%=+9%F$6,6 b $.T D:E94/, v 5,;,.F% > 3K+9:4>.1+F( +9:7 +:(b +:WWF+1947 B( +/W+ 6 6 x 6,2 6,( %-,5H C,( )W,3TD, v B1@ ;,(,%=+( 4>.1+A+1943:B( 6 0WW7 B:( +?W+16 66,2 6,( %-,5T,..1E2 x,5 5)GW:,3=,FW+ 6.?@ E2 2 +3:K1b +=3:+%,:5 a, b, E2 2 +3:K T:6 +D:'6 uvvwxxy T,%->+( ( +:361%=E3K/,c&$% &'( )*( +% %-'W,3-@ 5+2 +&( J*M _RC7 +:( 6 B16 +( 3+:.H 5EG36 v B1@ x %-> 3:K+194>.+/( +9:7 +:(b +:WW/+9:47 B:( +/W+16 6A6,2 6,( %=,:5T,..1E2,5 5)W,3Z;,(,%-+:( 4>.W+ 6 Z6 0WW@ 502d7 E2 K$( +:( JGTC%-> 36, %-'@1>.* J T 6 +D:'6 uwy L(G). ( +:361%=E3K*,*&$% &'( ) ( +% %-'W,3F@ 5+2 +&( JM _R?7 +:( 6 B16 +( 3+:.TG6 +D:'6 L 3:+% : ( +:3H ]HA.10:;H :99+ 6( +3/34:+:( ;+:.-E@ 516 '( 4:,Z3:+% ` N = {S, A, B} T T = {a, b, c} B1@ G 1 = (N, T, P 1, S),DEG( P 1 : S AB T A aab ab T B cb c, 5' H G 2 = (N, T, P 2, S), S AB T A Aa a T B bbc bc H L(G 1 ) = {a n b n c m n 1, m 1}, L(G 2 ) = {a n b m c m n 1, m 1} 34:+:( ;+:./ :99+ 6( +3:+.H d+ L(G 1 ) L(G 2 ) = {a n b n c n n 1} 3+:% :99+ 6( +3H,D:E( P 2 :

93 V V V V V V < :99+ 6( +3/34:+:( ;6,3EG./3E2 %='(,(,. b,> I+ 5J( +19+1@X34+( ;6,3:E.-+@ + 6 B:W+3,/3:E2 %-'(,(,.1E:6XS94FB2 6 +:( 5,W' ( 4E.LW,(EG( K,( '3 O@,.L3:+%?6 +:2 %-> 3:'( E.Z@ 5+2 +&+:( 3:+.H < 02 34: ( +:3L34+( ; 6,3EG.d+@ + 6 B:W+3C,X3E2 %='(,(,.,C@ 5,W:'( 4E.Gb EGWWCEG( K,( '2,A,KE6 6W> 5EG34E@%-+19G. 06 B@ +:.+ 6 b +:( +:36H a. 0; J.W+3/, :99+ 6( +3*34:+:( ;6,3EG.3:,.c.1B16 3:E2 %-'(,(,. b '6 ;> 5@ 9'(b $./%=+9GTG, ddeg%x@.14 TG> ( ( + 6 ;+-, C2 +:> W,:OD 7 B:( + 3:E2 %-'(,(,.1E.,6H D:E%=@.14 7 B( +F3E2 %='(,(,. f9:4 G = (N, T, P, S) : ( +:3 34:+:( ;6,36 ddeg%x@.14 3:E2 %-'(,(,.S 3:+1;+1583.T=D:,U% > 5,W:'( 4:, V A a ;,94,(,.ST?,DEG( A BC A, B, C N T a T H #GB:( K,H G = ({S, A, B, C}, {a, b}, {S AB, S CB, C AS, A a, B b}, S) 34:+:( ;6,3 ddeg%x@.14 3:E2 %-'(,(,.S B@ V L(G) = {a n b n n 1}. gz> 3K+3 %=+36 +1@A :99+ 6( +3-34:+:( ;6,3D:E5=%-+19,:KGD:,6 ) +194X;+:( +?+:.1;> ;,( +:3:@ D:E%=@.14 εv 3E2 %='(,(,.S 34+( ;6,3H g/+9,k$3. +9:4,( 9E2 > 6% $:@ 6TN,%-+:( 4, %-+:36 +@L :99+ 6( ( ;6,36 '6,(,.Y 6 b,, G = (N, T, P, S) εv G = (N, T, P, S) D:E%=@.14 3E2 %='(,(,.S;'H V

94 _ \ V N N ]N.8@ 50GW0(b 5,W:'( 4E.W,3,:5 '63:+1;+15B@ +:.+ 6TB1@-( ,:5 P S bc@ 5,W:'( 4D,( %=,:5 M ( '@ K!" # $ %$,( 9E2 > 61%F$@ ^, % > 3K+3 E( 5,W:'( 4:'W,3T,%=+( 43+:.Cb EWW EG( K,(,Z( +9,( 'WWZ.B 6 5:> %FW)( $%FW)('( ( T % > 3K+3 6 +:2 %-> 3:'( +:( + 6-D:+( 4: @ Y a S b A 3+:%X6 +2 % > T,%=+( 4:+ 6C;+9:483.=7 +:( W+TB@C;+9:48.=7 +( 5,W:'( 4E.F.105B-,:5 S bc@ 5,W:'( 46 V A a %-> 5,W'( 46TG,D:E( B A 1 A 2... A k k 3 B1@ T D+:( @ Y 0; J..+:( [ A 1, A 2,..., A k N T B A 1 C 1 T C 1 A 2 C 2... T C k 3 A k 2 C k 2 T A k 1 A k C k 2,D:E( S bx3:+%?6 +:2 %-> 3:'( 5:> % W)G( $%XEG.T C 1, C 2,..., C,%-+:( d7 +:( ;+1@ 583. k 2 W+H & ' (") *' + G N V #GB:( K,H `+9:4:+:3 G = ({S, D}, {a, b, c}, {S asc, S D, D bd, D b}, S) H?< 0334cW+:( '63> T DE9:4 L(G) = {a n b m c n n 0, m 1} H ddeg%x@.14 7 B( +F3:E2 %-'(,(,.SZ34:+:( ;6,33'-;,( )c,(,.y 6 ':@=( B:&B@ +>,Z.10:; JG.[ V \HA( B:&B@[ N = {S, D} ]HA( B:&B@[ d5 '63:+1;+15B@=.:>.8:@ 50W0G( B@ + $6 5,W'( 4EG.-,c. 0; J.[ S D S asc bd b T D bd b H ^H ( B&B1@[ gz> ;+(,@ 5,W:'( 4E.W,3 D'2 EG% 6 +2 % > 3'( 5+2 +&+:( T?D:'2 E% S bz3+:%x6 +2 %-> 3:'( 6C; /W+FM ( +9:4:+:3+: ,W:'( 4E.[ A, B, C S ASC BD b T D BD b T,

95 V V V V V V A a T B b T C c H _GH ( B:&B@[LgZ> ;+( ( 5,W'( 4P.:> ;B16 +( B1;+:( TC,%=+( 43+:. b EWWEG( K,(, D'2 5 > %FW)( $%FW)('( ( T=%-> 3:K+:3P%-'@Z@ 5,W:'( 4Zb EWW EG( K,(,P( (b +WWU J 5S@ ':9ST ( +:3 S b 3+:%X6 +2 % > 3'( 6.1+( ( W+ ; T ( +9:4:+:3 +15 E H f5b2 6 N = {S, A, B, C, D, E} 5,W'( 4,> &+K> 9 [ P S AE BD b T D BD b T A a T B b T C c T E SC H C2 +:> W,:OD 7 B:( + 3:E2 %-'(,(,. f9: : ( +:3 34+( ;6,36 C2 +> W:,O:D G = (N, T, P, S) 3E2 %='(,(,.S3,. 3:+1;+1583.T!D, % > 5,W:'( 4:,,(,.ST A aw,d:e( A N T a T T w N H #GB:( K,H 34:+:( ;6,3 G = ({S, B}, {a, b}, {S ab, S asb, B b}, S) C2 +:> W,:OD 3:E2 %-'(,(,.S B1@ L(G) = {a n b n n 1} H gz> 3K+3 %=+36 +1@A :99+ 6( +3-34:+:( ;6,3D:E5=%-+19,:KGD:,6 ) +194X;+:( +?+:.1;> ;,( +:3:@ C2 +:> W,:OD εv 3:E2 %-'(,(,.Sc34:+:( ;6,3HFg/+19,:KG$3.F+194Z,( 9E2 > 61%F$@ 6T,%-+:( 4Z,dDEG%X@.14 3E2 %='(,(,.W:,3c( +1;:J :99+ 6( +3Z34+( ;6,36='6,(,.Y 6 b,z, G = (N, T, P, S) G = (N, T, P, S) C2 +:> W,:OD 3:E2 %-'(,(,.S;'H V f ( J@ Y 6 b 8.-,Z3+:%X6 +2 % > 3'( +:( E2 2 +:3K b B16XS:9:4:T DE9:4 A 1, A 2,..., A ( A,X.1+5KJ@ 5:> %FW)( $%/H d5d,( 9E2 > 61%F$@W,3C,X.10:; JQb n +:( 0( B1@ QD:,:@ 53:'(b $.[ A 1 x N +T α T N N +H

96 \ ] ^ _ % # N N P P ' i 2 ) n A i A j x, j < i ' j 1 ) i 1 +@ + 6 +H & %-> 3:K+:3 A i A j x B1@-%-> 5,W'( 42, A j α M,D:E( α 3+:%.+15KJK>. ;+( R A ;+1948.=7 +:( W+-,5 j 5,W:'( 46T P V A i αx (b 8. 5,W:'( 4E.,6 P V A i A j x ( B16 5,W'( 4 +@ + 6 +H A i A i x A i A i x ) ( + ;+9:48.=7 +( W+-,5/S b 3+:%X6 +2 % > 3'( 6T N V B % > 3K+3 i A i A i 5,W'( 42,-;+9:48.=7 +( W+, P 5,W:'( 4E.,6T V B i xb i B i x G(b 8. 5,W'( 46T P V A i A i x % > 3K+3 A i 5,W'( 42,ZM,DEG( α 3:+%.1+5KJK>. ;+:( R A ;+9:48.=7 +( 5,W:'( 46 i V P V A i αb i ' +@ + 6 +H i n 1 + ) 1 A i A j x, j > i ' j i + 1 ) n \ %-> 3:K+:3 A i A j x B1@-% > 5,W'( 42, A j α ;+9:48.X7 +:( 5,W'( 46?B1@ P V A i αx G(b 8. 5,W'( 4EG.1,6T \\ ' \:] ' \:^ %-> 3:K+:3 B i A j x B@-%-> 5,W:'( 42, A j α ;+1948.=7 +:( 5,W'( 46?B@ P V B i αx (b 8. 5,W:'( 4E.,6 \_ ' (") *' + P V A i A j x i 1 ) n B i A j x j 1 ) n G P V B i A j x +@ + 6 +H d5x,( 9E2 > 6% JZ( B&B1@W+3=,5,(,.SX@ 5,W:'( 4E.,6d'6,(,.Y 6 b, A i A j x, j < i S94TD:E94=,:5E. A i A j x, j i ;,94,(,.S,.=( +9:4:+:3+:.T,D:E(:+5=$6 )WW> A i α

97 V V V %='2 C2 +:> W,:OD 3:E2 %-'(,(,.SH U%=':@ EK>.?( B:&B@W+:3TS b3+:%x6 +2 % > 3'( ;+5+ 6 B1@ B1;+:( T.:>.8:@ 50W0G( >G,:5,(,.SF@ 5,W'( 4EG.1,6T%-, b K D:+( 4: @ Y 6 B1@ +..1+(+( B2 > TDE9:4 A i A i x,5 A i A j x, j > i B1@ B i A j x,(,.s/@ 5,W'( C2 +> W:,O:D 3E2 %='(,(,.S:,. ( +9:4:+:3+:.H V #GB:( K,H?(,.Y 0; JD:E%=@.14 3E2 %='(,(,.S;'[ 3E2 %='(,(,.S*@ 5,W'( 4EG.1,6 C2 +:> W,:OD A 1 A 2 A 3 A 2 A 4 A 2 A 2 A 3 a A 3 A 2 A 4 b A 4 c d5-,( 9E2 > 61%F$@-( B&B1@ +:> [ 5,W:'( 46F.+:( ( '6,(,.Y 6,3> H*f 2 2 +/O@,.Z,5 A 3 A 2 A 4 A 2 5,W'( 4,(.1,( %-,@H/f5B:2 6?7 +( 58.F,/@ 5,W:'( 4E.c. 5,W'( 46=B1@X6 02 0G(b 8. A 3 5,W'( 46H 4 A 3 A 2 A I+:D'6?,F@ 5,W'( 4 4EG.[ A 1 A 2 A 3 A 2 A 4 A 2 A 2 A 3 a A 3 aa 4 b A 4 c d5 B 2 A 3 B 2 B 2 A 3 A 2 ab 2 I+:D'6T, A 2 A 2 A 3.:>.8@ 50GW0( B1@ +-,Z. 0; J/@ 5,W'( 4EG..1,(: B3>.[ A 1 A 2 A 3 A 2 A 4 A 2 ab 2 a A 3 aa 4 b A 4 c B 2 A 3 B 2 A 3 ( B&B1@ +.F$6 5,W'( 4EG.[

98 V V V d5 W:,( EG( K,( 5,W'( 4EG.3:'(;B19583.FD:+( 4: @ Y 6 B1@ H d5 +:2 +KG%=B34[ A 1 A 1 aa 3 ab 2 A 3 aa 4 ab 2 A \\ G\:^[ d,@ EG3( ).B:&&+:3Cb '2 $3.-+(, 4 W:,( EG( K,( 5,W:'( 4E..,( [ B 2 B 2 aa 4 B 2 aa 3 A 4 B 2 aa 4 aa 3 A gz> $6 '3X.:> G( 68.d, 4 G\:^Hd( B:&B@ +:.W+3C,XD:+( 4: @ Y ,W'( 4EG.1,6T,X. 0; J.+ 6.,& b $.T,%-+:( 4+.F%-'2d%-> 3:K C2 +> W:,O:D,(,.S-@ 5,W:'( 4E.[ A 1 aa 3 ab 2 A 3 aa 4 ab 2 A 4 A 2 ab 2 a A 3 aa 4 b A 4 c B 2 aa 4 B 2 aa 3 A 4 B 2 aa 4 aa 3 A 4 #GB:( K,H B5583.*%= L%-'@1>.*&B( K'6HLg/+19,:KG$3.Z+194L34+( ;6,36,L. 0; J 34:+:( ;F9+3:+2 '( ':@ '2,H L = { a n b k c n+k n 0, k 0, n + k > 0 }. +:W> 5EG34:Y 61D,6 )GT DE9:4/,c. 0; Jc34+( ;6,3F9+3:+2 '(b, G = { {S, R}, {a, b, c}, {S asc, S ac, S R, R brc, R bc}, S }. f ( J@ 502.:>.8@ 50GW0(b 8.d,:5d'63:+1;+15B@ +:.+ 6QM > 6 6d%XE@ 6 O@$&'3A+194d;,3:RT:,:5$6 '3X%=+9,K$ d;+( +C+:.1;> ;,( +:3:@D:E%=@.14,(,.SX34:+:( ;6,36T%-, b KX+9:4?+155+( +.1;> ;,( +3@ C2 +:> W,:OD,(,.S6H d5 '63:+1;+15B@.:>.8@ 50GW0( B1@ +A$6 '3?,=. 0; J?@ 5,W'( 4EG. E6.,& b $.[ S R S asc ac brc bc R brc bc H + ;+5+ 6 b 5,W'( 4EG.1,6T-%-, b K!,L6 +2 % > 3'( EG.1,6 A a, B b, C c D:+( 4: @ Y 6 b 8./%-> 5,W:'( 4?b EWW EG( K,( '3F,c%=+9:7 +:( +:( J ;'( 6 E5);,( [ S ASC AC BRC BC, R BRC BC, A a, B b, C c. h LV +16H

99 V <QB16=S bd;'( 6 E5)*M D T R=W+1; B@ + $6 '3[ E S AD AC BE BC, D SC, E RC, R BE BC, A a, B b, C c. f5u%='2 D:E%=@.14 7 B( +P3:E2 %-'(,(,.H 3:KG$(b $3.U.:>?+:WWJ(A,!34:+:( ;6,3W)G( TF%-> $6 '3 '6 Y 2 b $.A,A;'( 6 E5).,6,(,.S2,TDE9:4. 0G334+WW+3A,(.,( 9E2 > 6% $:@ 6H A I+:D'6T,c. 0; J/'613+ i ;+5B1@=$6 '3 S D+:( T A 1 A D:+( 4:+ 6 6 T A 2 B D:+( 4:+ 6 6 T A 3 C D+:( T D+:( A 4 D A 5 T E D:+( 4:+ 6 6 T A 6 R D+:( T A '63:+1;+15B@=$6 '3c34:+:( ;6,3$3.,Z.10:; J/@ 7 5,W'( 4EG.1,6d6,2 6,( %=,:55,[ A 1 A 2 A 5 A 2 A 4 A 3 A 6 A 3 A 4, A 2 a, A 3 b, A 4 c, A 5 A 1 A 4, A 6 A 7 A 4, A 7 A 3 A 6 A 3 A 4. d5=,( 9E2 > 61%F$@A^ & HC( B:&B@ +> 3:+.X,(.,( %=,:5'@,. E2,/. 0; JZS b@ 5,W:'( 4E.b +( +33+:. %=+9G[ A 5 A 2 A 5 A 4 A 2 A 4 A 4 A 3 A 6 A 4 A 3 A 4 A 4 %-, b K A 5 aa 5 A 4 aa 4 A 4 ba 6 A 4 ba 4 A 4 A 7 A 3 A 6 A 3 A 4, %-, b K A 7 ba 6 ba 4. I+:D'6[ A 1 A 2 A 5 A 2 A 4 A 3 A 6 A 3 A 4, A 2 a, A 3 b, A 4 c, A 5 aa 5 A 4 aa 4 A 4 ba 6 A 4 ba 4 A 4 A 6 A 7 A 4, A 7 ba 6 ba 4. h h

100 H=( +:.+ 6X'6$9E2 b $.T 5Z3> 3:O@-W,( 2 +.$2 5Y ;/@ 5,W'( 4H \GH=( B&B1@ +.W+:3,Z% ( +( J*D:+( 4: @ Y 6 B1@ +.F$6 '3[ A 1 aa 5 aa 4 ba 6 ba 4, A 2 a T A 3 b, A 4 c, A 5 aa 5 A 4 aa 4 A 4 ba 6 A 4 ba 4 A 4 A 6 ba 6 A 4 ba 4 A 4, A 7 ba 6 ba 4. h

101 Sajátos nyelvtanok és nyelvek LL(k), LR(k), els bbségi (precedencia) nyelvtanok LL(k) nyelvtanok Ahhoz, hogy bebizonyítsuk, hogy egy szó benne van egy környezetfüggetlen nyelvben, meg kell adnunk az adott szónak egy levezetését (derivációját). Ez általában nem könnyü feladat, hisz egy-egy alkalommal több helyettesítés közül is választhatunk, és nem könny eldönteni, hogy melyiket válasszuk. Ha ez a választás mindig megtörténhet egyértelm en úgy, hogy az elemzend szóban a még meg nem vizsgált rész k (k 1) bet jét el re megnézzük, akkor azt mondjuk, hogy az illet nyelvtan LL(k) típusú, az elemzés pedig LL(k) elemzés. Az LL(0) eset nem érdekes, mert ez a nyelvtan csupán egyetlen szót generál. Az LL(k) rövidítés a következ szövegb l származik: Left to right scan, producing Leftmost derivation with k symbol lookahead. Miel tt még deniálnánk az LL(k) nyelvtant, vezessük be a következ jelölést egy adott G = (N, T, P, S) nyelvtanra és egy α (N T ) szóra. F IRST G k (α) = {x α = G xy, xy T, x = k} {x α = G x, x T, x < k}. azaz, F IRSTk G (α) az α-ból G-ben levezethet terminális szavak k hosszúságú kezd szeleteinek a halmazát jelenti. Ha a terminális szó rövidebb k-nál, akkor azonos a k hosszúságú kezd szeletével. Ha α T, akkor α = xy vagy α = x, tehát F IRSTk G k hosszúságú kezd szeletét tartalmazza csupán. (α) az α terminális szó 1

102 A G fels indexet esetleg elhagyhatjuk. Példa. G = ({S}, {a, b}, {S ab, S asb}, S) F IRST 1 (asb) = {a} F IRST 2 (asb) = {aa} F IRST 3 (asb) = {aaa, aab} F IRST 4 (asb) = {aabb, aaab, aaaa} F IRST 5 (asb) = {aabb, aaabb, aaaab, aaaaa} A G = (N, T, P, S) környezetfüggetlen nyelvtant LL(k) nyelvtannak (k 0) nevezzük, ha bármely S S = uaα = uβ 1 α = ux G G G = uaα = uβ 2 α = uy G G G legbaloldalibb levezetéspárra ( ahol α, β 1, β 2 (N T ), u, x, y T ) a F IRST k (x) = F IRST k (y) egyenl ségb l következik, hogy β 1 = β 2. 2

103 Példa. Vizsgáljuk meg a G = ({S}, {a, b}, {S ab, S asb}, S) nyelvtant! A következ levezetéspárból következik, hogy G nem LL(1) nyelvtan. S = asb S = asb = aa }{{} u = aa }{{} u }{{} S A }{{} S A }{{} bb α }{{} bb α = }{{} aa u = }{{} aa u }{{} ab β 1 }{{} asb β 2 }{{} bb α }{{} bb α = aa }{{} u = aa }{{} u }{{} abbb x aabbbb }{{} y És annak ellenére, hogy F IRST 1 (x) = F IRST 1 (y) = {a}, nem következik a β 1 = β 2 egyenl ség, mivel β 1 = ab, β 2 = asb. Tétel. Egy G = (N, T, P, S) környezetfüggetlen nyelvtan akkor és csakis akkor LL(k) típusú (k 1), ha bármely S = uaγ ( legbaloldalibb levezetésre ahol u T, γ (N T ) ) és A α, A β két különböz szabályra F IRST k (αγ) F IRST k (βγ) =. Példa. El bbi példánk, G = ({S}, {a, b}, {S ab, S asb}, S) esetében a következ levezetések lehetségesek: S = a n Sb n, n 1 és S = ab valamint léteznek az S asb és S ab szabályok. Ekkor F IRST 1 (asbb n ) = {a}, F IRST 1 (abb n ) = {a}; metszetük nem üres. Tehát G nem LL(1) típusú. F IRST 2 (asbb n ) = {aa}, F IRST 2 (abb n ) = {ab}; metszetük üres. Tehát a G nyelvtan LL(2) típusú. 3

104 Könny belátni, éppen a fenti tétel alapján, hogy ha egy nyelvtan LL(k), akkor egyben LL(k + 1) is. Például az el bbi nyelvtan esetében, amely LL(2) típusú: F IRST 3 (asbb n ) = {aaa, aab}, F IRST 3 (abb n ) = {aba}, metszetük üres. Tehát a G nyelvtan LL(3) típusú is. Következmény. Ha egy környezetfüggetlen nyelv LL(k) típusú, akkor LL(k + 1) típusú is. Fontos eset az LL(1). Ekkor annak vizsgálata, hogy egy nyelvtan LL(1) típusú nagyon egyszer, mivel nyelvtanaink ε-mentesek. (Nincs A ε szabály, kivéve ha S ε, de ekkor S szabály jobb oldalán nem szerepelhet.) Tétel. Egy környezetfüggetlen nyelvtan akkor és csakis akkor LL(1) típusú, ha minden A α, A β különböz szabálypárra F IRST 1 (α) F IRST 1 (β) =. Példa. 1) A G 1 = {S, A, B}, {a, b}, P, S), ahol P : S aab bba A a bs B b as LL(1) típusú nyelvtan, mivel: F IRST 1 (aab) = {a}, F IRST 1 (bba) = {b} F IRST 1 (a) = {a}, F IRST 1 (bs) = {b} F IRST 1 (b) = {b}, F IRST 1 (as) = {a} és a megfelel metszetek üresek. 4

105 2) a G 2 = ({S, A}, {0, 1}, {S 0A 0, A 0A 0A1 01 1}, S) nyelvtan nem LL(1), mivel például az A 0A, A 0A1 szabályokra: F IRST 1 (0A) = {0}, F IRST 1 (0A1) = {0}, tehát metszetük nem üres. A következ tétel fontos az elemzés szempontjából, és az értelmezésb l következik. Tétel. Minden LL(k) nyelvtan egyértelm. Egy A változót (nemterminális jelet) balrekurzívnak nevezünk, ha létezik A = Aα ( α (N T ) ) levezetés. Ha egy környezetfüggetlen nyelvtanban van olyan változó, amely nem szerepel egyetlen terminális szó levezetésében sem, akkor az a nyelvtan redundáns. Tétel. Ha egy G nem redundáns környezetfüggetlen nyelvtanban van balrekurzív változó, akkor G semmilyen k-ra sem LL(k). Példa. Legyen adva a következ nyelvtan: G = ({S}, {a, b}, {S Sa, S b}, S). Ekkor S = Sa n. Meg kell vizsgálnunk a következ halmazokat: F IRST k (Saa n ) = {ba k 1 } és F IRST k (ba n ) = {ba k 1 }. Látszik, hogy egybeesnek tetsz leges k 1 értékre, tehát a metszetük nem lehet üres. A nyelvtan nem LL(0) sem, így G nem LL(k) egyetlen k-ra sem. 5

106 A F IRST k (α) halmazok meghatározása El ször meghatározzuk a F IRST k (A) halmazokat, ahol A változó. Ehhez generáljuk az összes A u k. = uα alakú levezetéseket, ahol u T és Ha a T, akkor F IRST k (a) = {a}. Tetsz leges α = X 1 X 2... X n és X i N T (i = 1, 2,..., n) esetében: F IRST k (X 1 X 2... X n ) = ) F IRST k (F IRST k (X 1 )F IRST k (X 2 )... F IRST k (X n ), ahol a jobb oldali zárójelben szóhalmazok szorzata (konkatenációja) szerepel. A F IRST 1 (X), X N meghatározására létezik egy jól algoritmizálható módszer, amely relációk tranzitív lezártjának a kiszámításán alapszik. Értelmezzük a G = (N, T, P, S) nyelvtan esetében a következ bináris relációt: ρ N (N T ), XρY, ha létezik az X Y α szabály. Ennek a relációnak a mátrixára alkalmazzuk a Warshall-algoritmust a tranzitív lezárt kiszámítására. A mátrix A = (a ij ) i=1,m,j=1,n, ahol { 1 ha X a ij = i ρy j (X i N, Y j N T ) 0 különben A Warshall-algoritmus esetünkben a következ képpen írható le. Az algoritmus bemenete a reláció A mátrixa, ahol j = 1, 2,..., m-re Y j = X j ( N = ) m, N T = n, eredménye pedig a tranzitív lezárt R mátrixa. 6

107 Warshall(A) 1. R := A 2. for k = 1 to m 3. do for i = 1 to m 4. do for j = 1 to n 5. do if r ik = 1 és r kj = 1 6. then r ij := 1 7. return R Ekkor F IRST 1 (X i ) = {Y j r ij = 1, j = m + 1,..., n}, i = 1, 2,... m Példa. Legyen G = ({E, T, F }, {a, +,, (, )}, P, E), ahol a szabályok a következ k: E E + T T T T F F F (E) a Ekkor az A mátrix a következ : E T F + ( ) a E T F Az eredménymátrix pedig, amelyet a Warshall-algoritmussal kapunk meg: E T F + ( ) a E T F

108 Innen pedig azt kapjuk, hogy: F IRST 1 (E) = { (, a }, F IRST 1 (T ) = { (, a } F IRST 1 (F ) = { (, a } Ez a nyelvtan nem LL(1) típusú, hisz például az E E + T és E T szabályokra F IRST 1 (E + T ) = F IRST 1 (T ) = { (, a }. Bizonyítás nélkül közöljük a következ eredményeket: 1) Tetsz leges k-ra létezik olyan algoritmus, amely eldönti egy nyelvtanról, hogy LL(k) típusú-e. 2) Tetsz leges pozitív k-ra létezik olyan LL(k + 1) nyelvtan, amelyik nem ekvivalens egyetlen LL(k) nyelvtannal sem. 8

109 LR(k) nyelvtanok Hasonlóan az LL(k) nyelvtanokhoz, értelmezhetjük az LR(k) nyelvtanokat, de itt legbaloldalibb levezetések helyett legjobboldalibbakat használunk. Ezért van nevében az L (leftmost) helyett R (rightmost). A legjobboldalibb levezetéseknél mindig a szóban lév utolsó (legjobboldalibb) változót helyettesítjük. Az LR(k) nyelvtanok esetében a szavak felismerését fordított levezetéssel (redukálással) valósítjuk meg. Azaz a szóban megkeressük egy szabály jobb oldalát, majd helyettesítjük a bal oldali változóval, azaz redukáljuk a bal oldali változóra. Ezt mindadig végezzük, amíg el nem érünk a nyelvtan kezd szimbólumához. Vegyük például a G = ( {A, B}, {a, +, }, {A A + B B, B B B a}, A ) nyelvtant. Vizsgáljuk meg, hogy az a+a a szó eleme-e L(G)-nek. A következ redukálásokat végezzük: a + a a B + a a, mivel létezik B a szabály, A + a a, mivel létezik A B szabály, A + B a, mivel létezik B a szabály, A + B B, mivel létezik B a szabály, A + B, mivel létezik B B B szabály, A, mivel létezik A A + B szabály. Mivel megkaptuk a nyelvtan kezd szimbólumát, a szó benne van a G által generált nyelvben. Természetesen, nem mindig könny eldönteni, hogy hol melyik jobb oldalt helyettesítsük, ha több lehet ség is van. Ha például, a negyedik sorban A + B-t helyettesítjük A-val, nem jutunk helyes eredményre. 9

110 Az LR(k) nyelvtanok pont ebben segítenek, mégpedig úgy, hogy k bet el re megnézésével el lehet dönteni, hogy melyik szabályt kell alkalmaznunk. A fenti G nyelvtan LR(1) típusú. Például a negyedik sorban, ha a B bet után megnézzük a következ t (itt ), eldönthetjük, hogy tovább kell lépnünk, ha + jel lett volna, akkor lehetett volna alkalmazni redukálásra az A A + B szabályt. A fenti redukálássorozat ( fordított levezetés) megfelel egy legjobboldali levezetésnek. A = A + B = A + B B = A + B a = A + a a = = B + a a = a + a a. Csak olyan nyelvtanokkal foglalkozunk, amelyekben egyetlen szabály kezd dik a kezd szimbólummal, és ez nem szerepel egyetlen szabály jobb oldalán se. Egy G = (N, T, P, S) környezetfüggetlen nyelvtant LR(k) nyelvtannak (k 0) nevezünk, ha tetsz leges S S = αax = αβx = γby = γδy = αβz legjobboldalibb levezetéspárra abból, hogy F IRST k (x) = F IRST k (z) következik, hogy α = γ, β = δ, A = B (és következésképpen y = z) ( ahol α, β, γ (N T ), x, y, z T, A, B N ). 10

111 Példák. 1) A G 1 = ( {S, A}, {a}, {S A, A aab aa a}, S ) nyelvtan nem LR(k) egyetlen k-ra sem, mert S = A S = A = a k }{{} α = a k+1 }{{} γ }{{} A A }{{} A B b k }{{} x b k+1 }{{} y = a k+2 b k = a k }{{} α = a k+2 b k+1 = a}{{} k+1 γ }{{} aa β b k }{{} a δ }{{} x b k+1 }{{} y = a k }{{} α }{{} aa β b k+1 }{{} z és F IRST k (x) = F IRST k (z), de ennek ellenére α = a k a k+1 = γ, tehát G 1 semmilyen k-ra sem lehet LR(k). 2) G 2 = ( {S, E, T }, {a, +, }, {S E, E E +T T, T T T a}, S ) Ez a nyelvtan nem LR(0), mert S S = ε }{{} α = ε }{{} γ }{{} S A }{{} E B }{{} ε x }{{} ε y = ε }{{} α = ε }{{} γ }{{} E β E }{{ + T } δ }{{} ε x }{{} ε y = ε }{{} α }{{} E β és F IRST 0 (x) = F IRST 0 (z) =, ennek ellenére y z. }{{} +T z A G 2 nyelvtan ellenben LR(1). Egy bet el reolvasásával mindig el lehet dönteni, hogy melyik szabályt kell alkalmazni. Egy nyelv LR(k) ( vagy LL(k) ) típusú, ha létezik olyan LR(k) ( vagy LL(k) ) nyelvtan, amelyik generálja. 11

112 Bizonyítás nélkül közöljük a következ eredményeket. 1) Létezik olyan algoritmus, amely tetsz leges k-ra egy nyelvtanról eldönti, hogy LR(k) típusú-e. 2) Minden LR(k) nyelvtanhoz megadható egy vele ekvivalens LR(1) nyelvtan. 3) Minden LL(k) nyelvtan egyben LR(k) is, de fordítva ez nem igaz. Például egy LL(0) nyelvtan csupán egyetlen szót generál, míg egy LR(0) akár végtelen nyelvet is generálhat. 4) Az LR(1) nyelvek osztálya megegyezik a determinisztikus veremautomaták által felismert nyelvek (ún. determinisztikus környezetfüggetlen nyelvek) osztályával. 5) Az LR(0) nyelvek osztálya megegyezik a kezd szeletmentes determinisztikus környezetfüggetlen nyelvek osztályával. Egy L nyelv akkor kezd szeletmentes, ha bármely u L szóra igaz az, hogy u egyetlen valódi kezd szelete (prexe) sem eleme L-nek. 12

113 Els bbségi (precedencia) nyelvtanok Az ábécé bet i között relációkat határozunk meg, és ezek segítségével lehet eldönteni, hogy milyen redukálásokat kell a vizsgálandó szóban végezni egy alulról felfelé történ elemzésben. Az egyszer ség kedvéért bevezetünk még egy új határoló jelet, a $-t, amely közrefogja a vizsgálandó szót. A következ relációkat használjuk (kisebb), (nagyobb) és. = (egyenl ). Ezek nem feltétlenül tranzitív, illetve ekvivalencia relációk, és két jel között többféle reláció is létezhet. A relációkat a következ képpen értelmezzük. $ X ha létezik S = + Xβ alakú levezetés, X Y ha létezik A αxbβ alakú szabály, és B = + Y γ, X a ha létezik A αby β alakú szabály, és B = + γx, Y = aδ X =. Y ha létezik A αxy β alakú szabály, X $ ha létezik S = + αx alakú levezetés, ahol X, Y N T, a T, A, B N, α, β, γ, δ (N T ).. A, = és relációk meghatározására vezessük be a következ relációkat, ahol A N, X N T, α, β (N T ) : A ϱ l X ha létezik A Xβ szabály, A ϱ r X ha létezik A αx szabály. Ezen relációkat az L = (l ij ) és R = (r ij ) mátrixok segítségével ábrázoljuk. 13

114 Használjuk a következ jelöléseket: N = {X 1, X 2,..., X m }, N T = {Y 1, Y 2,... Y n } { 1, ha X i ϱ l Y j, l ij = 0, különben. { 1, ha X i ϱ r Y j, r ij = 0, különben. (ahol Y i = X i, ha i = 1, 2,..., m). i = 1, 2,..., m, j = 1, 2,..., n i = 1, 2,..., m, j = 1, 2,..., n A továbbiakban a számításokat következ példán mutatjuk be. Legyen G = ({S, A, B}, {+,, a}, P, S), ahol a P szabályai: S A A A + B B B C B C C a L mátrix: S A B C + a S A B C R mátrix: S A B C + a S A B C

115 . A, = és relációk meghatározásában szükségünk lesz ezen relációk tranzitív lezártjára. A tranzitív lezárt könnyen megkapható a már ismertetett Warshallalgortimussal. A szokásos jelölés a tranzitív lezárt mátrixára: L + és R +. L + mátrix: R + mátrix: S A B C + a S A B C S A B C + a S A B C Ezen mátrixok segítségével, a relációk értelmezése alapján elkészíthetjük az els bbségi (precedencia) táblázatot. EL ször beírjuk az összes. = relációt, megvizsgálva minden szabály jobb oldalát. Az egymást követ bet k között lesz. = reláció. Majd a $ X meghatározására megnézzük az L + mátrixban az S-nek megfelel sort. Az A, B, C és a oszlopában van egy-egy 1-es. Ezért az els bbségi mátrix $-nak megfelel sorába beírunk egy-egy jelet az A, B, C és a oszlopokba. Hasonlóképen járunk el az X meghatározásban, csak itt az R + mátrix segítségével dolgozunk. Az X Y típusú relációknál megkeressük a szabályok jobb oldalán a szomszédos bet ket, például +B. Megnézzük az L + mátrix B-nek megfelel sorát, itt a C és a oszlopokban van egy-egy 1-es, ezért az els bbségi táblázat + jelnek megfelel sorába beírunk egy-egy jelet a C és a oszlopokba. 15

116 Az eredmény a következ táblázatban látható: S A B C + a $ S. A = B C =.. + =. = a $ Szerencsénkre a fenti táblázatban minden bet pár között legfönnebb egy reláció van. Az üres mez jelzi mindhárom reláció hiányát. Az ilyen nyelvtanok alkalmasak arra, hogy hatékonyan felismerhessük a szvaikat egy alulról felfelé történ elemzésssel. Egy környezetfüggetlen nyelvtant egyszer els bbségi (precedencia) nyelvtannak hívunk, ha ε-mentes és nincs olyan változója, amelyre A = + A,. a N T {$} halmaz bármely két eleme között a, = és relációk közül legfeljebb egy áll fenn, a helyettesítési szabályok jobb oldalai különböznek egymástól. Egy egyszer els bbségi nyelvtan segítségével könnyen lehet elemezni, hogy egy szó eleme a nyelvtan által generált nyelvnek vagy sem. Megvizsgáljuk a szó szomszédos bet i közötti relációkat, minden esetben (ha a szó felismerhet a nyelvtan által) van olyan része, amely jellel kezd dik, utána esetleg. = jelek következnek, majd a végén van (ea a nyél). A nyél mindig egy szabály jobb oldala, és ez redukálható a szabály bal oldalára. Ezt folytatva, ha a szó eleme a nyelvnek, el lehet jutni a kezd szimbólumhoz. 16

117 Nézzük ezt meg a következ példán! Az a + a a szót vizsgáljuk. $ a + a a $ redukálás C a $ C + a a $ redukálás B C $ B + a a $ redukálás A B $ A + a a $ redukálás. C a = $ A + C a $ redukálás.. C a = = $ A + C C $ redukálás.. B C = = $ A + C B $ redukálás... B C B = = = $ A + B $ redukálás.. A A + B = = $ A $ redukálás S A $ S $ 17

118 Fordítóprogram (compiler), értelmezőprogram (interpreter) magasszintű programozási nyelvek fordításával foglalkozunk, imperatív programozási nyelvek fordítási algoritmusait tanulmányozzuk Ha a forrásnyelv magasszintű nyelv, akkor a forrásnyelv és a számítógép által végrehajtható gépi kód nagyon különböznek egymástól. Ezt a különbséget kétféleképpen lehet áthidalni: fordítóprogrammal vagy értelmezőprogrammal. 1. módszer: magasszintű nyelven írt programból egy alacsonyabb szintű (assembly nyelvű vagy gépi kódú) programot készítünk Az ilyen átalakítást végző program: fordítóprogram (compiler). bemenete: forrásnyelvű program vagy röviden forrásprogram eredménye: tárgynyelvű program vagy vagy röviden tárgyprogram fordítási idő, futtatási idő vagy futási idő egymástól jól elkülöníthető időintervallumok 2. módszer: készítünk egy olyan gépet, amelyik a magasszintű nyelvet értelmezi, azaz amelyiknek a gépi kódja ez a magasszintű nyelv. Ha ezt a gépet hardver úton valósítjuk meg, akkor ezt a gépet formulavezérlésű számítógépnek, ha programmal valósítjuk meg, akkor ezt a programot interpreternek (értelmezőprogramnak) nevezzük. Itt a fordítási és a futási idő egybeesik, és az interpreter nem készít tárgyprogramot. A fordítás szempontjából a compilereket és az interpretereket nem kell megkülönböztetnünk. 1

119 A fordítóprogram szerkezete A fordítóprogram a forrásnyelvű programot egy tárgyprogramra fordítja le. A fordítás folyamatáról, a fordítás eredményéről egy listát is készít, amely a programozó számára visszaigazolja a forrásnyelvű szöveget, tartalmazza a felfedezett hibákat, és információt ad a tárgyprogramról is, például közli az egyes utasításoknak a program elejéhez viszonyított relatív kezdőcímét. A fordítóprogram struktúrája a következő: jelölés: program(bemenet)(kimenet) fordítóprogram(forrásnyelvű program)(tárgyprogram, lista), Ezt a jelölésmódot alkalmazva, a továbbiakban a fordítóprogram struktúráját finomítjuk. A forrásnyelvű program egy adathordozón, általában egy állományban, az operációs rendszertől függő formátumban helyezkedik el. A fordítóprogram első lépése ezért egy olyan program végrehajtása lesz, amelyik ezt a forrásnyelvű programot a fordítás számára könnyen hozzáférhető karaktersorozattá alakítja át. Ezt a műveletet végzi el az bemenet-kezelő (input-handler): bemenet-kezelő(forrásnyelvű program)(karaktersorozat) Az input-handler a forrásnyelvű program egy vagy több rekordját egy pufferben helyezi el, meghívásakor innen olvassa a forrásnyelvű program soron következő sorát, levágva például már a további feldolgozás szempontjából közömbös kocsivissza és soremelés karaktereket is. Ezekből a forrásnyelvű sorokból készül a lista. A lista összeállítását a kimenetkezelő (output-handler) végzi, amely a listát szintén a háttértárolón, egy állományban, az operációs rendszertől függő formátumban helyezi el: kimenet-kezelő(forrásnyelvű program, hibák)(lista). 2

120 A fordítóprogramok szinte mindig hibás programokat fordítanak, ezért a fordítóprogramok íróinak rendkívül nagy figyelmet kell fordítaniuk a lista formájára, a hibajelzés módjára. Az output-handlerhez hasonlóan, a compiler által készített tárgykódot is háttértárolón, egy fájlban, például relokálható bináris formátumban kell elhelyezni, a formátum természetesen ismét az operációs rendszertől függ. Ezt a műveletet a kód-kezelő code-handler végzi el: kód-kezelő(tárgykód)(tárgyprogram). Mivel mind az input-handler, mind az output-handler bemenete a forrásnyelvű program, célszerű ezeket egy programba összefogni. Nevezzük ezt a programot forrás-kezelőnek (source-handlernek): forrás-kezelő(forrásnyelvű program, hibák)(karaktersorozat, lista). Így tehát a fordítóprogram struktúrája a következő lesz: forrás-kezelő(forrásnyelvű program, hibák)(karaktersorozat, lista), compiler(karaktersorozat)(tárgykód, hibák), kód-kezelő(tárgykód)(tárgyprogram). forrásnyelvű program lista compiler forráskezelő = = kódkezelő = tárgynyelvű program 1. ábra. A fordítóprogram felépítése Ez a felbontás nem szekvenciát jelöl, a három programelem nem szekvenciálisan 3

121 hajtódik végre. A fenti felbontással a fordítóprogramot három egymástól jól elkülöníthető funkcionális, működési egységre bontottuk fel. Az egyes működési egységek kapcsolatát az egységek bemenete és kimenete jelzi. A source-handler és a code-handler végzi el az összes perifériafüggő és az összes operációs rendszertől függő műveletet, a compiler most már ténylegesen csak a fordítással foglalkozik. A két handlerrel, elsősorban a számítógéptől, a perifériáktól és az operációs rendszerektől való függőségük miatt, a továbbiakban nem foglalkozunk, bár a fordítóprogramok külső jellemzőit, kezelhetőségét, a felhasználóval való kapcsolatát alapvetően ezek határozzák meg. A középső programelemnek, a compiler-nek két nagy feladatot kell megoldania: elemeznie kell a bemenetén kapott karaktersorozatot, és szintetizálnia kell a tárgykódot. Az analízis a forrásnyelvű program karaktersorozatát részekre bontja és ezt vizsgálja, míg a szintézis az egyes részeknek megfelelő tárgykódokból építi fel a program teljes tárgykódját. Az analízis első feladata az, hogy a karaktersorozatban meghatározza az egyes szimbolikus egységeket, a konstansokat, változókat, kulcsszavakat, operátorokat. Azt a programelemet, amelyik ezt a feladatot végzi, lexikális elemzőnek nevezzük. A lexikális elemző a karaktersorozatból szimbólumsorozatot készít: lexikális elemző(karaktersorozat)(szimbólumsorozat, lexikális hibák). A létrehozott szimbólumsorozat ábrázolása hatékonysági okokból általában kódolt, egy szimbólumot egy típuskód és egy cím határoz meg, a típuskód a szimbólum típusára utal, a cím pedig a szimbólumtáblának az a címe, ahol az elemző a szimbólumhoz tartozó szöveget elhelyezte. A lexikális elemzőnek kell kiszűrnie a szóköz karaktereket, a forrásnyelvű programba írt megjegyzéseket. A magasszintű programnyelvek egy utasítása több 4

122 sorba is írható, a lexikális elemző feladata egy több sorba írt utasítás összeállítása is. A lexikális elemző által készített szimbólumsorozat a bemenete a szintaktikai elemzőnek. A szintaktikai elemzőnek a feladata a program struktúrájának a felismerése és ellenőrzése. A szintaktikus elemző azt vizsgálja, hogy a szimbólumsorozatban az egyes szimbólumok a megfelelő helyen vannak-e, a szimbólumok sorrendje megfelel-e a programnyelv szabályainak, nem hiányzik-e esetleg valahonnan egy szimbólum. szintaktikai elemző(szimbólumsorozat)(szintaktikusan elemzett program, szintaktikai hibák). Az analízis harmadik programja a szemantikai elemző, amelynek a feladata bizonyos szemantikai jellegű tulajdonságok vizsgálata. A szemantikai elemző feladata például az azonosító + konstans kifejezés elemzésekor az, hogy az összeadás műveletének felismerése után megvizsgálja, hogy az azonosító -val megadott szimbólum deklarálva van-e, a konstans -nak van-e értéke, és típusuk azonos-e. szemantikai elemző(szintaktikusan elemzett program)(elemzett program, szemantikai hibák). A szemantikai elemző kimenete lesz a szintetizálást végző programok bemenő adata. A szintaxisfa alakjában, vagy például lengyel-formában ábrázolt elemzett programból készül el a tárgyprogram. A szintézis első lépése a kódgenerálás, amelyet a kódgenerátor program végez el: kódgenerátor(elemzett program)(tárgykód) A tárgykód a forrásnyelvű program egy közbülső programformájának tekinthető. Ez a kód lehet a számítógéptől és az operációs rendszertől független speciális 5

123 kód, de a legtöbb fordítóprogram tárgykódként az adott számítógép assembly nyelvű vagy gépi kódú programját állítja elő. A szintetizálás következő lépése a kódoptimalizálás: kódoptimalizáló(tárgykód)(tárgykód) A kódoptimalizálás a legegyszerűbb esetben a tárgykódban levő azonos programrészek felfedezését és egy alprogramba való helyezését, vagy a hurkok ciklusváltozótól független részeinek megkeresését és a hurkon kívül való elhelyezését jelenti. Bonyolultabbak a gépfüggő kódoptimalizáló programok, amelyek például optimális regiszter-használatot biztosítanak. A fordítóprogramok íróinak a célja, hogy a kódoptimalizáló jobb és hatékonyabb tárgyprogramot állítson elő, mint amit egy (az assembly nyelvű programozásban) gyakorlott programozó készíteni tud. ANALÍZIS lexikális elemző szintaktikai elemző szemantikai elemző SZINTÉZIS kódgeneráló kódoptimalizáló 2. ábra. Az analízis és szintézis programjai A fordítóprogram a következő részekre bontható: forrás-klezelő(forrásnyelvű program, hibák)(karaktersorozat, lista), lexikális elemző(karaktersorozat)(szimbólumsorozat, lexikális hibák), 6

124 szintaktikai elemző(szimbólumsorozat)(szintaktikusan elemzett program, szintaktikai hibák), szemantikai elemző(szintaktikusan elemzett program)(elemzett program, szemantikai hibák), kódgenerátor(elemzett program)(tárgykód), kódoptimalizáló(tárgykód)(tárgykód), kód-kezelő(tárgykód)(tárgyprogram). A fordítóprogramok analízist és szintézist végző részének algoritmusa a következőképpen írható le: Fordítóprogram 1 határozzuk meg a forrásnyelvű program szövegében a lexikális szimbólumokat 2 ellenőrizzük a szimbólumsorozat szintaktikai helyességét 3 ellenőrizzük a szimbólumsorozat szemantikai helyességét 4 határozzuk meg a tárgyprogramba kerülő kódot 5 optimalizáljuk a tárgyprogram kódját A következőkben ezekkel a programokkal foglalkozunk. Kezdő lépések A fordítóprogramok bonyolult programok, célszerű őket valamilyen magasszintű nyelven írni. Egy fordítóprogram három nyelvvel jellemezhető: forrásnyelv, tárgynyelv és az a nyelv, amelyen a fordítóprogramot megírták, azaz implementálták. Ez a három nyelv természetesen lényegesen különbözhet egymástól. Ha a fordítóprogram nem annak a gépnek a kódjára fordít, mint amelyiken fut, akkor a fordítóprogramot kereszt-fordítóprogramnak nevezzük. 7

125 A fordítóprogram három nyelvét egy T-diagrammal ábrázolhatjuk, S-sel a forrásnyelvet, T-vel a tárgynyelvet, I-vel az implementáció nyelvét jelöltük. A programot az I nyelven implementált S T fordítóprogramnak nevezzük. S T I 3. ábra. A T-diagram Két T-diagram egymáshoz illeszthető egy olyan ponton, ahol a két diagramban azonos nyelv van. Az ábrákon az illesztési pontokat dupla vonallal jelöljük. Például, ha van egy ass assembly nyelven írt C exe fordítóprogramunk, és van egy exe végrehajtható kódú ass exe assemblerünk, akkor ezzel az assemblerrel elő tudunk állítani egy végrehajtható C exe fordítóprogramot. C exe C exe ass ass exe exe exe 4. ábra. A C exe fordítóprogram 8

126 A bootstrapping, az indítás, azaz a kezdő lépések témakör foglalkozik azokkal a kérdésekkel, hogy 1. hogyan lehet az egyik gépen már működő fordítóprogramot a lehető legkönnyebben átírni úgy, hogy az egy másik gép kódjára fordítson, 2. hogyan fordították le az első magasszintű nyelven megírt fordítóprogramot akkor, amikor még nem volt erre a nyelvre fordítóprogram, 3. hogyan lehet egy olyan fordítóprogramot előállítani, amit a fordítóprogram forrásnyelvén írtak meg, 4. tudja-e egy optimalizált kódot előállító fordítóprogram optimalizálni saját végrehajtási kódját. Ezek a problémák már az 1950-es években felmerültek. Először vizsgáljuk meg az 1. pontban felvetett problémát, azaz a keresztfordítóprogramok előállítását. Például olyan Ada fordítóprogramokat szeretnénk készíteni, amelyek a Sparc és PowerPC gépekre készítenek tárgyprogramot. Tegyük fel, hogy van egy magasszintű nyelvet, például C-t fordító C exe fordítóprogramunk. Ekkor a kereszt-fordítóprogramokat elég ezen a C nyelven megírni, hiszen a rendelkezésre álló C fordítóprogrammal a kívánt programokat elő tudjuk állítani. Ada Sparc Ada Sparc Ada Pow.PC Ada Pow.PC C C exe exe C C exe exe exe exe 5. ábra. Az Ada Sparc és az Ada PowerPC fordítóprogram A 2. és a 3. pontban leírt probléma nem független egymástól, hiszen az első magasszintű nyelven írt fordítóprogramnak nyilván ugyanazt a magasszintű nyelvet kellett fordítania, amelyen a fordítóprogramot megírták. Tehát elég azzal 9

127 P ass P ass CoreP CoreP ass ass ass 6. ábra. A P ass fordítóprogram a problémával foglalkoznunk, hogy hogyan lehet egy P nyelven megírt P exe fordítóprogramot készíteni. A módszer a következő. Először írjunk egy assemblert, csak azért, hogy ne gépi kódban kelljen programozni, az assembly nyelven írt programokat ezzel az assemblerrel exe végrehajtható kódú programra le tudjuk fordítani. Ezután a P nyelvet egyszerűsítjük úgy, hogy elhagyunk belőle néhány bonyolultabb dolgot, például néhány bonyolult deklarációt, típust, utasítást. Így megkapjuk a P nyelvet. Ezután ezt a nyelvet is tovább (akár több lépésben is) egyszerűsítjük, úgy, hogy végül azért még egy, ha nehezen is, de használható CoreP nyelvet kapjunk. Most következik egy nehéz programozási feladat, és a fordítóprogram létrehozásában ez az egyedüli nehéz munka, meg kell írni assembly nyelven a CoreP ass fordítóprogramot. Ezután már használhatjuk implementációs nyelvként a CoreP nyelvet, ezen a nyelven már könnyebben megírhatjuk a P ass fordítóprogramot, amit az előző lépésben már megírt fordítóprogrammal le tudunk fordítani. Egyre bővülő, nagyobb hatásfokú programnyelvet, most már a P -t használjuk implementációs nyelvként, most ezen a nyelven kell megírnunk a P ass fordítóprogramot, amiből könnyen előállíthatjuk az assembly nyelvű P ass programot (?? ábra). 10

128 P ass P ass P ass P P ass ass CoreP CoreP ass ass ass 7. ábra. A P nyelven implementált P ass fordítóprogram P ass P ass P P ass ass ass 8. ábra. A P ass fordítóprogram Mivel a P nyelv jobb, mint a P nyelv, valószínű, hogy a P nyelven jobb fordítóprogramot tudunk írni, mint a P nyelven. Például, ez a fordítóprogram már optimalizálja a generált ass tárgyprogramot. Az optimalizálást jelöljük nyíllal, az optimalizált tárgykódot ass -gal, ezt a P nyelven implementált P ass fordítóprogramot az előbbi P ass fordítóprogrammal már le tudjuk fordítani. Nézzük meg a 4. pontban felvetett problémát, ha már van egy optimalizált kódot előállító fordítóprogramunk, hogyan tudjuk magának a fordítóprogramnak a kódját optimalizálni. Az implementáció kódjának az optimalizálását két lépésben tudjuk megvalósítani. Viszonylag nem nagy munkával készíthető egy nem feltétlenül optimális kódú, lassú fordítóprogram, ami ráadásul nagyon gyenge minőségű tárgykódot állít elő. Legyen ez az ass kódú P ass program. Ezzel fordítsuk le a P ass programot, eredményül egy optimalizált tárgykódot készítő, de 11

129 P ass P ass P ass P P ass ass P P ass ass ass 9. ábra. Az optimalizált kódú P ass fordítóprogram lassú fordítóprogramot kapunk. Most ezzel a fordítóprogrammal fordítsuk az eredeti P ass fordítóprogramot, a fordítás eredménye egy optimalizált kódú és optimalizált tárgyprogramot előállító fordítóprogram. 12

130 A lexikális elemzés A forrásnyelvű programból a source-handler egy karaktersorozatot készít. A lexikális elemző alapvető feladata az, hogy ebben a karaktersorozatban felismerje az összetartozó, a szimbólumokat alkotó karaktersorozatokat. A lexikális elemző a karaktersorozatot egy szimbólumsorozatra alakítja át. Különböző programnyelvekben az azonos, vagy hasonló fogalmakat jelentő szimbolikus egységek lényegesen különbözhetnek, például van, ahol a program, és van, ahol a main szó jelenti a főprogramot, az egyik nyelvben a case, a másikban a switch a többirányú elágazás kulcsszava. Különböző szimbólumhoz azonos karakterek vagy karaktersorozatok is tartozhatnak, például a karakter a legtöbb nyelvben a kivonás jele, de van olyan nyelv is, ahol ez a hosszú azonosító szimbólumok tagolására szolgál, vagy például a ; karakter az egyik nyelvben az utasítás végét, míg egy másik nyelvben két egymásutáni utasítás elkülönítését jelzi. A lexikális elemző működése A lexikális elemző működésének alapelve az, hogy egy szimbólumot mindig a lehető leghosszabb karaktersorozatból kell felépíteni, például a cicamica szöveg nem nyolc egybetűs, hanem egy nyolcbetűs szimbólum lesz. A szimbolikus egységek precíz megadása reguláris nyelvtannal vagy más néven Chomsky 3-as típusú nyelvtannal, reguláris kifejezésekkel vagy determinisztikus véges automatával írható le. A lexikális elemző bemenetében benne van az összes szóköz és tabulátor jel, hiszen a source-handlerről csak annyit tételeztünk fel, hogy a kocsivissza és soremelés karaktereket hagyja el. A legtöbb programozási nyelv tetszőlegesen sok szóköz és tabulátor karaktert megenged az egyes szimbólumok között. Ezeknek a karaktereknek a fordítás szempontjából a szimbólumok felismerése után már nincs szerepük, ezért ezeket fehér szóközöknek nevezzük. A fehér szóközöket a 13

131 (space tab) ( ) (space + tab) helyett reguláris kifejezéssel adhatjuk meg, ahol a space a szóköz, a tab a tabulátor karaktert jelenti. A fehér szóközökkel a felismerés után a lexikális elemzőnek semmi teendője nincs, ezt a szimbólumot nem kell továbbadnia a szintaktikai elemzőnek. A lexikális elemzők létrehozásának módszere az, hogy megadjuk a szimbolikus egységek leírását, például a reguláris kifejezések nyelvén, megkonstruáljuk az ekvivalens determinisztikus véges automatát, és elkészítjük a determinisztikus véges automata implementációját. Az elemző a szimbólumot az automata végállapotaival ismeri fel. A lexikális elemző egy szimbólumhoz egy előre megadott kódot rendel, és ez a kód kerül bele a lexikális elemző outputjába. Egy szimbólumhoz kiegészítő információ is tartozhat, ilyen például a konstans szimbólum típusa, értéke. Ezekre az információkra a következő elemző programnak, a szintaktikus elemzőnek nincs szüksége, de például a szemantikus elemző már a típusokat ellenőrzi, a kódgeneráláshoz pedig ezek az információk feltétlenül szükségesek. Tehát a lexikális elemzőnek a szimbólumokhoz tartozó kiegészítő információkat tárolnia kell, erre a feladatra a lexikális elemzők általában egy szimbólumtáblát használnak, és a szimbólum kódja után egy pointert helyeznek el, ami a szimbólumhoz tartozó szimbólumtábla bejegyzésre mutat. Példa. Tegyük fel, hogy a szimbólumok kódjai a következők: 14

132 azonosító 1 konstans 200 if 50 then 51 else 52 = 800 := 700 ; 999 Ekkor a lexikális elemző az if cica12 = 12 then alma := 55 else c1 := 99; programsorból az sorozatot készíti, ahol 0001,..., 0006 a szimbólumtábla bejegyzésekre mutató pointerek. A lexikális elemző kimenetét, a szimbólumsorozatot arra is használhatjuk, hogy a kódokból visszaállítsuk az eredeti forrásnyelvű programot, rendezett, szépen tabulált, tagolt formában. A következőkben néhány példát adunk reguláris kifejezésekre. Megjegyezzük, hogy a szimbólumok leírására azért használunk reguláris kifejezéseket, mert ezekkel a szimbólumok egyszerűbben és könnyebben írhatók le, mint a reguláris nyelvtanokkal. Példa. Vezessük be a következő jelöléseket: jelöljön D egy tetszőleges számjegyet és L egy tetszőleges betűt, azaz D {0, 1,..., 9}, és L {a, b,..., z, A, B,..., Z}, a nem látható karaktereket jelöljük a rövid nevükkel (például space, Eol, Eof ), és legyen ε az üres karaktersorozat jele. Not(a) jelentsen egy a-tól, Not(a b) egy a-tól és b-től különböző karaktert. A reguláris kifejezések: 15

133 1. egész szám: (+ ε)d + 2. egyszerű azonosító szimbólum: L(L D) 3. ## karakterpárokkal határolt megjegyzés: ##((# ε)not(#)) ## + D D L L D D 10. ábra. 1. és 2. automatája Not(#) # # # # Not(#) 11. ábra. 3. kifejezés felismerő automatája 16

134 4. / és / karakterpárokkal határolt megjegyzés: / (Not( )) + (Not( /)Not( ) + ) / 5. karakterfüzér: "(Not(") " ") ". Not( /) / / Not( ) 12. ábra. 4. kifejezés felismerő automatája T(Not(")) " T(") " 13. ábra. 5. kifejezés felismerő automatája A lexikális elemző feladata a szimbólum szövegének a meghatározása, azonban például a fenti 5. reguláris kifejezésben nem minden karakter tartozik a szimbólumhoz, a kezdő és a befejező " karakterek nem elemei a szimbólumnak. Ezért a lexikális elemzőhöz rendeljünk hozzá egy puffert, egy szimbólum felismerése után a szimbólumot alkotó karakterek ebben a pufferben lesznek. A determinisztikus véges automatát pedig egészítsük ki egy T átviteli függvénnyel, ahol T(a) jelentse azt, hogy az a karakter a pufferbe kerül. Példa. A 3. és 4. reguláris kifejezések automatái, mivel egy megjegyzést ismernek fel, egyáltalán nem tartalmaznak T függvényt. 17

135 Az 5. kifejezés automatája például az "Ez egy ""idézet""" szövegből az Ez egy "idézet" szöveget viszi a pufferbe. Most adjuk meg egy determinisztikus véges automatával megadott lexikális elemzés algoritmusát (az egyszerűség kedvéért az egyelemű állapot halmazokat a halmazok egyetlen elemével jelöljük). Az elemzést végző A = (Q, Σ, δ, q 0, F) determinisztikus véges automata Σ ábécéjét egészítsük ki egy új jellel, jelöljük egyéb-bel a nem Σ-beli karaktereket. Ennek megfelelően a δ átmenetfüggvény a következőképpen módosul: { δ(q, a), ha a egyéb, δ (q, a) =, egyébként. Az így kapott A kiegészített automatával az elemzés a következő lesz: Lex-elemez(x#, A ) 1 q q 0, a x első karaktere 2 s elemez 3 while a # és s = elemez 4 do if δ (q, a) 5 then q δ (q, a) 6 a x következő karaktere 7 else s hiba 8 if s = elemez és q F 9 then s O.K. 10 else s HIBA 11 return s, a Az algoritmus bemenő paramétere a # jellel lezárt elemezendő karaktersorozat és az elemző automata. Az 1. sorban az elemző állapotát az automata q 0 állapotára állítjuk, és meghatározzuk az elemezendő szöveg első karakterét. Az s változó az elemző működését jelzi, a 2. sorban a változóba az elemez szöveget töltjük. Az 5. sorban az automata állapotátmeneteit hajtjuk végre, és látható, 18

136 hogy az eredeti automata fenti kiegészítésére azért volt szükség, hogy az automata működése az egyéb hibás karakterre is befejeződjék. A sorokban O.K. azt jelenti, hogy az elemzett karaktersorozat helyes, HIBA a lexikális hiba megjelenését jelzi. Sikeres elemzés esetén a a # karaktert, hiba esetén éppen a hibás karaktert tartalmazza. Megjegyezzük, hogy a Lex-elemez algoritmus csak egy szimbólumot ismer fel, és ezután működése befejeződik. Egy program nyilvánvalóan sok szimbólumból áll, és egy szimbólum meghatározása után a lexikális elemzést a következő szimbólum meghatározásával kell folytatni, azaz az elemzést az automata kezdőállapotával újra kell indítani. A teljes lexikális elemzés algoritmusának meghatározását a feladatok között tűzzük ki. 19

137 Speciális problémák Kulcsszavak, standard szavak Minden programozási nyelvben vannak olyan azonosítók, amelyeknek speciális célra fenntartott nevük, előre megadott jelentésük van, ezek a kulcsszavak. A kulcsszavak eredeti jelentésüktől eltérően nem használhatók. Vannak azonban olyan azonosítók is, amelyekre szintén fennáll, hogy előre megadott jelentésük van, de ez a jelentés a programban megváltoztatható. Ezeket a szavakat standard szavaknak nevezzük. A kulcsszavak és a standard szavak száma programnyelvenként változik. A COBOL nyelvben több mint 300 ilyen szó van, a nulla érték jelölésére például három kulcsszó is van: zero, zeros és zeroes. Foglalkozzunk azzal a problémával, hogy a lexikális elemző hogyan ismeri fel a kulcsszavakat és a standard szavakat, és hogy hogyan különbözteti meg őket a felhasználó által használt azonosítóktól. A kulcsszavak és standard szavak felismerése akkor nagyon egyszerű, ha azokat speciális karakterekkel írják, vagy speciális elő- és utókarakterekkel jelölik meg. A standard szavaknak az eredeti értelemtől eltérő felhasználása azonban nemcsak a lexikális elemző feladatát nehezíti meg, hanem a program olvashatóságát is erősen rontja, mint például a következő utasításban: if if then else = then; vagy, hogyha egy begin és egy end nevű eljárást deklarálunk: begin begin; begin end; end; begin end; end; A kulcsszavak kezelésére két módszert adunk. 20

138 1. Minden kulcsszót egy reguláris kifejezéssel írunk le, és megadjuk a reguláris kifejezéshez tartozó automata implementációját. Ennek a módszernek a hátránya az, hogy még akkor is nagyon nagyméretű programot kapunk, ha a kulcsszavak leírását az azonos kezdőbetűk szerint összevonjuk. 2. A kulcsszavakat egy külön táblázatban tároljuk. A karaktersorozatban a szavakat egy általános azonosító-felismerővel határozzuk meg, majd egy kereső algoritmust alkalmazva megnézzük, hogy az azonosító benne van-e a táblázatban. Ha igen, akkor a szimbólum egy kulcsszó, ellenkező esetben egy, a felhasználó által megadott azonosító. Ez a módszer nagyon egyszerű, de a keresés sebessége függ a táblázat felépítésétől, a keresési algoritmustól. Egy jól megválasztott leképező függvény és egy lineárisan szétszórt altáblákból felépített kulcsszó-táblázat nagyon hatékony lehet. Ha a programnyelv lehetővé teszi standard szavak használatát, akkor a lexikális elemző a kulcsszavakra alkalmazott módszerrel meghatározhatja, hogy a vizsgált szimbólum standard szó-e. Az, hogy a standard szó az eredeti jelentésben használt szimbólum, vagy hogy a szimbólumot a felhasználó újraértelmezte, a szimbólum környezetétől függ. Ennek eldöntése a szintaktikus elemző feladata lesz. Az előreolvasás Mivel a lexikális elemző a leghosszabb karaktersorozatból álló szimbólum felismerésére törekszik, a szimbólum jobb oldali végpontjának meghatározására gyakran egy vagy több karaktert is előre kell olvasnia. Erre a klasszikus példa a következő két FORTRAN utasítás: DO 123 K = 9.92 DO 123 K = 9,92 ahol, mivel a FORTRAN nyelvben a szóköz karakterek semmilyen szerepet nem játszanak, a 9 és 92 közötti jel dönti el, hogy az utasítás egy DO kulcsszóval kezdődő ciklusutasítás, vagy a DO123K azonosítóra vonatkozó értékadás. 21

139 A reguláris kifejezések leírásában vezessük be a szimbólum jobb oldali végpontjának a jelölésére a / jelet, és nevezzük ezt előreolvasási operátornak. Így a fenti DO kulcsszó értelmezése a következő: DO / (betű számjegy) = (betű számjegy), Ez az értelmezés tehát azt jelenti, hogy a lexikális elemző csak akkor tudja eldönteni, hogy az első két karakteren a D és az O betű a DO kulcsszó, ha előreolvasva, betűk vagy számjegyek, egy egyenlőségjel és ismét betűk vagy számjegyek után egy, karaktert talál. Az előreolvasási operátor azt is jelenti, hogy a következő szimbólum keresését a DO utáni karakterrel kell kezdeni. Megjegyezzük, hogy az elemző ezzel az előreolvasással a DO szimbólumot azonosítja akkor is, ha a DO után programhiba van, mint például a DO2A=3B, karaktersorozatban, de helyes értékadó utasításban sohasem fogja az azonosító első két D és O karakterét a DO kulcsszónak értelmezni. A fenti példánál bonyolultabb esetek is előfordulhatnak, mint például a következő programsorban: DO 123 I = (P12(3,"),)")),5 A lexikális elemzőnek fel kell ismernie, hogy az egyenlőség jel után a két paraméteres P12 függvény P12(3,"),)") értéke van, az első paraméter 3, a második egy idézőjelek közé tett karaktersorozat. Ezután következik egy vessző, és ez a vessző fogja azt jelenteni, hogy a DO egy kulcsszó, a függvényérték a ciklusváltozó kezdőértéke, és 5 a végérték. Az előreolvasás karakterszámát a programozási nyelv leírásából lehet meghatározni. A modern programozási nyelveknél egy szimbólum felismeréséhez a szimbólum karakterei után egy, pesszimális esetben négy karakter előreolvasása szükséges. Példa. 22

140 A C++ nyelv néhány kétkarakteres szimbóluma: ++, +=, --, -=, ->, >=, >>, háromkarakteres szimbólumai: <<=, >>=. A Java nyelv háromkarakteres szimbólumai: >>=, >>>, <<=, és egy négykarakteres szimbólum: >>>=. Direktívák A forrásnyelvekben a direktívák a fordítóprogram működésének vezérlésére szolgálnak. A direktívákat és a direktívák operandusaiban szereplő szimbólumokat is a lexikális elemzőnek kell meghatároznia, de ezekkel az elemzőnek további teendői is vannak. Ha a direktíva például egy feltételes fordítás if direktívája, akkor fel kell ismernie a direktíva összes szimbólumát, majd ki kell értékelnie az elágazás feltételét. Ha ez false, akkor a további sorokban szereplő szimbólumokat nem szabad elemeznie egészen addig, amíg egy else, vagy az if végét jelentő endif direktívát nem talál. Ez azt jelenti, hogy a lexikális elemzőnek már szintaktikus és szemantikus ellenőrzéseket is kell végeznie, és kódjellegű információt kell előállítania. A feladatot különösen bonyolíthatja, ha a nyelv lehetőséget ad a feltételek skatulyázására. Egy másik tipikus direktíva a makróhelyettesítés, vagy egy adott nevű állomány bemásolása a forrásnyelvű szövegbe, aminek a végrehajtása szintén távol áll a lexikális elemző eredeti alapfeladatától. A legtöbb fordítóprogramban ezeket a problémákat úgy oldják meg, hogy a szintaktikus elemző előtt egy előfeldolgozó programot működtetnek, amelynek a feladata a direktívák által megadott feladatok végrehajtása. Hibakezelés Ha a lexikális elemző egy karaktersorozatnak nem tud egy szimbólumot sem megfeleltetni, akkor azt mondjuk, hogy a karaktersorozatban lexikális hiba van. 23

141 A lexikális hibákat legtöbbször az okozza, hogy illegális karakterek kerülnek a szövegbe, karakterek felcserélődnek vagy esetleg karakterek hiányoznak. Mivel nem célszerű egy lexikális hiba detektálásakor a fordítást megszakítani, valamilyen hibaelfedő algoritmust kell alkalmazni, amelynek az a célja, hogy az elemzés a lehető legkevesebb karakter kihagyásával folytatódjon. Tegyük fel, hogy az elemző a defiξne karaktersorozatot vizsgálja, ahol a ξ egy nem megengedett karakter. Ekkor a ξ karakterre egy hibajelzést ad, és az egyik lehetőség az, hogy nem foglalkozik a már beolvasott karakterekkel, az elemzést a következő, még nem vizsgált karakterrel folytatja. Az elemző így az ne karakterekből például egy logikai reláció szimbólumot ismer fel. Egy másik lehetőség az, hogy egyszerűen kihagyja, vagy egy tetszőleges karakterrel, általában a space szóköz karakterrel helyettesíti az illegális karaktert. Így a fenti szövegben vagy a define szimbólumot, vagy a defi és ne szimbólumokat határozza meg. Hiányzó karaktereknek gyakran az a hatásuk, hogy a lexikális elemző nem tudja a szimbólumokat elkülöníteni egymástól. Például, ha az alma+112 karaktersorozatból a + jel kimarad, akkor az elemző minden hibajelzés nélkül az alma112 azonosítót ismeri fel. Ha a 112+alma-ból hiányzik a + jel, akkor a lexikális elemző ezt egy 112 konstansra és egy alma azonosítóra bontja, és azt, hogy közülük egy műveleti jel hiányzik, majd csak a szintaktikus elemző fogja felfedezni. Hasonlóan, a következő C++ programsor is meglepő eredményt ad, a "sárga" és "narancs" szövegek közül kimaradt a vessző: char *szín[] = { "piros", "kék", "sárga" "narancs" } ; a harmadik elem a sárganarancs lesz. Vannak olyan lexikális hibák is, amelyeknek a kezelésére különösen nagy gondot kell fordítani. Ilyenek a karakterfüzérek és a megjegyzések befejező karaktereinek hiányai, ezek a hibák gyakran azt okozzák, hogy a program további része, egészen a program végéig, karakterfüzér vagy megjegyzés lesz. 24

142 Szintaktikai elemzés A környezetfüggetlen nyelvtanokkal leírható programnyelvi tulajdonságok vizsgálatát szintaktikai elemzésnek nevezzük. A programnyelv szintaktikájának azon követelményei, amelyek nem írhatók le környezetfüggetlen nyelvtannal, a statikus szemantikát alkotják. Itt nyelvtan alatt mindig környezetfüggetlen nyelvtant, vagy más néven Chomsky 2-es típusú nyelvtant értünk, és feltesszük, hogy a környezetfüggetlen nyelvtan kiterjesztett nyelvtan, azaz helyettesítési szabályai A α, ahol A N, α (N T ) alakúak. A szintaktikai elemzés alapfogalmai Legyen G = (N, T, P, S) egy nyelvtan. Ha S = α, ahol α (N T ), akkor az α-t mondatformának nevezzük. Ha S = x, ahol x T, akkor az x a nyelvtan által generált nyelv egy mondata. Az elemzés szempontjából a mondatnak kiemelt szerepe van, hiszen a programozó által írt program is terminális szimbólumok sorozata, de ez a szimbólumsorozat csak akkor lesz a nyelvnek egy mondata, ha a program szintaktikailag helyes. Legyen a G = (N, T, P, S) nyelvtannak α = α 1 βα 2 egy mondatformája (α, α 1, α 2, β (N T ) ). A β-t az α egy részmondatának nevezzük, ha van olyan A N szimbólum, amelyre S = α 1 Aα 2 és A = β. Az α-nak β egy egyszerű részmondata, ha a fentiekben az A β P teljesül. Minden mondat egyben mondatforma is, és a mondatforma részét is részmondatnak, és nem részmondatformának nevezzük. Egy mondatforma legbaloldalibb egyszerű részmondatát a mondatforma nyelének nevezzük. 1

143 A mondat szintaxisfájának levelei a nyelvtan terminális szimbólumai, a szintaxisfa többi pontja a nemterminális szimbólumokat reprezentálja, a gyökérelem pedig a nyelvtan kezdőszimbóluma. Egy nemegyértelmű nyelvtanban van legalább egy olyan mondat, amelyhez több szintaxisfa tartozik. Ez az elemzés szempontjából azt jelenti, hogy ezt a mondatot többféleképpen is lehet elemezni, azaz a különböző elemzésekhez különböző tárgyprogramok is tartozhatnak. Ezért fordítóprogramokkal csak az egyértelmű nyelvtanok által generált nyelvek fordítását végezzük el. A továbbiakban feltesszük azt is, hogy a G nyelvtanra a következő feltételek teljesülnek: 1. a nyelvtan ciklusmentes, azaz nem tartalmaz A = + A (A N) helyettesítési szabálysorozatot, 2. a nyelvtan redukált, azaz nincs benne felesleges nemterminális szimbólum, minden nemterminális szimbólum előfordul legalább egy levezetésben, és minden nemterminális szimbólumból levezethető legalább egy mondatnak egy része, azaz minden A N-re fennáll, hogy S = αaβ = αyβ = xyz, ahol A = y és y > 0 (α, β (N T ), x, y, z T ). A szintaktikai elemzési módszerek A programot a lexikális elemző egy terminális szimbólumokból álló sorozattá alakítja, ez a terminálisokból álló sorozat a szintaktikai elemzés bemenete. A szintaktikai elemzés feladata eldönteni azt, hogy ez a szimbólumsorozat a nyelv egy mondata-e. A szintaktikai elemzőnek ehhez például meg kell határoznia a szimbólumsorozat szintaxisfáját, ismerve a szintaxisfa gyökérelemét és a leveleit, elő kell állítania a szintaxisfa többi pontját és élét, vagyis meg kell határoznia a program egy levezetését. Ha ez sikerül, akkor azt mondjuk, hogy a program eleme a nyelvnek, azaz a program szintaktikailag helyes. 2

144 A továbbiakban csak a balról-jobbra haladó elemzésekkel foglalkozunk, azaz azokkal az elemzésekkel, amelyek a program jeleit balról jobbra olvasva dolgozzák fel. A szintaxisfa belső részének felépítésére több módszer létezik. Az egyik az, amikor az S szimbólumból kiindulva építjük fel a szintaxisfát, ezt felülről-lefelé haladó elemzésnek nevezzük. Ha a szintaxisfa építése a levelekből kiindulva halad az S szimbólum felé, akkor alulról-felfelé elemzésről beszélünk. LL(1) elemzés Felülről-lefelé elemezve a nyelvtan kezdőszimbólumától, a szintaxisfa gyökérpontjától indulunk el, és így próbáljuk felépíteni a szintaxisfát. A célunk az, hogy a szintaxisfa levelein az elemezendő programszöveg terminális szimbólumai legyenek. LL(k) nyelvtanok Mivel felülről-lefelé építjük a szintaxisfát és a szövegben balról-jobbra haladunk, ezért arra kell törekednünk, hogy az elemzéskor kapott mondatformák bal oldalán a lehető leghamarabb megjelenjenek az elemezendő szöveg terminálisai. Ha A α P, akkor az xaβ mondatforma (x T, α, β (N T ) ) legbaloldalibb helyettesítése xαβ, azaz xaβ = legbal xαβ. Ha az S = x (x T ) levezetésben minden helyettesítés legbaloldalibb helyettesítés, akkor ezt a levezetést legbaloldalibb levezetésnek nevezzük, és így jelöljük: S = legbal x. 3

145 A legbaloldalibb levezetésben a terminális szimbólumok a mondatforma bal oldalán jelennek meg, ezért a felülről-lefelé levezetésekben mindig legbaloldalibb helyettesí éseket alkalmazunk, így a felülről-lefelé elemzés a legbaloldalibb levezetésnek felel meg. Ezért a továbbiakban, amikor felülről-lefelé elemzésről lesz szó, a nyilak alá már nem is írjuk oda a legbal szót. A felülről-lefelé elemzés egyik módszere az lehetne, hogy előállítjuk az összes lehetséges szintaxisfát. Egy szintaxisfa levelein levő szimbólumokat balról-jobbra olvasva a nyelv egy mondatát kapjuk meg. Ha az elemezendő szöveg megegyezik valamelyik mondattal, akkor a mondathoz tartozó szintaxisfáról az elemzés lépései már leolvashatók. Ezt a módszert természetesen nem célszerű és nem is lehet a gyakorlatban megvalósítani. A gyakorlatban megvalósítható módszer a következő: Kiindulunk a kezdőszimbólumból, és megpróbálunk legbaloldalibb helyettesítések egymás utáni alkalmazásával eljutni az elemezendő szöveghez. A szintaxisfa építésekor azonban egyáltalán nem biztos, hogy jó helyettesítési szabályokat alkalmazunk, mert például egy lépés után előfordulhat, hogy a következő lépésben nem találunk alkalmazható szabályt, vagy a mondatforma elejére kerülő terminális szimbólumok nem egyeznek meg az elemezendő szöveg terminális szimbólumaival. A terminális szimbólumokra a következőket állíthatjuk: Tétel. Ha S = xα = yz (α (N T ), x, y, z T ) és x = y, akkor x = y. A tétel állítása triviális, egy mondatforma bal oldalán a terminálisokból álló x sorozatot a környezetfüggetlen nyelvtan helyettesítési szabályai nem változtathatják meg. Ez a kezdőszelet-egyeztetés arra használható, hogy megállapíthassuk, ha a szintaxisfa építésekor a bal oldali terminálisok nem egyeznek meg az elemezendő szöveg bal oldalán álló terminálisokkal, akkor a szintaxisfa építése biztosan rossz 4

146 irányban halad. Ekkor egy lépést vissza kell lépni, és ott egy másik helyettesítési szabályt kell alkalmazni, és még egy lépést vissza kell lépni akkor, ha az adott pontban már nincs több alkalmazható szabály. Az általános felülről-lefelé elemzést tehát visszalépéses algoritmussal lehet megvalósítani, de ez nem hatékony. Az LL(k) nyelvtanok alaptulajdonsága az, hogy ha az S = wx (w, x T ) legbaloldalibb levezetés építésekor eljutunk az S = waβ mondatformáig (A N, β (N T ) ), és az Aβ = x-t szeretnénk elérni, akkor az A-ra alkalmazható A α helyettesítést egyértelműen meghatározhatjuk, ha ismerjük az x első k darab szimbólumát. A k szimbólum előreolvasására megadjuk az First k függvényt: Legyen First k (α) (k 0, α (N T ) ) az α-ból levezethető szimbólumsorozatok k hosszúságú kezdő terminális sorozatainak halmaza, azaz First k (α) = {x α (x T, β (N T ) ). = xβ és x = k} {x α = x és x < k} Tehát az First k (x) halmaz az x első k darab szimbólumát, x < k esetén pedig a teljes x-t tartalmazza. Ha α = ε, akkor természetesen ε First k (α). A G nyelvtan LL(k) nyelvtan (k 0), ha bármely két S = waβ = wα 1 β = wx, S = waβ = wα 2 β = wy (A N, x, y, w T, α 1, α 2, β (N T ) ) levezetésre esetén First k (x) = First k (y) α 1 = α 2. 5

147 w w S A α β β w x k 1. ábra. Az LL(k) nyelvtan. A fenti értelmezés szerint, ha egy nyelvtan LL(k) nyelvtan, akkor a már elemzett w utáni k darab terminális szimbólum az A-ra alkalmazható helyettesítési szabályt egyértelműen meghatározza. Az értelmezésből az is látható, hogy ha egy nyelvtan LL(k 0 ) nyelvtan, akkor minden k > k 0 -ra is LL(k) nyelvtan. Ha LL(k) nyelvtanról beszélünk, akkor k alatt mindig azt a legkisebb k-t értjük, amelyre az értelmezésben megadott tulajdonság teljesül. Példa. A következő nyelvtan egy LL(1) nyelvtan. Legyen G = ({A, S}, {a, b}, P, S), ahol a helyettesítési szabályok a következők: S AS ε A aa b Az S szimbólumra az S AS szabályt kell alkalmazni, ha az elemezendő szöveg következő szimbóluma a vagy b, és az S ε szabályt, ha a következő szimbólum a # jel. Nem minden környezetfüggetlen nyelvtan LL(k) nyelvtan. Például a következő 6

148 nyelvtan semmilyen k-ra sem LL(k) nyelvtan. Példa. A G = ({A, B, S}, {a, b, c}, P, S) nyelvtan helyettesítési szabályai a következők: S A B A aab ab B abc ac Az L(G) az a i b i és a i c i (i 1) alakú mondatokat tartalmazza. Az a k+1 b k+1 elemzésének már a kezdetekor sem lehet eldönteni k szimbólum előreolvasásával, hogy az S A és az S B közül melyik helyettesítést kell először alkalmazni, mivel minden k-ra First k (a k b k ) = First k (a k c k ) = a k. Az LL(k) nyelvtan értelmezése szerint, ha legbaloldalibb helyettesítésekkel a waβ mondatformát kaptuk, akkor a w-t követő k darab terminális szimbólum egyértelműen meghatározza az A-ra alkalmazható szabályt. Ezt mondja ki a következő tétel. Tétel, A G nyelvtan akkor és csak akkor LL(k) nyelvtan, ha minden S esetén = waβ, és A γ δ (γ δ, w T, A N, β, γ, δ (N T ) ) First k (γβ) First k (δβ) =. Ha a nyelvtanban az A-ra van egy A ε szabály is, akkor a First k halmazokban a β-ból származó terminális sorozatok k hosszúságú kezdősorozatai is szerepelnek. Ez pedig azt jelenti, hogy az LL(k) tulajdonság eldöntéséhez nem elegendő csak a szabályokat vizsgálni, hanem a nem feltétlenül véges darabszámú levezetéseket is figyelembe kell venni. 7

149 A gyakorlatban jól használható vizsgálati módszert csak az LL(1) nyelvtanokra lehet adni. Ehhez egy új fogalmat értelmezünk, egy szimbólumsorozatot követő k hosszúságú terminális sorozatok halmazát. Follow k (β)= {x S = αβγ s x First k (γ)}, és ha ε Follow k (β), akkor legyen Follow k (β) = Follow k (β) \ {ε} {#} (α, β, γ (N T ), x T ). Az értelmezés második részében levő átalakítás azért szükséges, mert ha az αβγ levezetésben a β után nem áll semmilyen szimbólum, azaz γ = ε, akkor a β utáni jel csak a mondatokat lezáró # jel lehet. A Follow 1 (A) (A N) tehát azokat a terminális szimbólumokat tartalmazza, amelyek az S = αaγ = αaw (α, γ (N T ), w T ) levezetésben közvetlenül az A szimbólum mögött állhatnak. Tétel, A G nyelvtan akkor és csak akkor LL(1) nyelvtan, ha minden A nemterminális szimbólum A γ δ helyettesítési szabályaira First 1 (γfollow 1 (A)) First 1 (δfollow 1 (A)) =. A tételben az First 1 (γfollow 1 (A)) kifejezés azt jelenti, hogy a γ-t a Follow 1 (A) halmaz minden elemével külön-külön konkatenálni kell, és az így kapott halmaz minden elemére alkalmazni kell az First 1 függvényt. Látható, hogy a tétel jól használható annak eldöntésére, hogy egy nyelvtan vajon LL(1)-es-e, hiszen legfeljebb csak annyi halmazt kell a vizsgálathoz előállítani, ahány szabálya van a nyelvtannak. A továbbiakban az LL(1) nyelvtanok által meghatározott LL(1) nyelvekkel foglalkozunk, az LL(1) nyelvek elemzési módszereit vizsgáljuk. Az egyszerűbb jelölés érdekében az First 1 és Follow 1 függvények nevéből az indexet elhagyjuk. Az First(α) halmaz elemei a következő algoritmussal határozhatók meg. 8

150 First(α) 1 if α = ε 2 then F {ε} 3 if α = a, ahol a T 4 then F {a} 5 if α = A, ahol A N 6 then if A ε P 7 then F {ε} 8 else F 9 for minden A Y 1 Y 2... Y m P -re (m 1) 10 do F F (First(Y 1 ) \ {ε}) 11 for k 1 to m 1 12 do if Y 1 Y 2... Y k = ε 13 then F F (First(Y k+1 ) \ {ε}) 14 if Y 1 Y 2... Y m = ε 15 then F F {ε} 16 if α = Y 1 Y 2... Y m (m 2) 17 then F (First(Y 1 ) \ {ε}) 18 for k 1 to m 1 19 do if Y 1 Y 2... Y k = ε 20 then F F (First(Y k+1 ) \ {ε}) 21 if Y 1 Y 2... Y m = ε 22 then F F {ε} 23 return F Az 1 4. sorokban az ε és egy a terminális szimbólum argumentumra adjuk meg a halmazt, az sorokban az A nemterminális szimbólumra határozzuk meg halmaz elemeit. A 6 7. sorokban és a sorokban a halmazba betesszük az ε szimbólumot, ha az A-ból az ε levezethető. Az algoritmus sorai arra az esetre adják meg a halmaz elemeit, ha az argumentum egy szimbólumsorozat. 9

151 Megjegyezzük, hogy a 11. és 18. sor for ciklusát már akkor is befejezhetjük, ha Y k T, mivel ekkor Y 1 Y 2... Y k -ból biztosan nem vezethető le az ε. A tételben, és a továbbiakban is, szükséges a Follow(A) halmaz elemeinek ismerete. Ezeknek a meghatározására a következő algoritmust adjuk. Follow(A) 1 if A = S 2 then F {#} 3 else F 4 for minden B αaβ P szabályra 5 do if β > 0 6 then F F (First(β) \ {ε}) 7 if β = ε 8 then F F Follow(B) 9 else F F Follow(B) 10 return F A Follow(A) halmaz elemeit az F halmazba helyezzük. A 4 9. sorokban megvizsgáljuk, hogy ha az argumentum egy szabály jobb oldalán szerepel, milyen terminális szimbólumok állhatnak közvetlenül utána. Látható, hogy az ε nem kerülhet bele a halmazba, és a # is csak akkor, ha az argumentum egy mondatforma legjobboldalibb szimbóluma. Táblázatos elemzés Tegyük fel, hogy az elemezendő terminális sorozat xay, amelyből az x szöveget már szintaktikai hiba detektálása nélkül elemeztük. Mivel felülről lefelé elemzünk, tehát legbaloldalibb helyettesítéseket alkalmazunk, az elemezendő mondatformánk xy α, azaz xbα vagy xbα alakú (Y (N T ), B N, a, b T, x, y T, α (N T ) ). 10

152 S S x B α x b α x a y x a y 2. ábra. A mondatforma és az elemezendő szöveg. Az első esetben a szintaxisfa építésében most a B egy helyettesítése a következő lépés. Ismerjük a bemenő szimbólumsorozat következő a elemét, ezért egyértelműen meghatározhatjuk azt a B β szabályt, amelyikre a First(βFollow(B)). Ha van ilyen szabály, akkor az LL(1) nyelvtan értelmezése alapján pontosan egy van, ha nincs, akkor ez az eset egy szintaktikai hiba megtalálását jelenti. A második esetben a mondatforma következő szimbóluma a b terminális szimbólum, tehát azt várjuk, hogy az elemezendő szöveg következő szimbóluma is b legyen. Ha ez teljesül, azaz a = b, akkor az a szimbólum egy helyes szimbólum, továbbléphetünk, mind a mondatformában, mind az elemezendő szövegben az a szimbólum átkerülhet a már elemzett jelsorozatba. Ha a b, akkor ez egy szintaktikai hibát jelent. Az elemző működését a következőképpen írjuk le. Jelöljük a # jellel az elemezendő szöveg utolsó szimbólumát. Az elemzéshez egy vermet is használunk, a verem alja legyen szintén #. A helyettesítési szabályokat valamilyen sorrendben sorszámozzuk meg. Az elemzés során alkalmazott szabályok sorszámát felírjuk egy listába, az elemzés végén ez a lista arra fog szolgálni, hogy az elemzett szöveg szintaxisfáját felépíthessük. 11

153 X x a y # elemző α # v 3. ábra. Az LL(1) elemző szerkezete. Az elemzés állapotait az (ay#, Xα#, v) hármassal jelöljük. Az ay# a még nem elemzett szöveg, Xα# az elemzés mondatformájának még nem elemzett része, ez van a veremben, úgyhogy X van a verem tetején, v pedig a szabályok sorszámait tartalmazó lista. Az elemzés úgy fog működni, hogy mindig a verem tetején levő X szimbólumot és a még nem elemzett szöveg első szimbólumát, az a-t fogjuk vizsgálni. Az a-t aktuális szimbólumnak nevezzük. A verem tetejére és az aktuális szimbólumra az elemzőből egy-egy pointer mutat. Felülről lefelé elemzünk, a verem kezdeti tartalma S#. Ha a teljes elemezendő szöveget xay, akkor az elemzés kezdetén kezdőállapotot az (xay#, S#, ε) hármassal írhatjuk le, ahol most ε az üres listát jelöli. Az elemzést egy T elemző táblázat segítségével végezzük. A táblázat sorai a verem tetején álló szimbólumot, az oszlopai pedig a bemenet következő elemezendő szimbólumát jelölik, a # jelet a táblázat utolsó sorához és utolsó oszlopához írjuk. 12

154 A táblázat T [X, a] eleme legyen a következő: (β, i), ha X β az i-edik helyettesítési szabály, a First(β) vagy (ε First(β) és a Follow(X)), T [X, a] = pop, ha X = a, elfogad, ha X = # és a = #, hiba egyébként. Példa. Legyen a G nyelvtan a következő: G = ({E, E, T, T, F }, {+,, (, ), i}, P, E), ahol a P helyettesítési szabályok a következők: E T E E +T E ε T F T T F T ε F (E) i + * ( ) i # E (T E, 1) (T E, 1) E (+T E, 2) (ε, 3) (ε, 3) T (F T, 4) (F T, 4) T (ε, 6) ( F T, 5) (ε, 6) (ε, 6) F ((E), 7) (i, 8) + pop * pop ( pop ) pop i pop # elfogad 13

155 A táblázat kitöltését a következő algoritmussal végezhetjük: LL(1)-táblázatot-kitölt(G) 1 for minden A N-re 2 do if A α P az i-edik szabály 3 then for minden a First(α)-ra 4 do T [A, a] (α, i) 5 if ε First(α) 6 then for minden a Follow(A)-ra 7 do T [A, a] (α, i) 8 for minden a T -re 9 do T [a, a] pop 10 T [#, #] elfogad 11 for minden X (N T {#}) és minden a (T {#})-ra 12 do if T [X, a] = üres 13 then T [X, a] hiba 14 return T A 10. sorban a táblázat jobb alsó sorába az elfogad szöveget írjuk, a 8 9. sorokban a terminálisokkal címkézett sorok és oszlopok rész-táblázatának főátlójába a pop szöveget írjuk, az 1 7. sorokban levő algoritmussal a megadott pozícióra a szabály jobb oldalának szimbólumai és a szabály sorszáma kerül. Az algoritmus sorában a táblázat üresen maradt helyeire a szintaktikai hibát jelző hiba szöveget írjuk. Az elemzés működése állapotátmenetekkel adható meg. A kezdőállapot tehát (x#, S#, ε), ha az elemezendő szöveg x, és az elemzés sikeresen befejeződik akkor, ha az elemző a (#, #, w) állapotba, a végállapotba kerül. Ha a még nem elemzett szöveg az ay#, és a verem tetején az X szimbólum áll, az állapotátmenetek a következők: 14

156 (ay#, Xα#, v) (ay#, βα#, vi), (y#, α#, v), O.K., HIBA, ha T [X, a] = (β, i), ha T [X, a] = pop, ha T [X, a] = elfogad, ha T [X, a] = hiba. Az O.K. azt jelenti, hogy az elemzett szimbólumsorozat szintaktikailag helyes, a HIBA pedig egy szintaktikai hiba detektálását jelzi. Az elemző működésére a következő algoritmust adhatjuk meg. LL(1)-elemez(xay#, T ) 1 s (xay#, S#, ε), s elemez 2 repeat 3 if s = (ay#, Aα#, v) és T [A, a] = (β, i) 4 then s (ay#, βα#, vi) 5 else if s = (ay#, aα#, v) 6 then s (y#, α#, v) Ekkor T [a, a] = pop. 7 else if s = (#, #, v) 8 then s O.K. Ekkor T [#, #] = elfogad. 9 else s HIBA Ekkor T [A, a] = hiba. 10 until s = O.K. vagy s = HIBA 11 return s, s Az algoritmus bemenő paramétere az xay elemezendő szöveg és a T elemző táblázat. Az s változó az elemző működését jelzi, működés közben az s értéke elemez, az elemzés befejezésekor O.K. vagy HIBA. Az elemző az elemzett szöveg a aktuális szimbóluma és a verem tetején levő szimbólum alapján a T táblázatból meghatározza az elvégzendő műveletet. A 3 4. sorban a szintaxisfát építi az A β szabály alapján. Az 5 6. sorban léptetés történik, mivel a verem tetején is az a szimbólum található. Az algoritmus a 8 9. sorban az elemzés 15

157 befejezését jelzi, ha a verem kiürült és az elemezendő szöveg végére ért, akkor az elemzett szöveg helyes, egyebként az elemző egy szintaktikai hibát fedezett fel. Az algoritmus végeredménye ennek megfelelően az O.K. vagy HIBA jelzés, és kimenetként mindkét esetben megjelenik az elemző állapotának s hármasa is. Helyes szöveg esetén a hármas harmadik eleméből, v-ből a szabályok sorszámai alapján felépíthető a szintaxisfa, szintaktikai hiba esetén a hármas első elemének első szimbóluma a hiba helyét adja meg. 16

158 Példa. Legyen a G: G = ({E, E, T, T, F }, {+,, (, ), i}, P, E), ahol P : E T E E +T E ε T F T T F T ε F (E) i Az elemző táblázat kitöltéséhez a következő halmazok szükségesek: First(T E ) = {(, i}, First(+T E ) = {+}, First(F T ) = {(, i}, First( F T ) = { }, First((E)) = {(}, First(i) = {i}, Follow(E ) = {), #}, Follow(T ) = {+, ), #}. Az elemző táblázat a következő, a táblázatban az üres helyek a hibát jelentik. + * ( ) i # E (T E, 1) (T E, 1) E (+T E, 2) (ε, 3) (ε, 3) T (F T, 4) (F T, 4) T (ε, 6) ( F T, 5) (ε, 6) (ε, 6) F ((E), 7) (i, 8) + pop * pop ( pop ) pop i pop # elfogad 17

159 Példa. Az előző példában szereplő nyelvtan elemző táblázatának felhasználásával elemezzük az i + i i szöveget. Az elemzés a következő: (i + i i#, E#, ε) (T E,1) ( i + i i#, T E #, 1 ) (F T,4) ( i + i i#, F T E #, 14 ) (i,8) ( i + i i#, it E #, 148 ) pop ( +i i#, T E #, 148 ) (ε,6) ( +i i#, E #, 1486 ) (+T E,2) ( +i i#, +T E #, ) pop ( i i#, T E #, ) (F T,4) ( i i#, F T E #, ) (i,8) ( i i#, it E #, ) pop ( i#, T E #, ) ( F T,5) ( i#, F T E #, ) pop ( i#, F T E #, ) (i,8) ( i#, it E #, ) pop ( #, T E #, ) (ε,6) ( #, E #, ) (ε,3) ( #, #, ) elf ogad O.K. 18

160 T E E F T + T E i ε F T ε i F T i ε A rekurzív leszállás módszere 4. ábra. Az i + i i mondat szintaxisfája. A visszalépés nélküli felülről-lefelé elemzésekre a táblázatos módszeren kívül gyakran alkalmazunk egy olyan módszert, amelynek lényege az, hogy a nyelvtanhoz egy programot rendelünk. A nyelvtan szimbólumaihoz eljárásokat adunk meg, és elemzés közben a rekurzív eljáráshívásokon keresztül a programnyelv implementációja valósítja meg az elemző vermét és a veremkezelést. A felülről-lefelé elemzés és a rekurzív eljáráshívások miatt ezt a módszert a rekurzív leszállás módszerének nevezzük. A terminális szimbólumok vizsgálatára vezessük be az Vizsgáleljárást. Legyen az eljárás paramétere a várt szimbólum, azaz a mondatforma legbaloldalibb, még nem vizsgált terminális szimbóluma, és tartalmazza az aktuális_szimbólum globális változó a vizsgált terminális sorozat soron következő szimbólumát. procedure Vizsgál(a); begin 19

161 if aktuális_szimbólum = a then Következő_szimbólum else Hibajelzés end; A Következő_szimbólum az előreolvasásra szolgál, ez a lexikális elemzőt meghívó eljárás neve. Ez az eljárás a bemenő szimbólumsorozatból meghatározza a következő szimbólumot és ezt az aktuális_szimbólum változóba tölti. A Hibajelzés eljárás szintaktikai hibajelzést ad, és ezután befejezi az elemző program futását. A nyelvtan minden nemterminális szimbólumához rendeljünk hozzá egy eljárást. Az A szimbólumhoz tartozó eljárás legyen a következő: procedure A; begin T(A) end; ahol T(A)-t az A-ra vonatkozó helyettesítési szabályok jobb oldalán álló szimbólumok határozzák meg. Az elemzéshez használt nyelvtanok redukáltak, ami többek között azt jelenti, hogy nincs bennük felesleges nemterminális szimbólum, minden nemterminális szimbólum szerepel legalább egy helyettesítési szabály bal oldalán. Tehát ha az A szimbólumot vizsgáljuk, biztosan van legalább egy A α helyettesítési szabály. 1. Ha az A szimbólumra csak egy helyettesítési szabály van: (a) az A a szabályhoz rendelt program legyen a Vizsgál(a), (b) az A B szabályhoz rendeljük hozzá a B eljáráshívást, 20

162 (c) az A X 1 X 2... X n (n 2) szabályhoz tartozzon a következő blokk: begin T(X_1); T(X_2);... T(X_n) end; 2. Ha az A szimbólumra több helyettesítési szabály van: (a) Ha az A α 1 α 2... α n szabályok ε-mentesek, azaz α i -ből (1 i n) nem vezethető le az ε, akkor T(A) legyen case aktuális_szimbólum of First(alpha_1) : T(alpha_1); First(alpha_2) : T(alpha_2);... First(alpha_n) : T(alpha_n) end; ahol First(alpha_i) az First(α i ) programbeli jelölése. Felhívjuk a figyelmet arra, hogy a rekurzív leszállás módszerében most először használjuk ki azt, hogy a nyelvtan LL(1)-es. (b) Az LL(1) nyelvtan programnyelvet ír le, ezért a nyelvtan ε-mentességét nem célszerű megkövetelni. Az A α 1 α 2... α n 1 ε szabályokhoz a következő T(A) programot rendeljük: case aktuális_szimbólum of First(alpha_1) : T(alpha_1); First(alpha_2) : T(alpha_2);... First(alpha_(n-1)) : T(alpha_(n-1)); Follow(A) : skip end; 21

163 ahol Follow(A) a Follow(A)-nak felel meg. Speciálisan, ha az A α 1 α 2... α n szabály esetén egy i-re (1 i n) α i = ε, azaz ε First(α i ), akkor a case utasítás i-edik sora lesz a Follow(A) : skip sor. A T(A)-ban a case helyett, ha lehetséges, használhatunk if-then-else vagy while utasítást is. A rekurzív leszállás módszerével készített elemző program kezdő eljárása, azaz főprogramja a nyelvtan kezdőszimbólumához írt eljárás lesz. A rekurzív leszállás módszerével működő elemző programot a következő Rekleszáll-készít algoritmussal hozhatjuk létre. Az algoritmus bemenete a G nyelvtan, és az algoritmus eredményül az elemző P programját adja. Az algoritmusban használunk egy Programot-ír eljárást, ami az argumentumában megadott programsorokat a már meglévő P programhoz fűzi. Ezt az algoritmust nem részletezzük. 22

164 Rek-leszáll-készít(G) 1 P 2 Programot-ír( 3 procedure Vizsgál(a); 4 begin 5 if aktuális_szimbólum = a 6 then Következő_szimbólum 7 else Hibajelzés 8 end; 9 ) 10 for a G nyelvtan minden A N szimbólumára 11 do if A = S 12 then Programot-ír( 13 program S; 14 begin 15 Rek-leszáll-ut(S, P ) 16 end. 17 ) 18 else Programot-ír( 19 procedure A; 20 begin 21 Rek-leszáll-ut(A, P ) 22 end; 23 ) 24 return P Az algoritmus a 2 9. sorokban elkészíti a Vizsgál eljárást, majd a bemeneteként megadott G nyelvtan minden nemterminális szimbólumára a Rek-leszáll-ut 23

165 algoritmus felhasználásával készíti a szimbólumhoz tartozó eljárást. A sorokban látható, hogy a nyelvtan kezdőszimbólumához az elemző főprogramja fog tartozni. Az algoritmus kimenete az elemző program lesz. Rek-leszáll-ut(A, P ) 1 if csak egy A α szabály van 2 then Rek-leszáll-ut1(α, P ) A α. 3 else Rek-leszáll-ut2(A, (α 1,..., α n ), P ) A α 1 α n. 4 return P Mivel a létrehozandó elemző program utasításai lényegesen függnek attól, hogy az A nemterminális szimbólumra a nyelvtanban hány helyettesítési szabály van, a Rek-leszáll-ut algoritmus a további műveleteket két részre osztja. A Rek-leszáll-ut1 algoritmus foglalkozik azzal az esettel, amikor csak egy helyettesítési szabály van, és a Rek-leszáll-ut2 készíti az alternatívákra vonatkozó elemző programot. 24

166 Rek-leszáll-ut1(α, P ) 1 if α = a 2 then Programot-ír( 3 Vizsgál(a) 4 ) 5 if α = B 6 then Programot-ír( 7 B 8 ) 9 if α = X 1 X 2... X n (n 2) 10 then Programot-ír( 11 begin 12 Rek-leszáll-ut1(X 1, P ) ; 13 Rek-leszáll-ut1(X 2, P ) ; Rek-leszáll-ut1(X n, P ) 16 end; 17 return P 25

167 Rek-leszáll-ut2(A, (α 1,..., α n ), P ) 1 if α 1,..., α n szabályok ε-mentesek 2 then Programot-ír( 3 case aktuális_szimbólum of 4 First(alpha_1) : Rek-leszáll-ut1(α 1, P ) ; First(alpha_n) : Rek-leszáll-ut1(α n, P ) 7 end; 8 ) 9 if van ε-szabály, α i = ε (1 i n) 10 then Programot-ír( 11 case aktuális_szimbólum of 12 First(alpha_1) : Rek-leszáll-ut1(α 1, P ) ; First(alpha_(i-1)) : Rek-leszáll-ut1(α i 1, P ) ; 15 Follow(A) : skip; 16 First(alpha_(i+1)) : Rek-leszáll-ut1(α i+1, P ) ; First(alpha_n) : Rek-leszáll-ut1(α 1, P ) 19 end; 20 ) 21 return P A fenti két algoritmus a korábban már részletesen leírt programot hozza létre. Az elemezendő szöveg végének az ellenőrzése a rekurzív leszállás módszerével úgy valósítható meg, hogy a szöveg végét jelző # szimbólumot beépítjük egy új helyettesítési szabályba. Ha a nyelvtan kezdőszimbóluma S, akkor létrehozunk egy S S# szabályt, és az új S lesz az új nyelvtan kezdőszimbóluma. A 26

168 # szimbólumot terminális szimbólumnak tekintjük. Az így kibővített nyelvtanra készítjük el a rekurzív leszállás elemző programját. Példa. A példában szereplő nyelvtant egészítsük ki a fenti módon. A szabályok tehát a következők. S E# E T E E +T E ε T F T T F T ε F (E) i A példában megadtuk a táblázatos elemző létrehozásához szükséges First és Follow halmazokat. Ezek közül most a következőkre van szükség: First(+T E ) = {+}, First( F T ) = { }, First((E)) = {(}, First(i) = {i}, Follow(E ) = {), #}, Follow(T ) = {+, ), #}. A halmazok felhasználásának helyét a program sorainak kommentjeiben adjuk meg, a kommenteket a -- karakterpárral kezdjük. A rekurzív leszállás módszerének elemző programja a következő lesz. program S ; begin E; Vizsgál(#) end. procedure E; begin 27

169 T; E end; procedure E ; begin case aktuális_szimbólum of + : begin -- First(+TE ) Vizsgál(+); T; E end; ),# : skip -- Follow(E ) end end; procedure T; begin F; T end; procedure T ; begin case aktuális_szimbólum of * : begin -- First(*FT ) Vizsgál(*); F; T end; +,),# : skip -- Follow(T ) end end; procedure F; 28

170 begin case aktuális_szimbólum of ( : begin -- First((E)) Vizsgál((); E; Vizsgál()) end; i : Vizsgál(i) -- First(i) end end; Látható, hogy az elemző főprogramja a nyelvtan S kezdőszimbólumához tartozó eljárás lett. 29

171 A FIRST és FOLLOW relációk meghatározása mátrixokkal (Csörnyei Zoltán: Fordítóprogramok, Typotex Kiadó Bp., 2006) 1

172 2

Chomsky-féle hierarchia

Chomsky-féle hierarchia http://www.cs.ubbcluj.ro/~kasa/formalis.html Chomsky-féle hierarchia G = (N, T, P, S) nyelvtan: 0-s típusú (általános vagy mondatszerkezet ), ha semmilyen megkötést nem teszünk a helyettesítési szabályaira.

Részletesebben

Chomsky-féle hierarchia

Chomsky-féle hierarchia http://www.ms.sapientia.ro/ kasa/formalis.htm Chomsky-féle hierarchia G = (N, T, P, S) nyelvtan: 0-s típusú (általános vagy mondatszerkezetű), ha semmilyen megkötést nem teszünk a helyettesítési szabályaira.

Részletesebben

http://www.ms.sapientia.ro/~kasa/formalis.htm

http://www.ms.sapientia.ro/~kasa/formalis.htm Formális nyelvek és fordítóprogramok http://www.ms.sapientia.ro/~kasa/formalis.htm Könyvészet 1. Csörnyei Zoltán, Kása Zoltán, Formális nyelvek és fordítóprogramok, Kolozsvári Egyetemi Kiadó, 2007. 2.

Részletesebben

akonyv 2006/12/18 11:53 page i #1 Formális nyelvek és fordítóprogramok

akonyv 2006/12/18 11:53 page i #1 Formális nyelvek és fordítóprogramok akonyv 2006/12/18 11:53 page i #1 Csörnyei Zoltán Kása Zoltán Formális nyelvek és fordítóprogramok akonyv 2006/12/18 11:53 page ii #2 akonyv 2006/12/18 11:53 page iii #3 Csörnyei Zoltán Kása Zoltán FORMÁLIS

Részletesebben

Automaták és formális nyelvek

Automaták és formális nyelvek Automaták és formális nyelvek Bevezetés a számítástudomány alapjaiba 1. Formális nyelvek 2006.11.13. 1 Automaták és formális nyelvek - bevezetés Automaták elmélete: információs gépek általános absztrakt

Részletesebben

A Formális nyelvek vizsga teljesítése. a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon:

A Formális nyelvek vizsga teljesítése. a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon: A Formális nyelvek vizsga teljesítése a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon: 1. Öt rövid kérdés megválaszolása egyenként 6 pontért, melyet minimum

Részletesebben

FORMÁLIS NYELVEK ÉS FORDÍTÓPROGRAMOK. LABORGYAKORLATOK

FORMÁLIS NYELVEK ÉS FORDÍTÓPROGRAMOK. LABORGYAKORLATOK FORMÁLIS NYELVEK ÉS FORDÍTÓPROGRAMOK LABORGYAKORLATOK http://www.ms.sapientia.ro/~kasa/formalis.htm 0 Formális nyelvek és fordítóprogramok http://www.ms.sapientia.ro/~kasa/formalis.htm Jelenlét kötelezõ!

Részletesebben

A Formális nyelvek vizsga teljesítése. a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon:

A Formális nyelvek vizsga teljesítése. a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon: A Formális nyelvek vizsga teljesítése a) Normál A vizsgán 60 pont szerezhet, amely két 30 pontos részb l áll össze az alábbi módon: 1. Öt kis kérdés megválaszolása egyenként 6 pontért, melyet minimum 12

Részletesebben

ZH feladatok megoldásai

ZH feladatok megoldásai ZH feladatok megoldásai A CSOPORT 5. Írja le, hogy milyen szabályokat tartalmazhatnak az egyes Chomskynyelvosztályok (03 típusú nyelvek)! (4 pont) 3. típusú, vagy reguláris nyelvek szabályai A ab, A a

Részletesebben

A digitális számítás elmélete

A digitális számítás elmélete A digitális számítás elmélete 8. előadás ápr. 16. Turing gépek és nyelvtanok A nyelvosztályok áttekintése Turing gépek és a természetes számokon értelmezett függvények Áttekintés Dominó Bizonyítások: L

Részletesebben

Házi feladatok megoldása. Nyelvek felismerése. Házi feladatok megoldása. Házi feladatok megoldása. Formális nyelvek, 5. gyakorlat

Házi feladatok megoldása. Nyelvek felismerése. Házi feladatok megoldása. Házi feladatok megoldása. Formális nyelvek, 5. gyakorlat Házi feladatok megoldása Nyelvek felismerése Formális nyelvek, 5. gyakorlat 1. feladat Adjunk a következő nyelvet generáló 3. típusú nyelvtant! Azon M-áris számrendszerbeli számok, melyek d-vel osztva

Részletesebben

Formális Nyelvek - 1. Előadás

Formális Nyelvek - 1. Előadás Formális Nyelvek - 1. Előadás Csuhaj Varjú Erzsébet Algoritmusok és Alkalmazásaik Tanszék Informatikai Kar Eötvös Loránd Tudományegyetem H-1117 Budapest Pázmány Péter sétány 1/c E-mail: csuhaj@inf.elte.hu

Részletesebben

A számítógépes nyelvészet elmélete és gyakorlata. Formális nyelvek elmélete

A számítógépes nyelvészet elmélete és gyakorlata. Formális nyelvek elmélete A számítógépes nyelvészet elmélete és gyakorlata Formális nyelvek elmélete Nyelv Nyelvnek tekintem a mondatok valamely (véges vagy végtelen) halmazát; minden egyes mondat véges hosszúságú, és elemek véges

Részletesebben

6. előadás A reguláris nyelvek jellemzése 2.

6. előadás A reguláris nyelvek jellemzése 2. 6. előadás A reguláris nyelvek jellemzése 2. Dr. Kallós Gábor 2014 2015 1 Tartalom A reguláris nyelvek osztályának jellemzése a körbebizonyítás Láncszabályok A 2. állítás és igazolása Ekvivalens 3-típusú

Részletesebben

Házi feladatok megoldása. Nyelvtani transzformációk. Házi feladatok megoldása. Házi feladatok megoldása. Formális nyelvek, 6. gyakorlat.

Házi feladatok megoldása. Nyelvtani transzformációk. Házi feladatok megoldása. Házi feladatok megoldása. Formális nyelvek, 6. gyakorlat. Nyelvtani transzformációk Formális nyelvek, 6. gyakorlat a. S (S) SS ε b. S XS ε és X (S) c. S (SS ) Megoldás: Célja: A nyelvtani transzformációk bemutatása Fogalmak: Megszorított típusok, normálformák,

Részletesebben

Automaták mint elfogadók (akceptorok)

Automaták mint elfogadók (akceptorok) Automaták mint elfogadók (akceptorok) Ha egy iniciális Moore-automatában a kimenőjelek halmaza csupán kételemű: {elfogadom, nem fogadom el}, és az utolsó kimenőjel dönti el azt a kérdést, hogy elfogadható-e

Részletesebben

Formális nyelvek - 5.

Formális nyelvek - 5. Formális nyelvek - 5. Csuhaj Varjú Erzsébet Algoritmusok és Alkalmazásaik Tanszék Informatikai Kar Eötvös Loránd Tudományegyetem H-1117 Budapest Pázmány Péter sétány 1/c E-mail: csuhaj@inf.elte.hu 1 Lineáris

Részletesebben

Formális nyelvek - 9.

Formális nyelvek - 9. Formális nyelvek - 9. Csuhaj Varjú Erzsébet Algoritmusok és Alkalmazásaik Tanszék Informatikai Kar Eötvös Loránd Tudományegyetem H-1117 Budapest Pázmány Péter sétány 1/c E-mail: csuhaj@inf.elte.hu 1 Véges

Részletesebben

A számítógépes nyelvészet elmélete és gyakorlata. Automaták

A számítógépes nyelvészet elmélete és gyakorlata. Automaták A számítógépes nyelvészet elmélete és gyakorlata Automaták Nyelvek és automaták A nyelvek automatákkal is jellemezhetőek Automaták hierarchiája Chomsky-féle hierarchia Automata: új eszköz a nyelvek komplexitásának

Részletesebben

A Turing-gép. Formális nyelvek III.

A Turing-gép. Formális nyelvek III. Formális nyelvek III. Általános és környezetfüggő nyelvek Fülöp Zoltán SZTE TTIK Informatikai Intézet Számítástudomány Alapjai Tanszék 6720 Szeged, Árpád tér 2. Definíció. Egy Turing-gép egy M = (Q,Σ,Γ,

Részletesebben

6. előadás A reguláris nyelvek jellemzése 2.

6. előadás A reguláris nyelvek jellemzése 2. 6. előadás A reguláris nyelvek jellemzése 2. Dr. Kallós Gábor 2015 2016 1 Tartalom A reguláris nyelvek osztályának jellemzése a körbebizonyítás Láncszabályok A 2. állítás és igazolása Ekvivalens 3-típusú

Részletesebben

Számításelmélet. Második előadás

Számításelmélet. Második előadás Számításelmélet Második előadás Többszalagos Turing-gép Turing-gép k (konstans) számú szalaggal A szalagok mindegyike rendelkezik egy független író / olvasó fejjel A bemenet az első szalagra kerül, a többi

Részletesebben

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé.

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé. HA 1 Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé. (Albert Einstein) HA 2 Halmazok HA 3 Megjegyzések A halmaz, az elem és az eleme fogalmakat nem definiáljuk, hanem alapfogalmaknak

Részletesebben

Feladatok. 6. A CYK algoritmus segítségével döntsük el, hogy aabbcc eleme-e a G = {a, b, c}, {S, A, B, C}, P, S nyelvtan által generált nyelvnek!

Feladatok. 6. A CYK algoritmus segítségével döntsük el, hogy aabbcc eleme-e a G = {a, b, c}, {S, A, B, C}, P, S nyelvtan által generált nyelvnek! Feladatok 1. A CYK algoritmus segítségével döntsük el, hogy cabcab eleme-e a G = {a, b, c}, {S, A, B, C, D, E}, P, S nyelvtan által generált nyelvnek! P: S AD EB SS A AB a B DD b C CB c D EC a E AD b 2.

Részletesebben

Deníciók és tételek a beugró vizsgára

Deníciók és tételek a beugró vizsgára Deníciók és tételek a beugró vizsgára (a szóbeli viszgázás jogáért) Utolsó módosítás: 2008. december 2. 2 Bevezetés Számítási problémának nevezünk egy olyan, a matematika nyelvén megfogalmazott kérdést,

Részletesebben

A SZÁMÍTÁSTUDOMÁNY ALAPJAI

A SZÁMÍTÁSTUDOMÁNY ALAPJAI Írta: ÉSIK ZOLTÁN A SZÁMÍTÁSTUDOMÁNY ALAPJAI Egyetemi tananyag 2011 COPYRIGHT: 2011 2016, Dr. Ésik Zoltán, Szegedi Tudományegyetem Természettudományi és Informatikai Kar Számítástudomány Alapjai Tanszék

Részletesebben

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé. (Albert Einstein) Halmazok 1

Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé. (Albert Einstein) Halmazok 1 Halmazok 1 Mindent olyan egyszerűvé kell tenni, amennyire csak lehet, de nem egyszerűbbé. (Albert Einstein) Halmazok 2 A fejezet legfontosabb elemei Halmaz megadási módjai Halmazok közti műveletek (metszet,

Részletesebben

Algoritmusok bonyolultsága

Algoritmusok bonyolultsága Algoritmusok bonyolultsága 11. előadás http://www.ms.sapientia.ro/~kasa/komplex.htm () 1 / 1 NP-telesség Egy L nyelv NP-teles, ha L NP és minden L NP-re L L. Egy Π döntési feladat NP-teles, ha Π NP és

Részletesebben

Véges automaták, reguláris nyelvek

Véges automaták, reguláris nyelvek Véges automaták, reguláris nyelvek Kiegészítő anyag az lgoritmuselmélet tárgyhoz (a Rónyai Ivanyos Szabó: lgoritmusok könyv mellé) Friedl Katalin BME SZIT friedl@cs.bme.hu 27. augusztus 3. véges automata

Részletesebben

Formális nyelvek és automaták

Formális nyelvek és automaták Formális nyelvek és automaták Nagy Sára gyakorlatai alapján Készítette: Nagy Krisztián 2. gyakorlat Ismétlés: Megjegyzés: Az ismétlés egy része nem szerepel a dokumentumban, mivel lényegében a teljes 1.

Részletesebben

1. előadás: Halmazelmélet, számfogalom, teljes

1. előadás: Halmazelmélet, számfogalom, teljes 1. előadás: Halmazelmélet, számfogalom, teljes indukció Szabó Szilárd Halmazok Halmaz: alapfogalom, bizonyos elemek (matematikai objektumok) összessége. Egy halmaz akkor adott, ha minden objektumról eldönthető,

Részletesebben

5. előadás Reguláris kifejezések, a reguláris nyelvek jellemzése 1.

5. előadás Reguláris kifejezések, a reguláris nyelvek jellemzése 1. 5. előadás Reguláris kifejezések, a reguláris nyelvek jellemzése 1. Dr. Kallós Gábor 2014 2015 1 Tartalom Reguláris kifejezések Meghatározás, tulajdonságok Kapcsolat a reguláris nyelvekkel A reguláris

Részletesebben

Alap fatranszformátorok II

Alap fatranszformátorok II Alap fatranszformátorok II Vágvölgyi Sándor Fülöp Zoltán és Vágvölgyi Sándor [2, 3] közös eredményeit ismertetjük. Fogalmak, jelölések A Σ feletti alaptermek TA = (T Σ, Σ) Σ algebráját tekintjük. Minden

Részletesebben

A digitális számítás elmélete

A digitális számítás elmélete A digitális számítás elmélete 1. előadás szept. 19. Determinisztikus véges automaták 1. Példa: Fotocellás ajtó m m m k b s = mindkét helyen = kint = bent = sehol k k b s m csukva b nyitva csukva nyitva

Részletesebben

Diszkrét matematika 2. estis képzés

Diszkrét matematika 2. estis képzés Diszkrét matematika 2. estis képzés 2018. tavasz 1. Diszkrét matematika 2. estis képzés 4-6. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék

Részletesebben

Formális nyelvek előadások tavaszi félév

Formális nyelvek előadások tavaszi félév Formális nyelvek előadások 2018. tavaszi félév Követelmények Az aláírást mindenki megkapja ajándékba. A vizsga két részből áll, írásbeli és szóbeli vizsgából. Az írásbeli elégséges szintű teljesítése esetén

Részletesebben

Atomataelmélet: A Rabin Scott-automata

Atomataelmélet: A Rabin Scott-automata A 19. óra vázlata: Atomataelmélet: A Rabin Scott-automata Az eddigieken a formális nyelveket generatív szempontból vizsgáltuk, vagyis a nyelvtan (generatív grammatika) szemszögéből. A generatív grammatika

Részletesebben

LIMBAJE FORMALE ȘI COMPILATOARE Lucrări de laborator FORMÁLIS NYELVEK ÉS FORDÍTÓPROGRAMOK

LIMBAJE FORMALE ȘI COMPILATOARE Lucrări de laborator FORMÁLIS NYELVEK ÉS FORDÍTÓPROGRAMOK LIMBAJE FORMALE ȘI COMPILATOARE Lucrări de laborator FORMÁLIS NYELVEK ÉS FORDÍTÓPROGRAMOK LABORGYAKORLATOK http://www.ms.sapientia.ro/~kasa/formalis.htm Nyomtatott változat Kása Zoltán 0 Formális nyelvek

Részletesebben

KOVÁCS BÉLA, MATEMATIKA I.

KOVÁCS BÉLA, MATEMATIKA I. KOVÁCS BÉLA, MATEmATIkA I. 4 IV. FÜGGVÉNYEk 1. LEkÉPEZÉSEk, függvények Definíció Legyen és két halmaz. Egy függvény -ből -ba egy olyan szabály, amely minden elemhez pontosan egy elemet rendel hozzá. Az

Részletesebben

Formális nyelvek és automaták előadások

Formális nyelvek és automaták előadások VÁRTERÉSZ MAGDA Formális nyelvek és automaták előadások 2005/06-os tanév 1. félév Tartalomjegyzék 1. Előzetes tudnivalók 4 2. Bevezetés 15 3. Ábécé, szó, formális nyelv 17 4. Műveletek nyelvekkel 24 4.1.

Részletesebben

Formális Nyelvek - 1.

Formális Nyelvek - 1. Formális Nyelvek - 1. Csuhaj Varjú Erzsébet Algoritmusok és Alkalmazásaik Tanszék Informatikai Kar Eötvös Loránd Tudományegyetem H-1117 Budapest Pázmány Péter sétány 1/c E-mail: csuhaj@inf.elte.hu 1 A

Részletesebben

7. előadás Környezetfüggetlen nyelvtanok

7. előadás Környezetfüggetlen nyelvtanok 7. előadás dr. Kallós Gábor 2017 2018 Tartalom Bevezető Deriváció Előállított szó és nyelv Levezetési sorozat Reguláris nyelvtanok Reguláris nyelvekre vonatkozó 2. ekvivalencia tétel Konstrukciók (NVA

Részletesebben

1. tétel Halmazok és halmazok számossága. Halmazműveletek és logikai műveletek kapcsolata.

1. tétel Halmazok és halmazok számossága. Halmazműveletek és logikai műveletek kapcsolata. 1. tétel Halmazok és halmazok számossága. Halmazműveletek és logikai műveletek kapcsolata. HLMZOK halmaz axiomatikus fogalom, nincs definíciója. benne van valami a halmazban szintén axiomatikus fogalom,

Részletesebben

Házi feladatok megoldása. Nyelvek használata adatszerkezetek, képek leírására

Házi feladatok megoldása. Nyelvek használata adatszerkezetek, képek leírására Nyelvek használata adatszerkezetek, képek leírására Formális nyelvek, 2. gyakorlat 1. feladat Módosított : belsejében lehet _ jel is. Kezdődhet, de nem végződhet vele, két aláhúzás nem lehet egymás mellett.

Részletesebben

ALGEBRAI NYELV- ÉS KÓDELMÉLET. Babcsányi István

ALGEBRAI NYELV- ÉS KÓDELMÉLET. Babcsányi István ALGEBRAI NYELV- ÉS KÓDELMÉLET Babcsányi István 2013 Tartalomjegyzék ELŐSZÓ................................. 5 I. NYELVEK 7 1. Nyelvek algebrája 9 1.1. Műveletek nyelvekkel........................ 9 1.2.

Részletesebben

Formális nyelvek és automaták vizsgához statisztikailag igazolt várható vizsgakérdések

Formális nyelvek és automaták vizsgához statisztikailag igazolt várható vizsgakérdések 1. Feladat Az első feladatban szereplő - kérdések 1 Minden környezet független nyelv felismerhető veremautomatával. Minden környezet független nyelv felismerhető 1 veremmel. Minden 3. típusú nyelv felismerhető

Részletesebben

Formális nyelvek és gépek (definíciós és tétel lista - 09/10/2)

Formális nyelvek és gépek (definíciós és tétel lista - 09/10/2) 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

Részletesebben

NEM-DETERMINISZTIKUS PROGRAMOK HELYESSÉGE. Szekvenciális programok kategóriái. Hoare-Dijkstra-Gries módszere

NEM-DETERMINISZTIKUS PROGRAMOK HELYESSÉGE. Szekvenciális programok kategóriái. Hoare-Dijkstra-Gries módszere Szekvenciális programok kategóriái strukturálatlan strukturált NEM-DETERMINISZTIKUS PROGRAMOK HELYESSÉGE Hoare-Dijkstra-Gries módszere determinisztikus valódi korai nem-determinisztikus általános fejlett

Részletesebben

Felismerhető nyelvek zártsági tulajdonságai II... slide #30. Véges nemdeterminisztikus automata... slide #21

Felismerhető nyelvek zártsági tulajdonságai II... slide #30. Véges nemdeterminisztikus automata... slide #21 A számítástudomány alapjai Ésik Zoltán SZTE, Számítástudomány Alapjai Tanszék Bevezetes Bevezetés.................................................... slide #2 Automaták és formális nyelvek Szavak és nyelvek...............................................

Részletesebben

definiálunk. Legyen egy konfiguráció, ahol és. A következő három esetet különböztetjük meg. 1. Ha, akkor 2. Ha, akkor, ahol, ha, és egyébként.

definiálunk. Legyen egy konfiguráció, ahol és. A következő három esetet különböztetjük meg. 1. Ha, akkor 2. Ha, akkor, ahol, ha, és egyébként. Számításelmélet Kiszámítási problémának nevezünk egy olyan, a matematika nyelvén megfogalmazott kérdést, amire számítógéppel szeretnénk megadni a választ. (A matematika nyelvén precízen megfogalmazott

Részletesebben

Logika és számításelmélet. 10. előadás

Logika és számításelmélet. 10. előadás Logika és számításelmélet 10. előadás Rice tétel Rekurzíve felsorolható nyelvek tulajdonságai Tetszőleges P RE halmazt a rekurzívan felsorolható nyelvek egy tulajdonságának nevezzük. P triviális, ha P

Részletesebben

Permutációk véges halmazon (el adásvázlat, február 12.)

Permutációk véges halmazon (el adásvázlat, február 12.) Permutációk véges halmazon el adásvázlat 2008 február 12 Maróti Miklós Ennek az el adásnak a megértéséhez a következ fogalmakat kell tudni: ismétlés nélküli variáció leképezés indulási és érkezési halmaz

Részletesebben

9. előadás Veremautomaták 1.

9. előadás Veremautomaták 1. 9. előadás 1. Dr. Kallós Gábor 2014 2015 1 Tartalom Motiváció Verem és végtelen automata Felépítés, konfigurációk és átmenetek Szavak felismerése, felismert nyelv Az elfogadó állapottal és az üres veremmel

Részletesebben

Teljes visszalépéses elemzés

Teljes visszalépéses elemzés Teljes visszalépéses elemzés adott a következő nyelvtan S» aad a A» b c elemezzük a következő szöveget: accd» ccd ddc S S a A d a A b c d a c c d a c c d Teljes visszalépéses elemzés adott a következő

Részletesebben

9. előadás Környezetfüggetlen nyelvek

9. előadás Környezetfüggetlen nyelvek 9. előadás Környezetfüggetlen nyelvek Dr. Kallós Gábor 2015 2016 1 Tartalom Bevezetés CF nyelv példák Nyelvek és nyelvtanok egy- és többértelműsége Bal- és jobboldali levezetések A fák magassága és határa

Részletesebben

Relációk Függvények. A diákon megjelenő szövegek és képek csak a szerző (Kocsis Imre, DE MFK) engedélyével használhatók fel!

Relációk Függvények. A diákon megjelenő szövegek és képek csak a szerző (Kocsis Imre, DE MFK) engedélyével használhatók fel! függvények RE 1 Relációk Függvények függvények RE 2 Definíció Ha A, B és ρ A B, akkor azt mondjuk, hogy ρ reláció A és B között, vagy azt, hogy ρ leképezés A-ból B-be. Ha speciálisan A=B, azaz ρ A A, akkor

Részletesebben

Dicsőségtabló Beadós programozási feladatok

Dicsőségtabló Beadós programozási feladatok Dicsőségtabló Beadós programozási feladatok Hallgatói munkák 2017 2018 Szavak kiírása ábécé felett Készítő: Maurer Márton (GI, nappali, 2017) Elméleti háttér Adott véges Ʃ ábécé felett megszámlálhatóan

Részletesebben

Feladatok: 1. Add meg a következ balreguláris nyelvtannak megfelel jobbreguláris nyelvtant!

Feladatok: 1. Add meg a következ balreguláris nyelvtannak megfelel jobbreguláris nyelvtant! Feladatok: 1. Add meg a következ balreguláris nyelvtannak megfelel jobbreguláris nyelvtant! Megoldás: S b A a Ezzel a feladattal az volt a gondom, hogy a könyvben tanultak alapján elkezdtem levezetni,

Részletesebben

Itt és a továbbiakban a számhalmazokra az alábbi jelöléseket használjuk:

Itt és a továbbiakban a számhalmazokra az alábbi jelöléseket használjuk: 1. Halmazok, relációk, függvények 1.A. Halmazok A halmaz bizonyos jól meghatározott dolgok (tárgyak, fogalmak), a halmaz elemeinek az összessége. Azt, hogy az a elem hozzátartozik az A halmazhoz így jelöljük:

Részletesebben

Halmazelméleti alapfogalmak

Halmazelméleti alapfogalmak Halmazelméleti alapfogalmak halmaz (sokaság) jól meghatározott, megkülönböztetett dolgok (tárgyak, fogalmak, stb.) összessége. - halmaz alapfogalom. z azt jelenti, hogy csak példákon keresztül magyarázzuk,

Részletesebben

A Számítástudomány alapjai

A Számítástudomány alapjai Mechatronika, Optika és Gépészeti Informatika Tanszék A Számítástudomány alapjai Szemelvények az Elméleti Számítástudomány területéről Fogalmak: Számítástechnika Realizáció, technológia Elméleti számítástudomány

Részletesebben

Vektorgeometria (1) First Prev Next Last Go Back Full Screen Close Quit

Vektorgeometria (1) First Prev Next Last Go Back Full Screen Close Quit Vektorgeometria (1) First Prev Next Last Go Back Full Screen Close Quit 1. A térbeli irányított szakaszokat vektoroknak hívjuk. Két vektort egyenlőnek tekintünk, ha párhuzamos eltolással fedésbe hozhatók.

Részletesebben

1 2. gyakorlat Matematikai és nyelvi alapfogalmak. dr. Kallós Gábor

1 2. gyakorlat Matematikai és nyelvi alapfogalmak. dr. Kallós Gábor 1 2. gyakorlat Matematikai és nyelvi alapfogalmak dr. Kallós Gábor 2017 2018 Köszönetnyilvánítás Köszönetnyilvánítás (Acknowledgement) Ez a gyakorlati feladatsor nagyban épít a következő könyvre Elements

Részletesebben

Algoritmuselmélet 12. előadás

Algoritmuselmélet 12. előadás Algoritmuselmélet 12. előadás Katona Gyula Y. Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b kiskat@cs.bme.hu 2002 Április 9. ALGORITMUSELMÉLET 12. ELŐADÁS 1 Turing-gépek

Részletesebben

Az R halmazt a valós számok halmazának nevezzük, ha teljesíti az alábbi 3 axiómacsoport axiómáit.

Az R halmazt a valós számok halmazának nevezzük, ha teljesíti az alábbi 3 axiómacsoport axiómáit. 2. A VALÓS SZÁMOK 2.1 A valós számok aximómarendszere Az R halmazt a valós számok halmazának nevezzük, ha teljesíti az alábbi 3 axiómacsoport axiómáit. 1.Testaxiómák R-ben két művelet van értelmezve, az

Részletesebben

MintaFeladatok 2.ZH Megoldások

MintaFeladatok 2.ZH Megoldások Kérem e-mail-ben jelezze, ha hibát talál: (veanna@inf.elte.hu, vagy veanna@elte.hu ) 1. feladat megoldása a b 1 2 3 2 4 2 3 2 1 4 6 3 5 10 6 6 8 7 7 9 7 8 8 9 9 8 8 10 5 1 I. Összefüggőség vizsgálat. H0={1}

Részletesebben

Turing-gépek. Számításelmélet (7. gyakorlat) Turing-gépek 2009/10 II. félév 1 / 1

Turing-gépek. Számításelmélet (7. gyakorlat) Turing-gépek 2009/10 II. félév 1 / 1 Turing-gépek Logika és számításelmélet, 7. gyakorlat 2009/10 II. félév Számításelmélet (7. gyakorlat) Turing-gépek 2009/10 II. félév 1 / 1 A Turing-gép Az algoritmus fogalmának egy intuitív definíciója:

Részletesebben

Gráfelmélet. I. Előadás jegyzet (2010.szeptember 9.) 1.A gráf fogalma

Gráfelmélet. I. Előadás jegyzet (2010.szeptember 9.) 1.A gráf fogalma Készítette: Laczik Sándor János Gráfelmélet I. Előadás jegyzet (2010.szeptember 9.) 1.A gráf fogalma Definíció: a G=(V,E) párt egyszerű gráfnak nevezzük, (V elemeit a gráf csúcsainak/pontjainak,e elemeit

Részletesebben

Nagy Gábor compalg.inf.elte.hu/ nagy

Nagy Gábor  compalg.inf.elte.hu/ nagy Diszkrét matematika 3. estis képzés 2018. ősz 1. Diszkrét matematika 3. estis képzés 2. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék

Részletesebben

HALMAZELMÉLET feladatsor 1.

HALMAZELMÉLET feladatsor 1. HALMAZELMÉLET feladatsor 1. Egy (H,, ) algebrai struktúra háló, ha (H, ) és (H, ) kommutatív félcsoport, és teljesül az ún. elnyelési tulajdonság: A, B H: A (A B) = A, A (A B) = A. A (H,, ) háló korlátos,

Részletesebben

RE 1. Relációk Függvények. A diákon megjelenő szövegek és képek csak a szerző (Kocsis Imre, DE MFK) engedélyével használhatók fel!

RE 1. Relációk Függvények. A diákon megjelenő szövegek és képek csak a szerző (Kocsis Imre, DE MFK) engedélyével használhatók fel! RE 1 Relációk Függvények RE 2 Definíció: Ha A, B és ρ A B, akkor azt mondjuk, hogy ρ reláció A és B között, vagy azt, hogy ρ leképezés A-ból B-be. Ha speciálisan A=B, azaz ρ A A, akkor azt mondjuk, hogy

Részletesebben

MintaFeladatok 1.ZH Megoldások

MintaFeladatok 1.ZH Megoldások Kérem e-mail-ben jelezze, ha hibát talál: (veanna@inf.elte.hu, vagy veanna@elte.hu ) 1. feladat L1 = {ab,ba,b} L2=b*ab* L3 = {a, bb, aba} L1L3 = {aba, abbb, ababa, baa, babb, baaba, ba, bbb, baba} (ab

Részletesebben

A továbbiakban Y = {0, 1}, azaz minden szóhoz egy bináris sorozatot rendelünk

A továbbiakban Y = {0, 1}, azaz minden szóhoz egy bináris sorozatot rendelünk 1. Kódelmélet Legyen X = {x 1,..., x n } egy véges, nemüres halmaz. X-et ábécének, elemeit betűknek hívjuk. Az X elemeiből képzett v = y 1... y m sorozatokat X feletti szavaknak nevezzük; egy szó hosszán

Részletesebben

Segédanyagok. Formális nyelvek a gyakorlatban. Szintaktikai helyesség. Fordítóprogramok. Formális nyelvek, 1. gyakorlat

Segédanyagok. Formális nyelvek a gyakorlatban. Szintaktikai helyesség. Fordítóprogramok. Formális nyelvek, 1. gyakorlat Formális nyelvek a gyakorlatban Formális nyelvek, 1 gyakorlat Segédanyagok Célja: A programozási nyelvek szintaxisának leírására használatos eszközök, módszerek bemutatása Fogalmak: BNF, szabály, levezethető,

Részletesebben

MintaFeladatok 1.ZH Megoldások

MintaFeladatok 1.ZH Megoldások Kérem e-mail-ben jelezze, ha hibát talál: (veanna@inf.elte.hu, vagy veanna@elte.hu ) 1. feladat L1 = {ab,ba,b} L2=b*ab* L3 = {a, bb, aba} L1L3 = {aba, abbb, ababa, baa, babb, baaba, ba, bbb, baba} (ab+b)*

Részletesebben

Csempe átíró nyelvtanok

Csempe átíró nyelvtanok Csempe átíró nyelvtanok Tile rewriting grammars Németh L. Zoltán Számítástudomány Alapjai Tanszék SZTE, Informatikai Tanszékcsoport 1. előadás - 2006. április 10. Képek (pictures) I. Alapdefiníciók ábécé:

Részletesebben

Feladatok. BNF,EBNF,szintaxisgráf

Feladatok. BNF,EBNF,szintaxisgráf Feladatok BNF,EBNF,szintaxisgráf 1. Rajzoljuk fel a megfelelő szintaxisgráfot! angol szótár ::=@{ angol szó [ fonetikus alak ]@{ sorszám. jelentés }; } 2. Írjuk fel egy vagy több EBNF-fel az egészegyütthatós

Részletesebben

ALAPFOGALMAK 1. A reláció az program programfüggvénye, ha. Azt mondjuk, hogy az feladat szigorúbb, mint az feladat, ha

ALAPFOGALMAK 1. A reláció az program programfüggvénye, ha. Azt mondjuk, hogy az feladat szigorúbb, mint az feladat, ha ALAPFOGALMAK 1 Á l l a p o t t é r Legyen I egy véges halmaz és legyenek A i, i I tetszőleges véges vagy megszámlálható, nem üres halmazok Ekkor az A= A i halmazt állapottérnek, az A i halmazokat pedig

Részletesebben

A sorozat fogalma. függvényeket sorozatoknak nevezzük. Amennyiben az értékkészlet. az értékkészlet a komplex számok halmaza, akkor komplex

A sorozat fogalma. függvényeket sorozatoknak nevezzük. Amennyiben az értékkészlet. az értékkészlet a komplex számok halmaza, akkor komplex A sorozat fogalma Definíció. A természetes számok N halmazán értelmezett függvényeket sorozatoknak nevezzük. Amennyiben az értékkészlet a valós számok halmaza, valós számsorozatról beszélünk, mígha az

Részletesebben

Bevezetés. 1. fejezet. Algebrai feladatok. Feladatok

Bevezetés. 1. fejezet. Algebrai feladatok. Feladatok . fejezet Bevezetés Algebrai feladatok J. A számok gyakran használt halmazaira a következ jelöléseket vezetjük be: N a nemnegatív egész számok, N + a pozitív egész számok, Z az egész számok, Q a racionális

Részletesebben

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2.C szakirány Diszkrét matematika 2.C szakirány 2015. ősz 1. Diszkrét matematika 2.C szakirány 3. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék 2015.

Részletesebben

MintaFeladatok 2.ZH Megoldások

MintaFeladatok 2.ZH Megoldások 1. feladat Kérem e-mail-ben jelezze, ha hibát talál: (veanna@inf.elte.hu, vagy veanna@elte.hu ) P={ } S A B C AB SC AC a c BC b CS SS c S a kezdőjel Mivel a piramis tetején lévő kocka a mondatkezdő szimbólumot

Részletesebben

A félév során előkerülő témakörök

A félév során előkerülő témakörök A félév során előkerülő témakörök rekurzív algoritmusok rendező algoritmusok alapvető adattípusok, adatszerkezetek, és kapcsolódó algoritmusok dinamikus programozás mohó algoritmusok gráf algoritmusok

Részletesebben

Analízis elo adások. Vajda István. 2012. szeptember 10. Neumann János Informatika Kar Óbudai Egyetem. Vajda István (Óbudai Egyetem)

Analízis elo adások. Vajda István. 2012. szeptember 10. Neumann János Informatika Kar Óbudai Egyetem. Vajda István (Óbudai Egyetem) Vajda István Neumann János Informatika Kar Óbudai Egyetem 1 / 36 Bevezetés A komplex számok értelmezése Definíció: Tekintsük a valós számpárok R2 halmazát és értelmezzük ezen a halmazon a következo két

Részletesebben

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2.C szakirány Diszkrét matematika 2.C szakirány 2015. tavasz 1. Diszkrét matematika 2.C szakirány 1. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu Komputeralgebra Tanszék 2015. tavasz Gráfelmélet Diszkrét

Részletesebben

Diszkrét matematika 1. estis képzés

Diszkrét matematika 1. estis képzés Diszkrét matematika 1. estis képzés 2019. tavasz 1. Diszkrét matematika 1. estis képzés 9. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Mérai László diái alapján

Részletesebben

Halmaz: alapfogalom, bizonyos elemek (matematikai objektumok) Egy halmaz akkor adott, ha minden objektumról eldönthető, hogy

Halmaz: alapfogalom, bizonyos elemek (matematikai objektumok) Egy halmaz akkor adott, ha minden objektumról eldönthető, hogy 1. előadás: Halmazelmélet Szabó Szilárd Halmazok Halmaz: alapfogalom, bizonyos elemek (matematikai objektumok) összessége. Egy halmaz akkor adott, ha minden objektumról eldönthető, hogy hozzátartozik-e,

Részletesebben

2014. szeptember 24. és 26. Dr. Vincze Szilvia

2014. szeptember 24. és 26. Dr. Vincze Szilvia 2014. szeptember 24. és 26. Dr. Vincze Szilvia Mind a hétköznapi, mind a tudományos életben gyakran előfordul, hogy bizonyos halmazok elemei között kapcsolat figyelhető meg. A kapcsolat fogalmának matematikai

Részletesebben

Diszkrét matematika 2. estis képzés

Diszkrét matematika 2. estis képzés Diszkrét matematika 2. estis képzés 2018. tavasz 1. Diszkrét matematika 2. estis képzés 7. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék

Részletesebben

Turing-gép május 31. Turing-gép 1. 1

Turing-gép május 31. Turing-gép 1. 1 Turing-gép 2007. május 31. Turing-gép 1. 1 Témavázlat Turing-gép Determinisztikus, 1-szalagos Turing-gép A gép leírása, példák k-szalagos Turing-gép Univerzális Turing-gép Egyéb Turing-gépek Nemdeterminisztikus

Részletesebben

Gráfelméleti feladatok. c f

Gráfelméleti feladatok. c f Gráfelméleti feladatok d e c f a b gráf, csúcsok, élek séta: a, b, c, d, e, c, a, b, f vonal: c, d, e, c, b, a út: f, b, a, e, d (walk, lanţ) (trail, lanţ simplu) (path, lanţ elementar) 1 irányított gráf,

Részletesebben

MBNK12: Permutációk (el adásvázlat, április 11.) Maróti Miklós

MBNK12: Permutációk (el adásvázlat, április 11.) Maróti Miklós MBNK12: Permutációk el adásvázlat 2016 április 11 Maróti Miklós 1 Deníció Az A halmaz permutációin a π : A A bijektív leképezéseket értjünk Tetsz leges n pozitív egészre az {1 n} halmaz összes permutációinak

Részletesebben

KOVÁCS BÉLA, MATEMATIKA I.

KOVÁCS BÉLA, MATEMATIKA I. KOVÁCS BÉLA MATEmATIkA I 6 VI KOmPLEX SZÁmOk 1 A komplex SZÁmOk HALmAZA A komplex számok olyan halmazt alkotnak amelyekben elvégezhető az összeadás és a szorzás azaz két komplex szám összege és szorzata

Részletesebben

Nyelv hatványa: Legyen L egy nyelv, nemnegatív egész hatványai,,. (rek. definició) Nyelv lezártja (iteráltja): Legyen L egy nyelv. L nyelv lezártja.

Nyelv hatványa: Legyen L egy nyelv, nemnegatív egész hatványai,,. (rek. definició) Nyelv lezártja (iteráltja): Legyen L egy nyelv. L nyelv lezártja. Univerzális ábécé: Szimbólumok egy megszámlálhatóan végtelen halmazát univerzális ábécének nevezzük Ábécé: Ábécének nevezzük az univerzális ábécé egy tetszőleges véges részhalmazát Betű: Az ábécé elemeit

Részletesebben

Emlékeztető: LR(0) elemzés. LR elemzések (SLR(1) és LR(1) elemzések)

Emlékeztető: LR(0) elemzés. LR elemzések (SLR(1) és LR(1) elemzések) Emlékeztető Emlékeztető: LR(0) elemzés A lexikális által előállított szimbólumsorozatot balról jobbra olvassuk, a szimbólumokat az vermébe tesszük. LR elemzések (SLR() és LR() elemzések) Fordítóprogramok

Részletesebben

Matematika alapjai; Feladatok

Matematika alapjai; Feladatok Matematika alapjai; Feladatok 1. Hét 1. Tekintsük a,, \ műveleteket. Melyek lesznek a.) kommutativok b.) asszociativak c.) disztributívak-e a, műveletek? Melyik melyikre? 2. Fejezzük ki a műveletet a \

Részletesebben

Diszkrét matematika 2. estis képzés

Diszkrét matematika 2. estis képzés Diszkrét matematika 2. estis képzés 2018. tavasz 1. Diszkrét matematika 2. estis képzés 10. előadás Nagy Gábor nagygabr@gmail.com nagy@compalg.inf.elte.hu compalg.inf.elte.hu/ nagy Komputeralgebra Tanszék

Részletesebben

KOVÁCS BÉLA, MATEMATIKA I.

KOVÁCS BÉLA, MATEMATIKA I. KOVÁCS BÉLA, MATEmATIkA I. 3 III. MEGFELELTETÉSEk, RELÁCIÓk 1. BEVEZETÉS Emlékeztetünk arra, hogy az rendezett párok halmazát az és halmazok Descartes-féle szorzatának nevezzük. Más szóval az és halmazok

Részletesebben

MATE-INFO UBB verseny, március 25. MATEMATIKA írásbeli vizsga

MATE-INFO UBB verseny, március 25. MATEMATIKA írásbeli vizsga BABEŞ-BOLYAI TUDOMÁNYEGYETEM, KOLOZSVÁR MATEMATIKA ÉS INFORMATIKA KAR MATE-INFO UBB verseny, 218. március 25. MATEMATIKA írásbeli vizsga FONTOS TUDNIVALÓK: 1 A feleletválasztós feladatok,,a rész esetén

Részletesebben

Környezetfüggetlen nyelvtan. Formális nyelvek II. Környezetfüggetlen nyelvek és veremautomaták. Backus-Naur forma

Környezetfüggetlen nyelvtan. Formális nyelvek II. Környezetfüggetlen nyelvek és veremautomaták. Backus-Naur forma Formális nyelvek II. Környezetfüggetlen nyelvek és veremautomaták Környezetfüggetlen nyelvtan Egy G = (N,Σ,P,S) nyelvtan környezetfüggetlen, ha minden szabálya A α alakú. Példák: 1) Az S asb ε nyelvtan,

Részletesebben