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



Hasonló dokumentumok

Chomsky-féle hierarchia

Chomsky-féle hierarchia

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

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

Fordítóprogramok szerkesztése Flex és Bison segítségével

AUTOMATÁK ÉS FORMÁLIS NYELVEK PÉLDATÁR

Számítástudomány matematikai alapjai segédlet táv és levelező

Fordítóprogramok felépítése, az egyes programok feladata. A következő jelölésmódot használjuk: program(bemenet)(kimenet)

JANUS PANNONIUS TUDOMÁNYEGYETEM. Schipp Ferenc ANALÍZIS I. Sorozatok és sorok

4. előadás. Vektorok


Miskolci Egyetem. Diszkrét matek I. Vizsga-jegyzet. Hegedűs Ádám Imre

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!

Lineáris programozás. Modellalkotás Grafikus megoldás Feladattípusok Szimplex módszer

22. szakkör (Csoportelméleti alapfogalmak 1.)

Alkalmazott modul: Programozás

Széchenyi István Egyetem, 2005

Geometriai axiómarendszerek és modellek

Automaták és formális nyelvek

KOVÁCS BÉLA, MATEMATIKA I.

Miskolci Egyetem GÉPÉSZMÉRNÖKI ÉS INFORMATIKAI KAR. Analízis I. példatár. (kidolgozott megoldásokkal) elektronikus feladatgyűjtemény

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

MATEMATIKA ÉRETTSÉGI május 9. EMELT SZINT

Hraskó András, Surányi László: spec.mat szakkör Tartotta: Surányi László. Feladatok

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Geometria I.

Lineáris Algebra gyakorlatok

Egy csodálatos egyenesről (A Simson-egyenes) Bíró Bálint, Eger

5. Trigonometria. 2 cos 40 cos 20 sin 20. BC kifejezés pontos értéke?

Analízis előadás és gyakorlat vázlat

Relációs algebra áttekintés és egy táblára vonatkozó lekérdezések

Mátrixok február Feladat: Legyen ( ( B = A =

MATEMATIKA JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ

KOVÁCS BÉLA, MATEMATIKA I.

8. Mohó algoritmusok Egy esemény-kiválasztási probléma. Az esemény-kiválasztási probléma optimális részproblémák szerkezete

MATEMATIKA 9. osztály Segédanyag 4 óra/hét

Soukup Dániel, Matematikus Bsc III. év cím: Témavezető: Szentmiklóssy Zoltán, egyetemi adjunktus

Gráfelmélet/Diszkrét Matematika MSc hallgatók számára. Párosítások

Mátrixok. 3. fejezet Bevezetés: műveletek táblázatokkal

MATEMATIKA JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ

2. Halmazelmélet (megoldások)

MATEMATIKA ÍRÁSBELI ÉRETTSÉGI-FELVÉTELI FELADATOK május 19. du. JAVÍTÁSI ÚTMUTATÓ

MintaFeladatok 1.ZH Megoldások

Lineáris algebra I. Kovács Zoltán. Előadásvázlat (2006. február 22.)

Analízisfeladat-gyűjtemény IV.

1. Bevezetés. A számítógéptudomány ezt a problémát a feladat elvégzéséhez szükséges erőforrások (idő, tár, program,... ) mennyiségével méri.

Bevezetés a számításelméletbe I. feladatgyűjtemény. Szeszlér Dávid, Wiener Gábor

Programozás I. Metódusok C#-ban Egyszerű programozási tételek. Sergyán Szabolcs

Megoldókulcs. Matematika D kategória ( osztályosok) február 6.

Mesterséges intelligencia, 7. előadás október 13. Készítette: Masa Tibor (KPM V.)

Halmazok-előadás vázlat

Szeminárium-Rekurziók

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

Halmazok. Halmazelméleti lapfogalmak, hatványhalmaz, halmazm veletek, halmazm veletek azonosságai.

XIII. Bolyai Konferencia Bodnár József Eötvös József Collegium, ELTE TTK, III. matematikus. A véletlen nyomában

Tesztkérdések az ALGORITMUSELMÉLET tárgyból, 2001/ félév

Fejezetek az abszolút geometriából 6. Merőleges és párhuzamos egyenesek

MintaFeladatok 1.ZH Megoldások

Megoldások, megoldás ötletek (Jensen-egyenlőtlenség)

Fordítóprogramok. Ajánlott irodalom. Jelölések 2. Jelölések 1. Fordítóprogramok szerkezete. Elıadó: Pozsgai Tamás. Aho-Sethi-Ullmann: Compilers

LINEÁRIS ALGEBRA PÉLDATÁR MÉRNÖK INFORMATIKUSOKNAK

Nyugat-magyarországi Egyetem Geoinformatikai Kara. Prof. Dr. Závoti József. Matematika III. 2. MA3-2 modul. Eseményalgebra

ÉS TESZTEK A DEFINITSÉG

Komputer statisztika gyakorlatok

4. modul Poliéderek felszíne, térfogata

2. feladat Legyenek 1 k n rögzített egészek. Mennyi az. x 1 x 2...x k +x 2 x 3...x k x n k+1 x n k+2...x n

Gyakorló feladatok ZH-ra

2) = 0 ahol x 1 és x 2 az ax 2 + bx + c = 0 ( a,b, c R és a 0 )

Feladatok. BNF,EBNF,szintaxisgráf

MintaFeladatok 2.ZH Megoldások

BUDAPESTI KÖZGAZDASÁGTUDOMÁNYI EGYETEM. Puskás Csaba, Szabó Imre, Tallos Péter LINEÁRIS ALGEBRA JEGYZET

TARTALOMJEGYZÉK ELŐSZÓ GONDOLKOZZ ÉS SZÁMOLJ! HOZZÁRENDELÉS, FÜGGVÉNY... 69

Gyakorlatok. P (n) = P (n 1) + 2P (n 2) + P (n 3) ha n 4, (utolsó lépésként l, hl, u, hu-t léphetünk).

Bevezetés. Párhuzamos vetítés és tulajdonságai

Matematikai logika. Nagy Károly 2009

Mára új helyzet alakult ki: a korábbiakhoz képest nagyságrendekkel komplexebb

PROGRAMOZÁS MÓDSZERTANI ALAPJAI I. TÉTELEK ÉS DEFINÍCIÓK

MATEMATIKA FELADATGYŰJTEMÉNY

Információelmélet Szemináriumi gyakorlatok

2. Hatványozás, gyökvonás

Valószínűségszámítás és statisztika. István Fazekas

JANUS PANNONIUS TUDOMÁNYEGYETEM. Schipp Ferenc ANALÍZIS II. ***************

Válasz Szőnyi Tamásnak az Optimális térlefedő kódok kutatása című doktori értekezés opponensi bírálatára

44. ORSZÁGOS TIT KALMÁR LÁSZLÓ MATEMATIKAVERSENY. Országos döntő, 1. nap május 29.

1. Lineáris leképezések

TARTALOM. Ismétlő tesztek ÚTMUTATÁSOK ÉS EREDMÉNYEK...255

Fejezetek a lineáris algebrából PTE-PMMK, Műszaki Informatika Bsc. Dr. Kersner Róbert

Erdélyi Magyar TudományEgyetem (EMTE

Beadható feladatok december Add meg az alábbi probléma állapottér-reprezentációját!

Munkafüzet megoldások 7. osztályos tanulók számára. Makara Ágnes Bankáné Mező Katalin Argayné Magyar Bernadette Vépy-Benyhe Judit

BEVEZETÉS AZ ÁBRÁZOLÓ GEOMETRIÁBA

Egyetemi matematika az iskolában

Dr. Jelasity Márk. Mesterséges Intelligencia I. Előadás Jegyzet (2008. október 6) Készítette: Filkus Dominik Martin

Mesterséges Intelligencia I. (I602, IB602)

Komáromi Éva LINEÁRIS PROGRAMOZÁS

6. AZ EREDMÉNYEK ÉRTELMEZÉSE

10. Valószínűségszámítás

Gráfokkal megoldható hétköznapi problémák

BEVEZETÉS A FUZZY-ELVŰ SZABÁLYOZÁSOKBA. Jancskárné Dr. Anweiler Ildikó főiskolai docens. PTE PMMIK Műszaki Informatika Tanszék

9. modul Szinusz- és koszinusztétel. Készítette: Csákvári Ágnes

Átírás:

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 NYELVEK ÉS FORDÍTÓPROGRAMOK 2006

akonyv 2006/12/18 11:53 page iv #4 Copyright c Csörnyei Zoltán, Kása Zoltán, 2006. Minden jog fenntartva. Jelen könyvet, illetve annak részeit tilos reprodukálni, adatrögzítő rendszerben tárolni, bármilyen formában vagy eszközzel elektronikus úton vagy más módon közölni a szerzők előzetesen megkért írásbeli engedélye nélkül. All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted in any form or by any means electronic, mechanical, photocoping, recording, or otherwise without the prior written permission of the authors. ISBN...

akonyv 2006/12/18 11:53 page v #5 Tartalomjegyzék I. Formális nyelvek és automaták (Kása Zoltán) 1 1. Nyelvek és nyelvtanok 3 1.1. Műveletek nyelvekkel....................... 4 1.2. Nyelvek megadása........................ 5 1.2.1. Nyelvek megadása elemeik felsorolásával........ 5 1.2.2. Nyelvek megadása tulajdonság segítségével...... 5 1.2.3. Nyelvek megadása nyelvtannal............. 5 1.3. Chomsky-féle nyelvosztályok................... 9 1.3.1. Átnevezések kiküszöbölése................ 11 1.3.2. Normálalakú nyelvtanok................. 12 1.4. Kiterjesztett nyelvtanok..................... 13 1.5. A Chomsky-féle nyelvosztályok zártsági tulajdonságai..... 17 2. Véges automaták és reguláris nyelvek 20 2.1. Véges automaták értelmezése.................. 20 2.1.1. Elérhetetlen állapotok kizárása............. 24 2.1.2. Nemproduktív állapotok kizárása............ 24 2.2. NDVA átalakítása DVA-vá.................... 25 2.3. Determinisztikus véges automaták ekvivalenciájának vizsgálata 29 2.4. Véges automaták és reguláris nyelvtanok ekvivalenciája... 32 2.4.1. Műveletek reguláris nyelvekkel............. 38 2.5. ε-lépéses véges automaták és műveletek véges automatákkal. 38 2.6. Determinisztikus véges automaták minimalizálása....... 43 2.7. Pumpáló lemma reguláris nyelvekre............... 46 2.8. Reguláris kifejezések....................... 49 2.8.1. Reguláris kifejezés hozzárendelése véges automatához. 52 2.8.2. Véges automata hozzárendelése reguláris kifejezéshez. 57

akonyv 2006/12/18 11:53 page vi #6 vi Tartalomjegyzék 3. Veremautomaták és környezetfüggetlen nyelvek 63 3.1. Veremautomaták......................... 63 3.2. Környezetfüggetlen nyelvek................... 74 3.3. Pumpáló lemma környezetfüggetlen nyelvekre......... 76 3.4. Környezetfüggetlen nyelvtanok normálalakjai......... 79 3.4.1. Chomsky-féle normálalak................ 79 3.4.2. Greibach-féle normálalak................. 81 II. Fordítóprogramok (Csörnyei Zoltán) 87 4. Compiler, interpreter 89 4.1. A fordítóprogram szerkezete................... 90 4.2. Kezdő lépések........................... 94 5. A lexikális elemzés 99 5.1. A lexikális elemző működése................... 99 5.2. Speciális problémák........................ 103 5.2.1. Kulcsszavak, standard szavak.............. 103 5.2.2. Az előreolvasás...................... 105 5.2.3. Direktívák......................... 106 5.2.4. Hibakezelés........................ 106 6. A szintaktikai elemzés 108 6.1. A szintaktikai elemzés alapfogalmai............... 108 6.2. A szintaktikai elemzési módszerek................ 109 6.3. LL(1) elemzés........................... 110 6.3.1. Az LL(k) nyelvtanok................... 110 6.3.2. Táblázatos elemzés.................... 116 6.3.3. A rekurzív leszállás módszere.............. 122 6.4. LR(1) elemzés........................... 128 6.4.1. Az LR(k) nyelvtanok................... 129 6.4.2. LR(1) kanonikus halmazok............... 132 6.4.3. Az LR(1) elemző..................... 139 6.4.4. Az LALR(1) elemző................... 143 7. A szemantikai elemzés 153 7.1. A fordítási nyelvtanok...................... 153 7.2. Attribútum fordítási nyelvtanok................. 154 7.3. Particionált attribútum fordítási nyelvtanok.......... 159 7.3.1. Látogatási sorozatok................... 166

akonyv 2006/12/18 11:53 page vii #7 Tartalomjegyzék vii 7.4. Rendezett attribútum fordítási nyelvtanok........... 172 7.4.1. S-attribútum fordítási nyelvtanok............ 174 7.4.2. L-attribútum fordítási nyelvtanok............ 174 8. A kódgenerálás 181 8.1. Az aktivációs rekord....................... 181 8.2. A kifejezések fordítása...................... 183 8.3. Az if utasítás fordítása...................... 184 Könyvészet 189 Tárgy- és névmutató 193

akonyv 2006/12/18 11:53 page viii #8

akonyv 2006/12/18 11:53 page 1 #9 I. RÉSZ Formális nyelvek és automaták 1

akonyv 2006/12/18 11:53 page 2 #10

akonyv 2006/12/18 11:53 page 3 #11 1. FEJEZET Nyelvek és nyelvtanok Tetszőleges szimbólumok (jelek) nem üres, véges halmazát ábécének nevezzük. Az ábécé elemeit betűknek nevezzük, de sokszor használjuk a jel és szimbólum neveket is. Ábécé például a Σ = {a,b,c,d,0,1,σ}, amelynek betűi a,b,c,d,0,1 és σ. Az ábécé betűiből szavakat képezünk. Ha a 1,a 2,...,a n Σ,n 0, akkor a 1 a 2... a n a Σ ábécé betűiből képzett szó (az a i -k nem feltétlenül különbözők). A szót alkotó betűk száma, multiplicitással számolva, a szó hossza. Ha w = a 1 a 2...a n, akkor a w szó hossza w = n. Ha n = 0, akkor a szó egyetlen betűt sem tartalmaz, és üres szónak nevezzük. Jelölése: ε (sok könyvben λ). A Σ betűiből képezhető szavak halmazának jelölésére a Σ jelet használjuk: Σ = { a 1 a 2...a n a 1,a 2,...,a n Σ, n 0 }. A nem üres szavak halmaza Σ + = Σ \ {ε}. Az n hosszúságú szavak halmazát Σ n -nel jelöljük, és természetesen Σ 0 = {ε}. Ekkor Σ = Σ 0 Σ 1 Σ n és Σ + = Σ 1 Σ 2 Σ n. Az u = a 1 a 2...a m és v = b 1 b 2...b n szavak egyenlők (azaz u = v), ha m = n és a i = b i, i = 1,2,...,n. A Σ -on bevezetünk egy bináris műveletet, a konkatenációt. Az u = a 1 a 2... a m és v = b 1 b 2... b n szavak konkatenációján (illesztésén, szorzatán, összefűzésén) az uv = a 1 a 2...a m b 1 b 2...b n szót értjük. Nyilvánvaló, hogy uv = u + v. Ez a művelet asszociatív, de nem kommutatív. Van egységeleme, az ε, mivel εu = uε = u tetszőleges u Σ szóra. Tehát Σ ezzel a konkatenáció művelettel monoidot (egységelemes félcsoportot) képez. Bevezetjük a szavak hatványozását. Ha u Σ, akkor u 0 = ε, továbbá ha n 1, akkor u n = u n 1 u. Az u = a 1 a 2...a n szó tükörképe u 1 = a n a n 1...a 1. Az u tükörképének jelölésére néha használják még a következőket is: u R, ũ. Nyilvánvaló, hogy ( u 1 ) 1 = u és (uv) 1 = v 1 u 1.

akonyv 2006/12/18 11:53 page 4 #12 4 1. Nyelvek és nyelvtanok Azt mondjuk, hogy v kezdőszelete (prefixe) az u szónak, ha létezik a z szó úgy, hogy u = vz. Ha z ε, akkor v valódi kezdőszelete u-nak. Hasonlóképpen v végszelete (szuffixe) az u szónak, ha létezik az x szó úgy, hogy u = xv, és analóg módon értelmezhető a valódi végszelet is. A v szó részszava az u szónak, ha léteznek a p és q szavak úgy, hogy u = pvq. Ha pq ε, akkor v valódi részszava u-nak. A kezdő- és végszeletek egyben részszavak is. A Σ tetszőleges L részhalmazát a Σ ábécé feletti nyelvnek nevezzük. Mivel a szavaknak nem tulajdonítunk értelmet, gyakran formális nyelvről beszélünk, hogy megkülönböztessük a természetes és a mesterséges nyelvektől, amelyekben a szavakhoz valamilyen értelem is kapcsolódik. Megjegyezzük, hogy az üres nyelv, míg {ε} az üres szóból álló nyelv. 1.1. Műveletek nyelvekkel Ha L, L 1, L 2 egy-egy Σ feletti nyelv, akkor értelmezzük a következő műveleteket: 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 (komplemens vagy komplementer nyelv) L = Σ \ L, szorzat L 1 L 2 = {uv u L 1,v L 2 }, nyelv hatványa L 0 = {ε}, L n = L n 1 L, ha n 1, nyelv iteráltja L = L i = L 0 L L 2 L i, i=0 tükrözés L 1 = {u 1 u L} Szoktuk még használni az L + jelölést is: L + = L i = L L 2 L i. i=1 Az egyesítés, szorzás, iteráció műveleteket reguláris műveleteknek nevezzük.

akonyv 2006/12/18 11:53 page 5 #13 1.2. Nyelvek megadása 5 1.2. Nyelvek megadása Nyelveket többféleképpen adhatunk meg. Például: 1) felsoroljuk a szavait, 2) megadunk egy tulajdonságot, amellyel a nyelv minden szava rendelkezik, de más szavak nem, 3) nyelvtan segítségével. 1.2.1. Nyelvek megadása elemeik felsorolásával Nyelvek például: L 1 = {ε,0,1}, L 2 = {a,aa,aaa,ab,ba,aba}. Habár végtelen halmazokat nem tudunk felsorolni, a végtelen nyelvek is megadhatók felsorolással abban az esetben, ha az első néhány szó megadásából kiderül, hogyan kell a felsorolást folytatni. Ilyen például a következő nyelv: L 3 = {ε,ab,aabb,aaabbb,aaaabbbb,...}. 1.2.2. Nyelvek megadása tulajdonság segítségével Nyelvek a következő halmazok is: L 4 = {a n b n n = 0,1,2,...}, 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, n b (u) pedig a b betűk számát jelöli. 1.2.3. Nyelvek megadása nyelvtannal Értelmezzük a generatív nyelvtan vagy röviden nyelvtan (grammatika) fogalmát. 1.2.1. értelmezés. Generatív nyelvtannak nevezzük a G = (N, T, P, S) rendezett négyest, ahol N a változók (vagy 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 véges halmaza, ahol u,v (N T), és u tartalmaz legalább egy nemterminális jelet, S N a nyelvtan kezdőszimbóluma.

akonyv 2006/12/18 11:53 page 6 #14 6 1. Nyelvek és nyelvtanok Megjegyzés. Az (u, v) jelölés helyett gyakran használjuk az u v jelölést, amely szemléletesebben utal a helyettesítésre (amint azt később látni fogjuk). Az u v, azaz (u,v) szabályban u-t a szabály bal, v-t pedig a jobb oldalának nevezzük. Amennyiben a nyelvtanban több olyan szabály van, amelyeknek a bal oldala azonos, akkor ezeket egyszerűbben is írhatjuk: u v 1, u v 2,...,u v r helyett u v 1 v 2... v r. Értelmezzük az (N T) halmazban a közvetlen levezetés relációt: u = v, ha u = p 1 pp 2, v = p 1 qp 2 és (p,q) P. Tulajdonképpen u-ban a p részszó valamely előfordulását q-val helyettesítjük, és eredményül v-t kapjuk. A közvetlen levezetésre még szokás a vagy a = jeleket is használni. Ha hangsúlyozni szeretnénk a G nyelvtant, amelynek szabályait használjuk, akkor a = jelölés helyett a = jelölést használjuk. A = reláció reflexív és G + tranzitív lezártját =, míg a tranzitív lezártját = jelöli. A = reláció neve levezetés. A reflexív és tranzitív lezárt definíciójából következik, hogy u = v, ha léteznek a w 0,w 1,...,w n (N T), n 0 szavak, és u = w 0, w 0 = w 1, w 1 = w 2,...,w n 1 = w n, w n = v. Ezt röviden így is írhatjuk: u = w 0 = w 1 = w 2 =... = w n 1 = w n = v. Ha n = 0, akkor u = v. Hasonlóképpen értelmezhető az u = + v reláció, azzal a különbséggel, hogy itt n 1, tehát elvégzünk legalább egy helyettesítést 1.2.2. értelmezés. A G = (N, T, P, S) nyelvtan által generált nyelv: L(G) = {u T S = u}. Tehát L(G) mindazokat a T ábécé betűiből képzett szavakat tartalmazza, amelyek az S kezdőszimbólumból levezethetők P szabályainak a segítségével. 1.2.3. értelmezés. Ha w T, akkor w-t mondatnak nevezzük. Ha α (N T), akkor α neve mondatforma. 1.1. példa. Legyen G = (N, T, P, S), ahol N = {S}, T = {a, b}, P = {S asb, S ab}. Könnyű belátni, hogy ekkor L(G) = {a n b n n 1}, mivel S = G asb = G a 2 Sb 2 = G = G a n 1 Sb n 1 = G a n b n,

akonyv 2006/12/18 11:53 page 7 #15 1.2. Nyelvek megadása 7 ahol az utolsó előtti helyettesítésig mindig az első helyettesítési szabályt (S asb) használtuk, míg az utolsónál az S ab szabályt. Ezt a levezetést röviden így is írhatjuk: S = a n b n. Tehát a n b n tetszőleges n-re levezethető S-ből, és más szót G nem lehet levezetni S-ből. 1.2.4. értelmezés. Azt mondjuk, hogy a G 1 és G 2 nyelvtanok ekvivalensek, és ezt G 1 = G2 -vel jelöljük, ha L(G 1 ) = L(G 2 ). 1.2. példa. 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}. Először teljes indukcióval megmutatjuk, hogy n 2-re S 1 akkor S 1 = G1 axbc = G1 abxc = G1 aby bcc = G1 ay b 2 c 2. = G1 a n 1 Y b n c n. Ha n = 2, Feltételezzük, hogy S 1 = a n 2 Y b n 1 c n 1. Alkalmazzuk az ay aax szabályt, G1 majd (n 1)-szer az Xb bx szabályt, egyszer az Xc Y bcc szabályt, utána pedig szintén (n 1)-szer a by Y b szabályt. Tehát S 1 = a n 2 Y b n 1 c n 1 = a n 1 Xb n 1 c n 1 = a n 1 b n 1 Xc n 1 G1 G1 G1 = a n 1 b n 1 Y bc n = a n 1 Y b n c n. G1 G1 = a n b n c n, n 2- G1 abc az S 1 abc szabály alapján, tehát a n b n c n L(G 1 ) tetszőleges Ha most alkalmazzuk az ay aa szabályt, azt kapjuk, hogy S 1 re, de S 1 = G1 n 1-re. Be kell még bizonyítanunk, hogy a szabályok alkalmazásával más szót nem lehet generálni, csak a n b n c n alakút. Ezt könnyű belátni, hisz eredményes levezetés (amely csak terminális betűket tartalmazó szóban végződik) csak a fenti módon lehetséges. Hasonlóképpen n 2-re S 2 = as 2 BC = a n 1 S 2 (BC) n 1 = a n (BC) n = a n B n C n G2 G2 G2 G2 = G2 a n bb n 1 C n = G2 a n b n C n = G2 a n b n cc n 1 = G2 a n b n c n. Itt sorrendben a következő szabályokat alkalmaztuk: S 2 as 2 BC (n 1-szer), S 2 abc, CB BC (n 1-szer), ab ab, bb bb (n 1-szer), bc bc, cc cc

akonyv 2006/12/18 11:53 page 8 #16 8 1. Nyelvek és nyelvtanok (n 1-szer). Ugyanakkor S 2 = abc = abc = abc, tehát S 2 = a n b n c n, n 1. G2 G2 G2 G2 Itt is könnyű belátni, hogy más szavakat nem lehet generálni a G 2 -ben. A következő két nyelvtan: G 3 = ({S}, {a, b}, {S asb, S ε}, S) és G 4 = ({S}, {a, b}, {S asb, S ab}, S) nem ekvivalens, mert L(G 3 ) \ {ε} = L(G 4 ). 1.2.5. tétel. Létezik olyan formális nyelv, amelyet nem lehet nyelvtannal megadni. Bizonyítás. A bizonyításhoz a nyelvtanokat a {0, 1} ábécé feletti szavakként kódoljuk. 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 1011... } {{ 11} 01, a i kódja 10011... } {{ 11} 001. i-szer i-szer A szimbólumok kódját a kódolásban 000 választja el, a nyíl kódja 0000, a szabályokat pedig 00000 jelsorozattal választjuk el. Nyilván elég csak a szabályokat kódolni. Példaként vegyük a következő nyelvtant: G = ({S}, {a,b}, {S asb, S ab},s). S kódja 10101, a kódja 1001001, b kódja 10011001. A nyelvtan kódja: 10101 } {{ } 00001001001 } {{ } 00010101 } {{ } 00010011001 } {{ } 0000010101 } {{ } 00001001001 } {{ } 000 10011001 } {{ }. Ebből a kódolásból következik, hogy a T terminális ábécével rendelkező nyelvtanok felsorolhatók 1 a következőképpen: G 1,G 2,...,G k,..., és így ezen nyelvtanok halmazának számossága megszámlálhatóan végtelen. Tekintsük most a T ábécé feletti összes nyelvek halmazát: L T = {L L T }, azaz L T = P(T ). A T halmaz megszámlálhatóan végtelen, hisz szavai sorrendbe írhatók. Legyen ez a sorrend s 0,s 1,s 2,..., ahol legyen s 0 = ε. Ekkor minden L L T nyelvnek megfeleltethetünk egy b 0,b 1,b 2,... végtelen bináris sorozatot a következőképpen: b i = { 1, ha si L 0, ha s i L i = 0,1,2,.... 1 Tegyük fel, hogy a {0,1} ábécén adott egy < lineáris rendezés, mondjuk 0 < 1. Ezek után a nyelvtanokat kódoló szavak felsorolhatók úgy, hogy a szavakat előbb a hosszúságuk szerint rendezzük, majd azon belül ábécésorrendbe, az ábécé betűi közötti rendezés alapján. De lehet lexikografikus sorrend is, amely azt jelenti, hogy u < v (u előbb van, mint v), ha u valódi kezdőszelete v-nek, vagy létezik az u = xay és v = xby felbontás, ahol x, y, y részszavak, a és b betűk, és a < b.

akonyv 2006/12/18 11:53 page 9 #17 1.3. Chomsky-féle nyelvosztályok 9 Könnyű belátni, hogy az így keletkezett bináris sorozatok halmaza nem megszámlálhatóan végtelen, hisz minden sorozat tekinthető ú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, ha a tizedesvessző utáni részt vesszük, megfelel egy ilyen sorozatnak. Így a végtelen bináris sorozatok halmazának számossága megegyezik a [0, 1] intervallum kontinuum számosságával. Következésképpen az L T halmaz is kontinuum számosságú. Rendeljük most hozzá minden T terminális ábécével rendelkező nyelvtanhoz az általa generált T feletti nyelvet. Mivel a nyelvtanok számossága megszámlálhatóan végtelen, lesz olyan L T -beli nyelv, amelyhez nem tartozik nyelvtan, más szóval, amelyet nem lehet nyelvtannal generálni. 1.3. 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. 1.3.1. értelmezés. A G = (N, T, P, S) nyelvtanra a következő négy típust definiáljuk. A G nyelvtan 0-típusú (általános vagy mondatszerkezetű), ha semmilyen megkötést nem teszünk a helyettesítési szabályaira. A G nyelvtan 1-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. A G nyelvtan 2-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. A G nyelvtan 3-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. 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. Ez a felosztás Noam Chomsky 2 nevéhez fűződik. 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). 2 Noam Avram Chomsky (1928 ) amerikai nyelvész, aki bevezette a generatív grammatika fogalmát, amelyet ma a nyelvészetbwen és az informatikában egyaránt használnak.

akonyv 2006/12/18 11:53 page 10 #18 10 1. Nyelvek és nyelvtanok 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 tartalmazás ( ) nyilvánvaló, de a szigorú tartalmazás ( ) bizonyításra szorul. 1.3. példa. Adunk egy-egy példát a környezetfüggő, környezetfüggetlen és reguláris nyelvtanokra. 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, S), ahol N 2 = {S, A, B}, T 2 = {+,, (, ), a}. P 2 elemei: S S + A A, A A B B, B (S) a. Az L(G 2 ) olyan algebrai kifejezésekből áll, amelyek az a betűből a + és műveleti jelekkel és a zárójelekkel szabályosan felépíthető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. Könnyű bebizonyítani, hogy minden véges nyelv reguláris. A nyelvtan szabályait úgy adjuk meg, hogy generálják az összes szót. Például, 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. Ezt a véges nyelv minden szavára megtesszük, oly módon, hogy különböző szavakhoz, az S kivételével, különböző nemterminálisokat használunk. Ha az üres szó is eleme a nyelvnek, akkor azt természetesen 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.

akonyv 2006/12/18 11:53 page 11 #19 1.3. Chomsky-féle nyelvosztályok 11 1.3.1. Átnevezések kiküszöbölése Egy A B alakú szabályt, ahol A,B N, átnevezésnek nevezzük. Az átnevezéseket ki lehet küszöbölni a G nyelvtanból úgy, hogy az újonnan kapott nyelvtan ugyanolyan típusú legyen, mint G, és ugyanazt a nyelvet ismerje fel, mint G. Legyen G = (N, T, P, S) átnevezéseket tartalmazó nyelvtan. Definiáljuk a vele ekvivalens, de átnevezéseket nem tartalmazó G = (N,T,P,S) nyelvtant. A következő algoritmus megkonstruálja az új nyelvtan szabályait. Á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 Könnyen belátható, hogy G és G ekvivalensek. Továbbá, ha G i {0,1,2,3} típusú, akkor G is i típusú lesz. 1.4. példa. Alkalmazzuk az előbbi algoritmust a G = ( {S, A, B, C}, {a, b}, P, S ) nyelvtanra, ahol a P elemei: S A, A B, B C, C B, D C, S B, A D, C Aa, A ab, A b. Az algoritmus első lépése alapján 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 (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). Az algoritmus második lépése alkalmazásakor csak azok az átnevezések jöhetnek számításba, amelyeknek a jobb oldala vagy A vagy C, mivel csak az A ab, A b és C Aa szabályok alkalmazhatók (a többi szabály mind átnevezés). A következő új szabályok jelennek meg: S ab S b (S A és A ab miatt), (S A és A b miatt),

akonyv 2006/12/18 11:53 page 12 #20 12 1. Nyelvek és nyelvtanok S Aa (S C és C Aa miatt), A Aa (A C és C Aa miatt), B Aa (B C és C Aa miatt). Az új G = ( {S, A, B, C}, {a, b}, P, S ) nyelvtan szabályai: S b, A b, B Aa, C Aa, S ab, A ab, S Aa A Aa, 1.3.2. Normálalakú nyelvtanok Ha egy nyelvtan szabályainak bal oldalán terminális betűk nem szerepelnek, akkor a nyelvtant normálalakúnak mondjuk. Szükségünk lesz a következő fogalmakra. Adott Σ 1 és Σ 2 ábécékre homomorfizmusnak nevezzük a h : Σ 1 Σ 2 függvényt, ha h(u 1u 2 ) = h(u 1 )h(u 2 ), u 1,u 2 Σ 1. Könnyű belátni, hogy tetszőleges u = a 1a 2... a n Σ 1 esetében a h(u) értéket egyértelműen meghatározza h-nak a Σ 1-re való megszorítása, ugyanis h(u) = h(a 1 )h(a 2 )... h(a n ). Ha a h függvény még bijektív is, akkor izomorfizmusról beszélünk. 1.3.2. tétel. Tetszőleges nyelvtanhoz megkonstruálhatunk egy vele ekvivalens, azonos típusú nyelvtant, amely normálalakú. Bizonyítás. A 2- és 3-típusú nyelvtanok szabályai a bal oldalon csak egy-egy nemterminális szimbólumot tartalmaznak, tehát eleve normálalakúak. A bizonyítást csupán a 0- és 1-típusú nyelvtanokra kell elvégezni. Legyen az eredeti nyelvtan G = (N,T,P,S) és definiáljuk a G = (N,T,P,S) normálalakú nyelvtant a következőképpen. 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 izomorfizmust, ahol: h(a i ) = A i, ha a i T 1, h(x) = X, ha X N T 2 Most értelmezzük a P szabályhalmazt: { P = h(α) h(β) (α β) P } { } A i a i i = 1,2,...,k Ebben az esetben α = β akkor és csakis akkor, ha h(α) = G G h(β).

akonyv 2006/12/18 11:53 page 13 #21 1.4. Kiterjesztett nyelvtanok 13 Innen pedig azonnal következik a tételünk, hisz S = u S = h(s) = G G h(u) = u. 1.5. 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 Bal oldali szabályokban az a, b, c terminálisok szerepelnek, ezért felvesszük a nemterminálisok közé az A, B, C új nemterminálisokat, és P -be az A a, B b és C c szabályokat. Az a, b, c terminálisokat minden szabályban helyettesítjük rendre az A, B, C nemterminálisokkal. Ekkor 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 Vizsgáljuk meg 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. Folytassuk az előbbi levezetést: 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. 1.4. Kiterjesztett nyelvtanok Ebben a részben az 1-típusú, 2-típusú és a 3-típusú kiterjesztett nyelvtanokat mutatjuk be. 1-típusú kiterjesztett nyelvtan. Minden szabály α β alakú, ahol α β, kivéve esetleg az S ε szabályt. 2-típusú kiterjesztett nyelvtan. Minden szabály A β alakú, ahol

akonyv 2006/12/18 11:53 page 14 #22 14 1. Nyelvek és nyelvtanok A N,β (N T). 3-típusú kiterjesztett nyelvtan. Minden szabály A ub vagy A u alakú, ahol A,B N,u T. 1.4.1. tétel. Tetszőleges kiterjesztett nyelvtanhoz megadható egy vele ekvivalens, ugyanolyan típusú nyelvtan. Bizonyítás. 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 ekvivalens G ki -vel. 1-típus. A G nyelvtan szabályait úgy kapjuk, hogy a G ki nyelvtan α β szabályait, ahol α β, átírjuk a G esetében megengedett γ 1 δγ 2 γ 1 γγ 2 alakú szabályokra a következőképpen. 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ú. Vegyük fel G szabályhalmazába a 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. 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. 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. 2-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, továbbá N véges halmaz, léteznie kell egy olyan k-nak, amelyre U k 1 = U k, és ezt a halmazt nevezzük el U-nak. Könnyű belátni, hogy egy A nemterminális akkor és csakis akkor eleme U-nak, ha A = ε. (Mellesleg, ε L(G ki ), akkor és csakis akkor

akonyv 2006/12/18 11:53 page 15 #23 1.4. Kiterjesztett nyelvtanok 15 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 ε. Nem nehéz belátni, hogy az így kapott G nyelvtan ugyanazt a nyelvet generálja, mint G ki, kivéve az ε szót, amelyet nem tud generálni. Ezért, ha ε L(G ki ), akkor a bizonyítást befejeztük. Ha viszont ε L(G ki ), akkor két esetet különböztetünk meg. Ha az S kezdőszimbólum nem szerepel egyetlen szabály jobb oldalán sem, akkor az S ε szabály bevezetésével a G nyelvtan már az üres szót is generálni fogja. Ha viszont S szerepel valamelyik szabály jobb oldalán, akkor egy új kezdőszimbólum (S ) bevezetésével ε is generálható lesz, ha bevesszük a G szabályai közé az S S és S ε szabályokat. 3-típus. Először alkalmazzuk G ki -re a 2-típus esetében használt eljárást az A ε alakú szabályok kiküszöbölésére. A kapott nyelvtanból kiküszöböljük az átnevezéseket az Átnevezés-kizárás algoritmus segítségével (11. oldal). Az így kapott nyelvtan minden A a 1 a 2...a n B szabály esetén, ahol B N {ε}, vegyük fel G szabályai közé a következő szabályokat: 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. 1.6. példa. Adva van a következő 1-típusú kiterjesztett nyelvtan: 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. Az egyetlen szabály, amely nem környezetfüggő, az a CB bevezetjük a következőket, a bizonyításban adott módszer alapján: CB AB AB AD AD BD BD BC BC. Ehelyett Így az új nyelvtan, amely most már környezetfüggő: G = ({S, A, B, C, D}, {a, b, c}, P, S), ahol P elemei:

akonyv 2006/12/18 11:53 page 16 #24 16 1. Nyelvek és nyelvtanok S asbc abc CB AB ab ab AB AD bb bb AD BD bc bc BD BC cc cc. Igazolni lehet, hogy L(G ki ) = L(G) = {a n b n c n n 1}. 1.7. 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. 1.8. példa. Legyen G ki = ({S, A, B}, {a, b}, P, S) a vizsgálandó 3-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. Az új nyelvtan:

akonyv 2006/12/18 11:53 page 17 #25 1.5. A Chomsky-féle nyelvosztályok zártsági tulajdonságai 17 G = ({S, A, B, C}, {a, b}, P, S), ahol P : S ac A bb b B ac C ba. Könnyű bizonyítani, hogy L(G ki ) = L(G) = {(abb) n n 1}. 1.5. A Chomsky-féle nyelvosztályok zártsági tulajdonságai Bebizonyítjuk a következő tételt, amely szerint a Chomsky-nyelvosztályok mindegyike zárt a reguláris műveletekre nézve, azaz két i-típusú nyelv egyesítése és szorzata is i-típusú, i-típusú nyelv iteráltja is i-típusú (i = 0,1,2,3). 1.5.1. tétel. Az L i (i = 0,1,2,3) nyelvek osztálya zárt a reguláris műveletekre nézve. Bizonyítás. 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). Könnyű igazolni, 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. Hasonlóképpen járunk el a szimmetrikus esetnél. 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. 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.

akonyv 2006/12/18 11:53 page 18 #26 18 1. Nyelvek és nyelvtanok 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 ε}. Ekkor G is 2-típusú lesz. 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ú, azaz szabályok bal oldalán nincsenek terminális jelek (lásd 12. oldal), 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 }. Így most már elkerülhetjük, hogy esetleg olyan szabályt is alkalmazzunk a levezetésben, amelynek bal oldala átnyúlik a szavak határán az iteráció miatt. 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. Könnyen igazolható, hogy mindegyik típus esetében L(G ) = L(G 1 ). Gyakorlatok 1.5-1. Adjunk meg egy nyelvtant, amely az L = { uu 1 u {a,b} } nyelvet generálja, és határozzuk meg a típusát. 1.5-2. Adott a G = (N, T, P, S) kiterjesztett környezetfüggetlen nyelvtan, ahol N = {S,A,C,D}, T = {a,b,c,d,e}, P = {S abcade, C cc, C ε, D dd, D ε, A ε, A ddcca}. Adjunk meg egy vele ekvivalens környezetfüggetlen nyelvtant. 1.5-3. Mutassuk meg, hogy Σ és Σ + reguláris nyelvek, tetszőleges Σ ábécére. 1.5-4. Adjunk meg egy nyelvtant az L = { u {0,1} n 0 (u) = n 1 (u) } nyelv generálására, ahol n 0 (u) az u szóban szereplő 0-k, n 1 (u) pedig az 1-ek számát

akonyv 2006/12/18 11:53 page 19 #27 1.5. A Chomsky-féle nyelvosztályok zártsági tulajdonságai 19 jelenti. 1.5-5. Adjunk meg egy nyelvtant, amely a természetes számokat generálja. 1.5-6. Adjunk meg egy-egy nyelvtant a következő nyelvek generálására. L 1 = {a n b m c p n 1,m 1,p 1}, L 2 = {a 2n n 1}, L 3 = {a n b m n 0,m 0 }, L 4 = {a n b m n m 1}. 1.5-7. Adott a G = (N,T,P,S) kiterjesztett nyelvtan, ahol N = {S,A,B,C}, T = {a}, P pedig a következő helyettesítési szabályokat tartalmazza: S BAB, BA BC, CA AAC, CB AAB, A a, B ε. Milyen típusú ez a nyelvtan? Adjunk meg egy vele ekvivalens, ugyanolyan típusú nem kiterjesztett nyelvtant. Milyen nyelvet generál a G nyelvtan?

akonyv 2006/12/18 11:53 page 20 #28 2. FEJEZET Véges automaták és reguláris nyelvek 2.1. Véges automaták értelmezése A véges automaták olyan számítási modellek, amelyek rendelkeznek egy bemeneti szalaggal és több állapottal (2.1. ábra). Az állapotok között vannak kezdőállapotnak, illetve végállapotnak nevezett állapotok. A véges automata egy szót kap bemenetként, amely a bemeneti szalagra van írva, és a bemeneti szó első betűjét olvassa. Az automata kezdőállapotból indul, a szalagról sorra olvassa a betűket, miközben állapotot válthat. Érzékeli, ha végigolvasta a szót, és amennyiben az utolsó állapot végállapot, akkor azt mondjuk, hogy felismerte az adott szót. Egy ilyen automata által felismert szavak halmazát az automata által felismert nyelvnek nevezzük. 2.1.1. értelmezés. 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. A nemdeterminisztikus véges automata tulajdonképpen egy olyan 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. Az állapotokat jelentő csúcsok között bizonyosak kezdő- és bizonyosak végállapotok. A kezdőállapotokat egy-egy befutó nyíl jelzi, míg a végállapotokat két-két koncentrikus kör. Ha két csúcs között több, ugyanolyan irányú él van, akkor ezeket helyettesítjük egyetlen éllel, amelyre a betűket vesszővel elválasztva írjuk. Ezt a gráfot átmenetgráfnak fogjuk hívni. 2.1. példa. Legyen 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 ),

akonyv 2006/12/18 11:53 page 21 #29 2.1. Véges automaták értelmezése 21 a 1 a 2 a 3... a n bemeneti szalag vezérlőmű igen/nem 2.1. ábra. Véges automata. 2 0 q 1 1 1 2 0 q 0 2 1 q 2 0 2.2. ábra. A 2.1. példában szereplő véges automata. (q 2, 0, q 2 ), (q 2, 1, q 0 ), (q 2, 2, q 1 ) } I = {q 0 }, F = {q 0 }. Az automata a 2.2. ábrán látható. Egy (p,a,q) élnek p a kezdőpontja, q a végpontja, a pedig a címkéje. Értelmezzük a gráfoknál használatos séta fogalmát. A (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 = ε. Az ilyen sétát

akonyv 2006/12/18 11:53 page 22 #30 22 2. Véges automaták és reguláris nyelvek q 1 1 q 2 0,1 0 q 0 A 0,1 0,1 q 0 0 q 1 1 q 2 B 2.3. ábra. Nemdeterminisztikus véges automaták. δ 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 } A B 2.4. ábra. A 2.3. ábrán látható két véges automata átmenettáblázata. üres sétának nevezzük. A séta jelölése a q 1 a 0 2 a q1 3 a n 1 a q2 q n n 1 qn, w vagy ha w = a 1 a 2...a n, akkor röviden: q 0 qn. Itt q 0 a séta kezdőpontja, q n pedig a végpontja. A sétában szereplő állapotok nem feltétlenül különbözők. 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 ). Sokszor hasznos definiálni a következő átmenetfüggvényt: δ : Q Σ P(Q), δ(p,a) = {q Q (p,a,q) E}.

akonyv 2006/12/18 11:53 page 23 #31 2.1. Véges automaták értelmezése 23 Ez a függvény 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. Jelöljük H -val a H halmaz elemeinek a számát. 1 Egy nemdeterminisztikus véges automatáról azt mondjuk, hogy determinisztikus, ha I = 1 és δ(q,a) 1, q Q, a Σ. A 2.2. ábrán egy determinisztikus véges automata látható. 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 Σ. 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 állapot bevezetésével, amelyet csapdaállapotnak szokás nevezni. Legyen A = (Q,Σ,E, {q 0 },F) egy determinisztikus véges automata. A vele ekvivalens teljes, determinisztikus véges automata pedig A = (Q {s},σ,e, {q 0 },F), ahol s egy új állapot és 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. Az átmenetfüggvény segítségével könnyen elkészíthetjük a véges automata átmenettáblázatát. A táblázat sorai Q elemeivel, oszlopai Σ elemeivel vannak indexelve. A q Q sor és az a Σ oszlop kereszteződésénél található elem δ(q,a). A 2.2. ábra esetében az átmenettáblázat a következő : δ 0 1 2 q 0 {q 0 } {q 1 } {q 2 } q 1 {q 1 } {q 2 } {q 0 } q 2 {q 2 } {q 0 } {q 1 } A 2.3. ábrán látható két véges automata egyike sem determinisztikus, az első (az A véges automata) azért mert két kezdőállapota van, a második (a B véges automata) pedig azért, mert a q 0 állapotból 0-val a q 0 és q 1 állapotokba is el lehet jutni. A két véges automata átmenettáblázata a 2.4. ábrán látható. 1 Nem értelemzavaró az, hogy ugyanazt a jelölést használjuk a halmaz számosságára, mint a szó hosszára, hiszen a szót mindig kisbetűvel jelöljük, a halmazt pedig nagybetűvel. Kivétel csak a δ(q, a) jelölés, amely nem téveszthető össze szóval.

akonyv 2006/12/18 11:53 page 24 #32 24 2. Véges automaták és reguláris nyelvek L(A) azon szavak halmaza Σ = {0,1} felett, amelyek nem kezdődnek két 0-val (természetesen az ε is eleme a nyelvnek), L(B) pedig azon szavaké, amelyekben van 01 részszó. 2.1.1. Elérhetetlen állapotok kizárása Legyen A = (Q,Σ,E,I,F) egy véges automata. Egy állapotot elérhetőnek nevezünk, ha egy kezdőállapotból valamely bemeneti szó hatására eljuthatunk ebbe az állapotba. A következő algoritmus meghatározza egy véges automatában az elérhető állapotokat az U 0, U 1, U 2,... halmazok felépítésével, ahol U 0 a kezdőállapotok halmaza, és tetszőleges i 1 természetes számra U i azon állapotok halmaza, amelyekbe el lehet jutni valamely kezdőállapotból egy legfeljebb i hosszúságú bemeneti szó hatására. Elérhető-állapotok(A) 1 U 0 I 2 i 0 3 repeat 4 i i + 1 5 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. Az így megkonstruált U halmaznak megvan az a tulajdonsága, hogy L(A) akkor és csakis akkor, ha U F. Ezáltal a fenti algoritmus kiegészíthető a U F feltétellel, hogy eldöntse, hogy a felismert L(A) nyelv üres-e vagy sem. 2.1.2. Nemproduktív állapotok kizárása Legyen A = (Q,Σ,E,I,F) egy véges automata. Egy állapotot produktívnak nevezünk, ha abból az állapotból valamely bemeneti szó hatására eljuthatunk egy végállapotba.

akonyv 2006/12/18 11:53 page 25 #33 2.2. NDVA átalakítása DVA-vá 25 A produktív állapotok meghatározására szolgáló következő algoritmus használja a δ 1 függvényt, amelynek definíciója a következő: δ 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 + 1 5 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. Az így megkonstruált V halmaznak is megvan az a tulajdonsága, hogy L(A) akkor és csakis akkor, ha V I. Ezért, kis módosítással, ez az algoritmus is használható annak eldöntésére, hogy L(A) üres-e. 2.2. Nemdeterminisztikus véges automata átalakítása determinisztikus véges automatává A következőkben megmutatjuk, hogy tetszőleges nemdeterminisztikus véges automata átalakítható olyan determinisztikus véges automatává, amelyik ekvivalens az eredetivel. 2.2.1. tétel. Tetszőleges nemdeterminisztikus véges automatához mindig megkonstruálható egy vele ekvivalens determinisztikus véges automata. Bizonyítás. Legyen A = (Q, Σ, E, I, F) egy nemdeterminisztikus véges automata. Értelmezzük az A = (Q,Σ,E,I,F) determinisztikus véges automatát, ahol Q = P(Q) \,

akonyv 2006/12/18 11:53 page 26 #34 26 2. Véges automaták és reguláris nyelvek E élei azon (S,a,R) alakú hármasokból állnak, amelyekre R,S Q, egyik sem üres, a Σ és R = p S δ(p,a), I = {I}, F = {S Q S F }. Be kell bizonyítanunk, hogy L(A) = L(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 a q2 q k k 1 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 a S2 S k k 1 Sk, S 0 I, S k F séta. Vannak olyan S 0,...,S k halmazok, amelyekre S 0 = I, továbbá minden i = 0,1,...,k-ra S i S i és 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). 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 a q2 q k k 1 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 a q2 q k k 1 qk, q 0 I, q k F séta, tehát L(A) L(A). A determinisztikus véges automata megkonstruálásában segítségünkre lehet ennek δ átmenetfüggvénye: δ(q,a) = δ(q, a), q Q, a Σ. q q Mivel az üres halmazt kizártuk az állapotok közül, a fenti képletben { } helyett -t írunk.

akonyv 2006/12/18 11:53 page 27 #35 2.2. NDVA átalakítása DVA-vá 27 1 S 0 0 S 1 2 S 3 0,1 2.5. ábra.a 2.3. ábra A véges automatájával ekvivalens determinisztikus véges automata. 2.2. példa. Alkalmazzuk a 2.2.1 tételt a 2.3. ábra A véges automatájára, amely nemdeterminisztikus. Vezessük be a determinisztikus véges automata állapotaira a következő jelöléseket: S 0 := {q 0, q 1 }, S 1 := {q 0 }, S 2 := {q 1 }, S 3 := {q 2 }, S 4 := {q 0, q 2 }, S 5 := {q 1, q 2 }, S 6 := {q 0, q 1, q 2 }, amelyek közül S 0 a kezdőállapot. Ekkor alkalmazva az átmenetfüggvényt a következő átmenettáblázatot kapjuk: δ 0 1 S 0 {S 2 } {S 3 } S 1 {S 2 } S 2 {S 3 } S 3 {S 3 } {S 3 } S 4 {S 5 } {S 3 } S 5 {S 3 } {S 3 } S 6 {S 5 } {S 3 } Ebben az automatában sok elérhetetlen állapot van. Az Elérhető-állapotok algoritmus szerint a véges automata elérhető állapotai a következők szerint határozhatók meg. U 0 = {S 0 }, U 1 = {S 0, S 2, S 3 }, U 2 = {S 0, S 2, S 3 } = U 1 = U. Az S 0 kezdőállapot és egyben végállapot is. Az S 2 és S 3 mindegyike végállapot. Az S 1, S 4, S 5, S 6 elérhetetlen állapotok, ezért kizárjuk őket a véges automatából. Az így kapott véges automata átmenettáblázata a következő: δ 0 1 S 0 {S 2 } {S 3 } S 2 {S 3 } S 3 {S 3 } {S 3 } Az ennek megfelelő determinisztikus véges automata átmenetgráfja a 2.5. ábrán látható.

akonyv 2006/12/18 11:53 page 28 #36 28 2. Véges automaták és reguláris nyelvek A 2.2.1 tétel által nyújtott algoritmus egyszerűsíthető. Nem kell a nemdeterminisztikus véges automata állapothalmazának minden részhalmazát figyelembe venni. 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 } amely lényegében ugyanaz (ha eltekintünk a jelölésektől), mint az előbb kapott véges automata átmenettáblázata. 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 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.

akonyv 2006/12/18 11:53 page 29 #37 2.3. Determinisztikus véges automaták ekvivalenciájának vizsgálata 29 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 + 1 12 q k q 13 M[i,j] {q k } 14 Q Q {q k } 15 else M[i,j] 16 i i + 1 17 until i = k + 1 18 return az A automata M átmenettáblázata Mivel a repeat ciklust annyiszor végezzük el, ahány állapota van az új véges automatának, legrosszabb esetben ez exponenciális érték is lehet, hisz ha a nemdeterminisztikus véges automata állapotainak száma n, akkor az eredményautomatának akár 2 n 1 állapota is lehet. (Egy n elemű halmaz részhalmazainak a száma, beleértve az üres halmazt is, 2 n.) A 2.2.1 tétel szerint tetszőleges nemdeterminisztikus véges automatához mindig hozzárendelhető egy vele ekvivalens determinisztikus véges automata. Ez fordítva is igaz, mivel az értelmezés szerint minden determinisztikus véges automata egyben nemdeterminisztikus is. Ezért a nemdeterminisztikus véges automaták ugyanazt a nyelvosztályt ismerik fel, mint a determinisztikus véges automaták. 2.3. Determinisztikus véges automaták ekvivalenciájának vizsgálata Ebben a részben csak teljes, determinisztikus véges automatákkal dolgozunk. Ezen automaták esetében a δ(q, a) halmaz mindig egyetlen elemet tartalmaz. Néha egyszerűbb, bizonyos képletekben, a δ(q, a) halmaz helyett annak az elemét használni, ezért értelmezzük az egyelemű A = {a} halmazra az elem(a) függvényt, amely visszaadja az A halmaz egyetlen elemét, azaz elem(a) = a. Determinisztikus véges automaták ekvivalenciáját vizsgáljuk az azonos címkéjű, kezdőállapottal kezdődő séták segítségével a két véges automatában. Ha egyik séta végállapottal végződik, a másik pedig nem, akkor a két automata nyilvánvalóan nem lehet ekvivalens.