Fordítóprogramok feladatgyűjtemény
Aszalós, László
Herendi, Tamás, Debreceni Egyetem
Fordítóprogramok feladatgyűjtemény
írta Aszalós, László és Herendi, Tamás Publication date 2010
Szerzői jog © 2010 Aszalós László, Herendi Tamás
A tananyag a TÁMOP-4.1.2-08/1/A-2009-0046 számú Kelet-magyarországi Informatika Tananyag Tárház projekt keretében készült. A tananyagfejlesztés az Európai Unió támogatásával és az Európai Szociális Alap társfinanszírozásával valósult meg.
Nemzeti Fejlesztési Ügynökség http://ujszechenyiterv.gov.hu/ 06 40 638-638
Tartalom
Előszó ... ii
1. Feladatok ... 3
1. Reguláris kifejezések ... 3
2. Reguláris kifejezéseket felismerő nemdeterminisztikus automaták ... 3
3. Nemdeterminisztikus automaták determinizálása ... 5
4. Determinisztikus automaták minimalizálása ... 11
5. Balrekurzió megszüntetése ... 16
6. Általános felülről-lefelé elemzés ... 17
7. LL(1) elemzés ... 19
8. Általános alulról-felfelé elemzés ... 20
9. Operátorprecedencia elemzés ... 21
10. Egyszerű precendecia elemzés ... 22
11. LR(0) elemzés ... 23
12. SLR elemzés ... 24
13. LR(1) elemzés ... 25
14. LALR elemzés ... 26
2. Megoldások ... 28
1. Reguláris kifejezések ... 28
2. Reguláris kifejezéseket felismerő nemdeterminisztikus automaták ... 28
3. Nemdeterminisztikus automaták determinizálása ... 34
4. Determinisztikus automaták minimalizálása ... 42
5. Balrekurzió megszüntetése ... 45
6. Általános felülről-lefelé elemzés ... 50
7. LL(1) elemzés ... 53
8. Általános alulról-felfelé elemzés ... 58
9. Operátorprecedencia elemzés ... 60
10. Egyszerű precedencia elemzés ... 67
11. LR(0) elemzés ... 75
12. SLR elemzés ... 91
13. LR(1) elemzés ... 98
14. LALR elemzés ... 116
Bibliográfia ... 118
Végszó
A tananyag a Kelet-magyarországi Informatika Tananyag Tárház projekt keretében készült.
A tananyagfejlesztés az Európai Unió támogatásával és az Európai Szociális Alap társfinanszírozásával valósult meg.
Előszó
Az elmúlt negyven évben szinte megszámlálhatatlanul sok olyan program készült, melyekkel fordítóprogramokat vagy értelmezőket készíthetünk, forrásprogramok szövegét alakíthatjuk, formálhatjuk át.
Ezen programok hatékony használatához elengedhetetlen a fordítóprogramok elméleti alapjainak készségszintű ismerete. Napjainkban nagy számban férhetünk hozzá magyar és angol nyelvű szakirodalomhoz a témakörben, az így megszerzett elméleti ismeretek elmélyítéséhez szükséges feladatgyűjtemények létezéséről viszont nem tudunk. Ezt a hiányt szeretnénk a jelen kiadvánnyal pótolni.
A példatár létrehozása során a Debreceni Egyetemen tartott gyakorlatok tematikáját követtük, az ott előforduló feladatokat válogattuk a kötetbe. Az elektronikus megjelenési forma lehetőségeit kihasználva apróbb filmekkel mutatjuk be az egyes típusfeladatok megoldásait, vagy a megoldások kezdő lépéseit.
A tananyag önálló feldolgozása esetén javasoljuk a JFLAP valamint Parsing Simulator programok használatát.
Az előbbi programrendszer Java alapú, így szinte mindenütt futtatható és igen szemléletesen ábrázolja az automatákat és a gráfokat. A jelölésrendszere és a benne megvalósított algoritmusok sok helyen eltérnek az általunk használtaktól, az eltérésekre a kellő helyeken kitérünk.
Várjuk az olvasók megjegyzéseit, a hibák bejelentését, hogy a további kiadásokat ezek szerint javíthassuk.
1. fejezet - Feladatok
1. Reguláris kifejezések
1. Adjon meg egy {a,b} ábécé feletti reguláris kifejezést, amely által reprezentált nyelv szavai pontosan két a betűt tartalmaznak! Megoldás
2. Adjon meg egy {a,b} ábécé feletti reguláris kifejezést, amely által reprezentált nyelv szavai legalább két a betűt tartalmaznak! Megoldás
3. Adjon meg egy {a,b} ábécé feletti reguláris kifejezést, amely által reprezentált nyelv szavai legfeljebb két a betűt tartalmaznak! Megoldás
4. Adjon meg egy {a,b} ábécé feletti reguláris kifejezést, amely által reprezentált nyelv szavainak harmadik betűje b! Megoldás
5. Adjon meg egy {a,b,c} ábécé feletti reguláris kifejezést, amely által reprezentált nyelv szavainak hossza legalább kettő és második betűje nem b! Megoldás
6. Adjon meg egy {a,b,c} ábécé feletti reguláris kifejezést, amely által reprezentált nyelv szavai páros sok mássalhangzót tartalmaznak! Megoldás
7. Adjon meg egy {a,b} ábécé feletti reguláris kifejezést, amely által reprezentált nyelv szavaiban a b betű páros hosszú sorozatokban fordul elő! Megoldás
8. Adjon meg egy {p,k,d,[,]} ábécé feletti reguláris kifejezést, amely által reprezentált nyelv a diszjunktív normálformák nyelve! Jelölje a literálokat a p, a konjunkció és diszjunkció műveletét a k és d! Az elemi konjunkciókat záró zárójeleket szögletes zárójelekkel jelöljük. Megoldás
9. Adjon meg egy {a,b,c} ábécé feletti reguláris kifejezést, amely által reprezentált nyelv szavai a betűvel kezdődnek és nem tartalmaznak dupla betűt! Megoldás
2. Reguláris kifejezéseket felismerő nemdeterminisztikus automaták
Megjegyzés
Thompson algoritmusát igen sok módon írják le, s így bár ekvivalens, de eltérő méretű nemdeterminisztikus automatákat kapunk. Például a JFLAP algoritmusa a következő megoldást generálja az (ab+a)* reguláris kifejezés esetén:
Feladatok
JFLAP által generált nemdeterminisztikus automata 12 állapottal Az általunk követett algoritmus ennél kicsit takarékosabb, ezért is javasoljuk ezt a módszert.
Mi módszerünkkel készített automata 9 állapottal
Először lássuk, hogy hogyan kell elkészíteni az (ab+a)* reguláris kifejezést felismerő nemdeterminisztikus automatát! (www.inf.unideb.hu/~aszalos/diak/fordito/re.html)
1. Készítsen el egy az ab*+a*b reguláris kifejezést felismerő nemdeterminisztikus automatát! Megoldás 2. Készítsen el egy az ab*+bc*+ca* reguláris kifejezést felismerő nemdeterminisztikus automatát! Megoldás 3. Készítsen el egy az a(a*+b*)b reguláris kifejezést felismerő nemdeterminisztikus automatát! Megoldás 4. Készítsen el egy az (a+b)*(b+a)* reguláris kifejezést felismerő nemdeterminisztikus automatát! Megoldás 5. Készítsen el egy az (a*ba*b)* reguláris kifejezést felismerő nemdeterminisztikus automatát! Megoldás 6. Készítsen el egy a b*ab*ab* reguláris kifejezést felismerő nemdeterminisztikus automatát! Megoldás 7. Készítsen el egy az ((a+b)(b+a))* reguláris kifejezést felismerő nemdeterminisztikus automatát! Megoldás 8. Készítsen el egy az a*b*c reguláris kifejezést felismerő nemdeterminisztikus automatát! Megoldás
9. Készítsen el egy az ((a*+b)*c)* reguláris kifejezést felismerő nemdeterminisztikus automatát! Megoldás 10. Készítsen el egy az ab*a+a*ba* reguláris kifejezést felismerő nemdeterminisztikus automatát!
Megoldás
11. Készítsen el egy az (a+bb)* reguláris kifejezést felismerő nemdeterminisztikus automatát! Megoldás 12. Készítsen el egy az a*((b+c)a*(b+c)a*)* reguláris kifejezést felismerő nemdeterminisztikus
automatát! Megoldás
13. Készítsen el egy az (a+b+c)(a+c)(a+b+c)* reguláris kifejezést felismerő nemdeterminisztikus automatát! Megoldás
14. Készítsen el egy az (a+b)(a+b)b(a+b)* reguláris kifejezést felismerő nemdeterminisztikus automatát!
Megoldás
15. Készítsen el egy a b*ab*a(a+b)* reguláris kifejezést felismerő nemdeterminisztikus automatát!
Megoldás
16. Készítsen el egy a b*(a+λ)b*(a+λ)b* reguláris kifejezést felismerő nemdeterminisztikus automatát!
Megoldás
Feladatok
17. Készítsen el egy a [p(kp)*](d[p(kp)*])* reguláris kifejezést felismerő nemdeterminisztikus automatát! Megoldás
18. Készítsen el egy az (a(b(cb)*(c+λ)+c(bc)*(b+λ)))*(a+λ)+a reguláris kifejezést felismerő nemdeterminisztikus automatát! Megoldás
3. Nemdeterminisztikus automaták determinizálása
Megjegyzés
A JFLAP program ismeri a determinizálás algoritmusát, gombnyomásra újabb és újabb állapotait készíti el a determinisztikus automatának. Ha a korábbi automatánkból indulunk ki, a JFLAP futásának végeredménye a következő lesz:
JFLAP által generált determinisztikus automata
Érzésünk szerint ebben az esetben, a megoldások során kényelmesebben használható a táblázat, melyet a nemdeterminisztikus automata alapján készítünk el, és nincs szükség arra, hogy rajzos formában ábrázoljuk. A megoldásainkat is táblázatként adjuk meg. Persze előnyös a gráfok használata, segít megérteni az automaták működését.
Az alábbi feladatokban zöld színnel jelöltük a kezdőállapotot és pirossal a végállapotot. A λ- átmeneteknél nem írtuk ki a λ jelet a nyilakra.
Nézzük először, hogy az előző szakasz bemutató példájában megoldásként kapott nemdeterminisztikus automatát hogyan lehet determinizálni! (www.inf.unideb.hu/~aszalos/diak/fordito/re2fsa.html)
1. Determinizálja az alábbi automatát! Megoldás
2. Determinizálja az alábbi automatát! Megoldás
Feladatok
3. Determinizálja az alábbi automatát! Megoldás
4. Determinizálja az alábbi automatát! Megoldás
Feladatok
5. Determinizálja az alábbi automatát! Megoldás
6. Determinizálja az alábbi automatát! Megoldás
7. Determinizálja az alábbi automatát! Megoldás
Feladatok
8. Determinizálja az alábbi automatát! Megoldás
9. Determinizálja az alábbi automatát! Megoldás
10. Determinizálja az alábbi automatát! Megoldás
Feladatok
11. Determinizálja az alábbi automatát! Megoldás
12. Determinizálja az alábbi automatát! Megoldás
13. Determinizálja az alábbi automatát! Megoldás
14. Determinizálja az alábbi automatát! Megoldás
Feladatok
15. Determinizálja az alábbi automatát! Megoldás
16. Determinizálja az alábbi automatát! Megoldás
17. Determinizálja az alábbi automatát! Megoldás
18. Determinizálja az alábbi automatát! Megoldás
Feladatok
4. Determinisztikus automaták minimalizálása
Megjegyzés
A JFLAP programban lépésről lépésre követhetjük az állapothalmazok felbontását az általunk követett táblázatos módszer helyett gráffal ábrázolva. A program ezután elvárja az állapothalmazok közti átmenetek megadását. A korábbi bemutató feladatunk esetén a következő ábrát kapjuk:
Determinisztikus automatánk minimalizáltja
Lássuk először, hogy a korábbi bemutató példánk determinisztikus automatája hogyan is minimalizálható!
(www.inf.unideb.hu/~aszalos/diak/fordito/fsamin.html) 1. Minimalizálja az alábbi automatát!
a b
1 2 3
*2 4 5
*3 6 6
4 4 3
*5 6 7
6 6 6
*7 6 7
Megoldás
2. Minimalizálja az alábbi automatát!
a b c
1 2 3 4
*2 5 6 5
*3 5 5 7
*4 8 5 5
5 5 5 5
*6 5 6 5
*7 5 5 7
*8 8 5 5
Megoldás
3. Minimalizálja az alábbi automatát!
a b
1 2 3
2 4 5
Feladatok
a b
3 3 3
4 4 6
*5 3 5
*6 3 3
Megoldás
4. Minimalizálja az alábbi automatát!
a b
*1 2 3
*2 2 3
*3 2 3
Megoldás
5. Minimalizálja az alábbi automatát!
a b
*1 2 3
2 2 3
3 4 5
4 4 5
*5 2 3
Megoldás
6. Minimalizálja az alábbi automatát!
a b
1 2 3
2 4 5
3 2 3
*4 6 7
5 4 5
6 6 6
*7 6 7
Megoldás
7. Minimalizálja az alábbi automatát!
a b
*1 2 3
2 4 5
3 4 5
*4 2 3
*5 2 3
Megoldás
Feladatok
8. Minimalizálja az alábbi automatát!
a b c
1 2 3 4
2 2 3 4
3 5 3 4
*4 5 5 5
5 5 5 5
Megoldás
9. Minimalizálja az alábbi automatát!
a b c
*1 2 3 4
2 2 3 4
3 2 3 4
*4 2 3 4
Megoldás
10. Minimalizálja az alábbi automatát!
a b
1 2 3
2 4 5
*3 6 7
*4 8 3
*5 9 10
*6 6 7
7 7 7
8 8 3
*9 6 7
10 11 10
*11 7 7
Megoldás
11. Minimalizálja az alábbi automatát!
a b
*1 2 3
*2 2 3
3 4 5
4 4 4
*5 2 3
Megoldás
12. Minimalizálja az alábbi automatát!
Feladatok
a b c
*1 2 3 4
*2 2 3 4
3 5 6 7
4 5 6 7
5 5 6 7
*6 8 3 4
*7 8 3 4
*8 8 3 4
Megoldás
13. Minimalizálja az alábbi automatát!
a b c
1 2 3 4
2 5 6 7
3 5 6 7
4 5 6 7
*5 8 9 10
6 6 6 6
*7 8 9 10
*8 8 9 10
*9 8 9 10
*10 8 9 10
Megoldás
14. Minimalizálja az alábbi automatát!
a b
1 2 3
2 4 5
3 4 5
4 6 7
5 6 7
6 6 6
*7 8 9
*8 8 9
*9 8 9
Megoldás
15. Minimalizálja az alábbi automatát!
a b
1 2 3
2 4 5
Feladatok
a b
3 2 3
*4 6 7
5 4 5
*6 6 7
*7 6 7
Megoldás
16. Minimalizálja az alábbi automatát!
a b
*1 2 3
*2 4 5
*3 2 3
*4 6 7
*5 4 5
6 6 6
*7 6 7
Megoldás
17. Minimalizálja az alábbi automatát!
[ ] d k p
1 2 3 3 3 3
2 3 3 3 3 4
3 3 3 3 3 3
4 3 5 3 6 3
*5 3 3 7 3 3
6 3 3 3 3 8
7 9 3 3 3 3
8 3 5 3 6 3
9 3 3 3 3 10
10 3 11 3 12 3
*11 3 3 7 3 3
12 3 3 3 3 13
13 3 11 3 12 3
Megoldás
18. Minimalizálja az alábbi automatát!
a b c
*1 2 3 3
*2 3 4 5
3 3 3 3
*4 6 3 7
*5 6 8 3
Feladatok
a b c
*6 3 4 5
*7 6 9 3
*8 6 3 10
*9 6 3 7
*10 6 8 3
Megoldás
5. Balrekurzió megszüntetése
Megjegyzés
A JFLAP sajnos nem tartalmaz ilyen algoritmust.
Lássuk először a mintapéldánkat! (www.inf.unideb.hu/~aszalos/diak/fordito/balrek.html) 1. Szüntesse meg a balrekurziót az alábbi nyelvtanban!
S → AA | Ba A → BA | AB | a B → SS | b Megoldás
2. Szüntesse meg a balrekurziót az alábbi nyelvtanban!
S → ABC A → BC | CB B → Ca | Ab C → CC | A | a Megoldás
3. Szüntesse meg a balrekurziót az alábbi nyelvtanban!
S → aA | bB | SS A → Aa | b B → Bb | a Megoldás
4. Szüntesse meg a balrekurziót az alábbi nyelvtanban!
S → BB
A → SAS | ASA | a B → b | Ba | Bb Megoldás
5. Szüntesse meg a balrekurziót az alábbi nyelvtanban!
S → ABC A → Sa | Bb B → Aa | bb Megoldás
6. Szüntesse meg a balrekurziót az alábbi nyelvtanban!
Feladatok
S → ABA | BAB A → SS | BB B → SS | bb | a Megoldás
7. Szüntesse meg a balrekurziót az alábbi nyelvtanban!
S → AaA A → BB | b B → CaC | aCa C → SBS | cc Megoldás
8. Szüntesse meg a balrekurziót az alábbi nyelvtanban!
S → SS | CA | AC A → BB | a B → Cb | bC C → a | BC | CB Megoldás
9. Szüntesse meg a balrekurziót az alábbi nyelvtanban!
S → ASA | BSB A → a | B B → A | b Megoldás
10. Szüntesse meg a balrekurziót az alábbi nyelvtanban!
S → ABc A → a | Ba B → b | Sb Megoldás
6. Általános felülről-lefelé elemzés
Megjegyzés
Ez az elemzési módszer nincs implementálva se a JFLAP, se a Parsing Simulator programban.
Lássuk először a mintapéldánkat! (www.inf.unideb.hu/~aszalos/diak/fordito/afl.html)
A következőkben feladatonként megadunk egy-egy nyelvtant, majd két elemzendő karaktersorozatot. Miután néha több száz lépés is lehet a megoldás, felsorolunk pár állapot, melynek 5-6 rákövetkező állapotát meg kell határozni. Ezeket az állapotokat igyekeztünk úgy kiválogatni, hogy minden lényeges eset előforduljon, ezért ezen részfeladatok megoldása is elegendő lehet önálló felkészülés során. Természetesen a megoldások részben a teljes levezetés szerepel.
1.
E → T | TE' E' → +T | +TE' T → F | FT'
Feladatok
T' → *F | *FT' F → i | (E)
a. Elemezze az i*i+ inputot a megadott nyelvtan esetén! Határozza meg a (q,3,E1T2F1iT'1*F1,i), (q,5,E2T2F1iT'1*F1iE'1+T2F2,(E)T') és (b,2,E2T2F1i,T'E') állapotok rákövetkezőit! Megoldás
b. Elemezze az i*+ inputot a megadott nyelvtan esetén! Határozza meg a (b,1,E2T1F2,(E)E'), (q,3,E2T2F1iT'2*F2,(E)T'E') és (q,1,E1T1F1,i) állapotok rákövetkezőit! Megoldás
2.
S → aAbB A → aAc A → λ B → bB B → c
a. Elemezze az abab inputot a megadott nyelvtan esetén! Határozza meg a (q,1,S1,aAbB), (b,3,S1aA2bB2,c) és (q,2,S1aA2,bB) állapotok rákövetkezőit! Megoldás
b. Elemezze az aabc inputot a megadott nyelvtan esetén! Határozza meg a (q,2,S1aA2,bB), (b,3,S1aA1aA1,aAccbB) és (q,1,S1,aAbB) állapotok rákövetkezőit! Megoldás
3.
S → AB A → aAb A → aA A → b B → AA
a. Elemezze az abbab inputot a megadott nyelvtan esetén! Határozza meg a (b,4,S1A1aA3bbB1A2,aAA), (b,5,S1A2aA3bB1A3bA1aA2,aAb) és (b,5,S1A1aA3bbB1A1aA1,aAbbA) állapotok rákövetkezőit! Megoldás
b. Elemezze a bbbb inputot az előbbi nyelvtan esetén! Határozza meg a (b,2,S1A3bB1A3,bA), (b,1,S1A1,aAbB) és (q,2,S1A3bB1A3,bA) állapotok rákövetkezőit! Megoldás
4.
S → (S)S S → λ
a. Elemezze az (()) inputot a megadott nyelvtan esetén! Határozza meg a (b,4,S1(S1(S2)S1,(S)S)S), (q,1,S1,(S)S) és (b,3,S1(S1(S1,(S)S)S)S) állapotok rákövetkezőit! Megoldás
b. Elemezze az ())) inputot a megadott nyelvtan esetén! Határozza meg a (q,1,S1,(S)S), (q,3,S1(S2),S) és (b,3,S1(S2),S) állapotok rákövetkezőit! Megoldás
5.
S → aSa S → bSb S → a S → b S → λ
a. Elemezze az abbb inputot a megadott nyelvtan esetén! Határozza meg a (b,3,S1aS2bS1,aSaba), (b,4,S1aS2bS2bS3,abba) és (q,3,S1aS2bS5,ba) állapotok rákövetkezőit! Megoldás
Feladatok
b. Elemezze az abab inputot a megadott nyelvtan esetén! Határozza meg a (q,4,S1aS2bS1aS1,aSaaba), (q,3,S1aS4b,a) és (b,5,S1aS2bS1aS2bS5,baba) állapotok rákövetkezőit! Megoldás
7. LL(1) elemzés
Megjegyzés
A JFLAP program a nyelvtan megadása után lehetővé teszi, hogy a felhasználó sorra beírja az egyes First és Follow halmazok értékeit, majd ezután elkészítse az elemző táblázatot. Hiba esetén a szoftver figyelmeztet a nem megfelelő megoldásra. A Parsing Simulator esetén nincs lehetőség a megoldásunk tesztelésére. A program külön-külön megadja a First és Follow halmazokat, valamint az elemző táblázatot.
Nézzük először, hogyan készül az LL(1) elemző táblázat! (www.inf.unideb.hu/~aszalos/diak/fordito/ll.html) 1. Készítse el az S → Sa|a nyelvtanhoz tartozó LL(1) elemző táblázatot! Megoldás
2. Készítse el az S → Aa|Bb, A → cA|c, B→cB|c nyelvtanhoz tartozó LL(1) elemző táblázatot! Megoldás 3. Készítse el az S → aA|bBc, A → Bd|Cc, B → e|λ, C → f|λ nyelvtanhoz tartozó LL(1) elemző táblázatot!
Megoldás
4. Készítse el az S → AaS|A, A → bcA|b nyelvtanhoz tartozó LL(1) elemző táblázatot! Megoldás
5. Készítse el az E → TE', E' → +TE', E' → λ, T → FT', T' → *FT', T' → λ, F → (E), F → i nyelvtanhoz tartozó LL(1) elemző táblázatot! Megoldás
6. Készítse el az S → a|ibtS|ibtSeS nyelvtanhoz tartozó LL(1) elemző táblázatot! Megoldás 7. Készítse el az S → aAab|bAbb, A → λ|a nyelvtanhoz tartozó LL(1) elemző táblázatot! Megoldás
8. Készítse el az S → ABA|cC, A → λ|a, B → λ|bD, C → AD|b, D → aAc nyelvtanhoz tartozó LL(1) elemző táblázatot! Megoldás
9. Készítse el az S → AB, A → aAb|ab, B → bBc|λ nyelvtanhoz tartozó LL(1) elemző táblázatot! Megoldás 10. Készítse el az S → Aa|b, A → bdB|B, B → abB|cB|λ nyelvtanhoz tartozó LL(1) elemző táblázatot!
Megoldás
11. Készítse el az S → ABBA, A → a|λ, B → b|λ nyelvtanhoz tartozó LL(1) elemző táblázatot! Megoldás 12. Készítse el az S → aAb|aBbb, A → aAb|c, B → aBbb|d nyelvtanhoz tartozó LL(1) elemző táblázatot!
Megoldás
13. Készítse el az S → AB, A → aAb|b, B → bBc|c nyelvtanhoz tartozó LL(1) elemző táblázatot!
Megoldás
14. Készítse el az S → Ba, A → aa|bb, B → BB|bA nyelvtanhoz tartozó LL(1) elemző táblázatot!
Megoldás
15. Készítse el az S → AB, A → a|cB, B → c|aA|bB nyelvtanhoz tartozó LL(1) elemző táblázatot!
Megoldás
16. Készítse el az S → aA|bB, A → λ|ba, B → AB|a nyelvtanhoz tartozó LL(1) elemző táblázatot!
Megoldás
17. Készítse el az S → AA|c, A → Bc|a, B → b|bb nyelvtanhoz tartozó LL(1) elemző táblázatot!
Megoldás
18. Készítse el az S → ABc, A → bA|λ, B → c nyelvtanhoz tartozó LL(1) elemző táblázatot! Megoldás
Feladatok
19. Készítse el az S → BaB, A → a|bab|λ, B → bB|a nyelvtanhoz tartozó LL(1) elemző táblázatot!
Megoldás
20. Készítse el az S → AcB, A → aAb|ba, B → aBb|cba nyelvtanhoz tartozó LL(1) elemző táblázatot!
Megoldás
8. Általános alulról-felfelé elemzés
Megjegyzés
Az általános alulról-felfele haladó elemzési módszer sem része a JFLAP programnak.
Lássuk először a mintapéldánkat! (www.inf.unideb.hu/~aszalos/diak/fordito/aaf.html)
A következőkben az általános felülről-lefelé elemzéshez hasonlóan megadunk egy-egy nyelvtant, majd nyelvtanonként két elemzendő karaktersorozatot.
1.
E → E+T E → T T → T*F T → F F → i F → (E)
a. Elemezze az i*i+ inputot a megadott nyelvtan esetén! Határozza meg a (b,2,E,245s), (q,4,i*T,45sss) és (b,3,T*,s45s) állapotok rákövetkezőit! Megoldás
b. Elemezze az i*i inputot a megadott nyelvtan esetén! Határozza meg a (b,2,E,245s), (q,2,T,45s) és (q,4,E*T,45ss245s) állapotok rákövetkezőit! Megoldás
2.
S → aAbB A → aAc A → B B → bB B → c
a. Elemezze az abab inputot a megadott nyelvtan esetén! Határozza meg a (q,3,ab,ss) és (q,5,abab,ssss) állapotok rákövetkezőit! Megoldás
b. Elemezze az aabc inputot a megadott nyelvtan esetén! Határozza meg a (b,5,aabB,5ssss), (b,5,aabA,35ssss) és (q,2,a,s) állapotok rákövetkezőit! Megoldás
3.
S → AB A → aAb A → aA A → b B → AA
a. Elemezze az abbab inputot a megadott nyelvtan esetén! Határozza meg a (q,3,ab,ss), (q,5,AAa,s4s34ss) és (q,6,Bab,ss54s34ss) állapotok rákövetkezőit! Megoldás
b. Elemezze a bbbb inputot a megadott nyelvtan esetén! Határozza meg a (q,5,AAB,54s4s4s4s), (b,5,bAAA,4s4s4ss) és (b,3,B,54s4s) állapotok rákövetkezőit! Megoldás
Feladatok
4.
S → SS S → ()
a. Elemezze az (()) inputot a megadott nyelvtan esetén! Határozza meg a (q,1,λ,λ) és (b,4,(S,2sss) állapotok rákövetkezőit! Megoldás
b. Elemezze az ())) inputot a megadott nyelvtan esetén! Határozza meg a (q,2,(,s), (q,5,())),ssss) és (q,5,S)),ss2ss) állapotok rákövetkezőit! Megoldás
5.
S → aSa S → bSb S → a S → b S → aa S → bb
a. Elemezze az abba inputot a megadott nyelvtan esetén! Határozza meg a (q,5,aSba,ss4ss), (b,5,SSba,ss4s3s) és (q,4,abS,4sss) állapotok rákövetkezőit! Megoldás
b. Elemezze az abab inputot a megadott nyelvtan esetén! Határozza meg a (q,5,aSSb,s3s4ss), (b,5,SbSb,s3ss3s) és (q,5,SSSb,s3s4s3s) állapotok rákövetkezőit! Megoldás
9. Operátorprecedencia elemzés
Megjegyzés
Ebben az esetben sem a JFLAP, sem a Parsing Simulator nem segít rajtunk, ez a „régimódi” elemzés egyikben sem került implementálásra.
Nézzük először, hogyan történik az operátorprecedencia elemző táblázat készítése!
(www.inf.unideb.hu/~aszalos/diak/fordito/op.html)
1. Készítse el az S → Sa|a nyelvtanhoz tartozó operátorprecedencia elemző táblázatot! Megoldás
2. Készítse el az S → Aa|Bb, A → cA|c, B→cB|c nyelvtanhoz tartozó operátor precedencia elemző táblázatot!
Megoldás
3. Készítse el az S → aA|bec|bc, A → ed|d|fc|c nyelvtanhoz tartozó operátorprecedencia elemző táblázatot!
Megoldás
4. Készítse el az S → AaS|A, A → bcA|b nyelvtanhoz tartozó operátorprecedencia elemző táblázatot! Megoldás 5. Készítse el az E → E+T|T, T → T*F|F, F → (E)|i nyelvtanhoz tartozó operátorprecedencia elemző
táblázatot! Megoldás
6. Készítse el az S → a|ibtS|ibtSeS nyelvtanhoz tartozó operátorprecedencia elemző táblázatot! Megoldás 7. Készítse el az S → AA, A → b|aA nyelvtanhoz tartozó operátorprecedencia elemző táblázatot! Megoldás 8. Készítse el az S → aBa|cC, B → b|bD, C → aD|b, D → ac|aac nyelvtanhoz tartozó operátorprecedencia
elemző táblázatot! Megoldás
9. Készítse el az S → A|AB, A → aAb|ab, B → bBc|bc nyelvtanhoz tartozó operátorprecedencia elemző táblázatot! Megoldás
Feladatok
10. Készítse el az S → Aa|b, A → bdB|B, B → abB|cB|ab|c nyelvtanhoz tartozó operátorprecedencia elemző táblázatot! Megoldás
11. Készítse el az S → aAb|bBc|aBd|bAd, A → f, B → f nyelvtanhoz tartozó operátorprecedencia elemző táblázatot! Megoldás
12. Készítse el az S → aAb|aBbb, A → aAb|c, B → aBbb|d nyelvtanhoz tartozó operátorprecedencia elemző táblázatot! Megoldás
13. Készítse el az S → AB, A → aAb|b, B → bBc|c nyelvtanhoz tartozó operátorprecedencia elemző táblázatot! Megoldás
14. Készítse el az S → Ba, A → aa|bb, B → BB|bA nyelvtanhoz tartozó operátorprecedencia elemző táblázatot! Megoldás
15. Készítse el az S → AB, A → a|cB, B → c|aA|bB nyelvtanhoz tartozó operátorprecedencia elemző táblázatot! Megoldás
16. Készítse el az S → A|bB, A → a|ba, B → AB|a nyelvtanhoz tartozó operátorprecedencia elemző táblázatot! Megoldás
17. Készítse el az S → AA|c, A → Bc|a, B → b|bb nyelvtanhoz tartozó operátorprecedencia elemző táblázatot! Megoldás
18. Készítse el az S → ABc, A → bA|b, B → c nyelvtanhoz tartozó operátorprecedencia elemző táblázatot!
Megoldás
19. Készítse el az S → BaB, A → a|bab, B → bB|a nyelvtanhoz tartozó operátorprecedencia elemző táblázatot! Megoldás
20. Készítse el az S → AcB, A → aAb|ba, B → aBb|cba nyelvtanhoz tartozó operátorprecedencia elemző táblázatot! Megoldás
10. Egyszerű precendecia elemzés
Megjegyzés
A JFLAP és a Parsing Simulator programok egyike sem implementálta ezt az algoritmust.
Nézzük először, hogyan történik az egyszerű precedencia elemző táblázat készítése!
(www.inf.unideb.hu/~aszalos/diak/fordito/epp.html)
1. Készítse el az S → Sa|a nyelvtanhoz tartozó egyszerű precedencia elemző táblázatot! Megoldás
2. Készítse el az S → Aa|Bb, A → cA|c, B→cB|c nyelvtanhoz tartozó egyszerű precedencia elemző táblázatot!
Megoldás
3. Készítse el az S → aA|bec|bc, A → ed|d|fc|c nyelvtanhoz tartozó egyszerű precedencia elemző táblázatot! Megoldás
4. Készítse el az S → AaS|A, A → bcA|b nyelvtanhoz tartozó egyszerű precedencia elemző táblázatot!
Megoldás
5. Készítse el az E → E+T|T, T → T*F|F, F → (E)|i nyelvtanhoz tartozó egyszerű precedencia elemző táblázatot! Megoldás
6. Készítse el az S → a|ibtS|ibtSeS nyelvtanhoz tartozó egyszerű precedencia elemző táblázatot! Megoldás 7. Készítse el az S → AA, A → b|aA nyelvtanhoz tartozó egyszerű precedencia elemző táblázatot! Megoldás
Feladatok
8. Készítse el az S → aBa|cC, B → b|bD, C → aD|b, D → ac|aac nyelvtanhoz tartozó egyszerű precedencia elemző táblázatot! Megoldás
9. Készítse el az S → A|AB, A → aAb|ab, B → bBc|bc nyelvtanhoz tartozó egyszerű precedencia elemző táblázatot! Megoldás
10. Készítse el az S → Aa|b, A → bdB|B, B → abB|cB|ab|c nyelvtanhoz tartozó egyszerű precedencia elemző táblázatot! Megoldás
11. Készítse el az S → aAb|bBc|aBd|bAd, A → f, B → f nyelvtanhoz tartozó egyszerű precedencia elemző táblázatot! Megoldás
12. Készítse el az S → aAb|aBbb, A → aAb|c, B → aBbb|d nyelvtanhoz tartozó egyszerű precedencia elemző táblázatot! Megoldás
13. Készítse el az S → AB, A → aAb|b, B → bBc|c nyelvtanhoz tartozó egyszerű precedencia elemző táblázatot! Megoldás
14. Készítse el az S → Ba, A → aa|bb, B → BB|bA nyelvtanhoz tartozó egyszerű precedencia elemző táblázatot! Megoldás
15. Készítse el az S → AB, A → a|cB, B → c|aA|bB nyelvtanhoz tartozó egyszerű precedencia elemző táblázatot! Megoldás
16. Készítse el az S → A|bB, A → a|ba, B → AB|a nyelvtanhoz tartozó egyszerű precedencia elemző táblázatot! Megoldás
17. Készítse el az S → AA|c, A → Bc|a, B → b|bb nyelvtanhoz tartozó egyszerű precedencia elemző táblázatot! Megoldás
18. Készítse el az S → ABc, A → bA|b, B → c nyelvtanhoz tartozó egyszerű precedencia elemző táblázatot!
Megoldás
19. Készítse el az S → BaB, A → a|bab, B → bB|a nyelvtanhoz tartozó egyszerű precedencia elemző táblázatot! Megoldás
20. Készítse el az S → AcB, A → aAb|ba, B → aBb|cba nyelvtanhoz tartozó egyszerű precedencia elemző táblázatot! Megoldás
11. LR(0) elemzés
Megjegyzés
A JFLAP program a grammatika megadása után generálja az SLR elemzőt, amely tartalmazza a számunkra szükséges LR(0) elemeket. Ezekből viszont már nekünk kell az elemző táblázatot elkészíteni. A Parsing Simulator képes generálni az LR(0) elemeket és az elemző táblázatot is, csak figyelni kell arra, hogy itt a kiegészített nyelvtan a kiindulópont.
Nézzük először, hogyan történik az LR(0) elemző táblázat készítése!
(www.inf.unideb.hu/~aszalos/diak/fordito/lr0.html)
1. Készítse el az S → Sa|a nyelvtanhoz tartozó LR(0) elemző táblázatot! Megoldás
2. Készítse el az S → Aa|Bb, A → cA|c, B→cB|c nyelvtanhoz tartozó LR(0) elemző táblázatot! Megoldás 3. Készítse el az S → aA|bec|bc, A → ed|d|fc|c nyelvtanhoz tartozó LR(0) elemző táblázatot! Megoldás 4. Készítse el az S → AaS|A, A → bcA|b nyelvtanhoz tartozó LR(0) elemző táblázatot! Megoldás
5. Készítse el az E → E+T|T, T → T*F|F, F → (E)|i nyelvtanhoz tartozó LR(0) elemző táblázatot! Megoldás
Feladatok
6. Készítse el az S → a|ibtS|ibtSeS nyelvtanhoz tartozó LR(0) elemző táblázatot! Megoldás 7. Készítse el az S → AA, A → b|aA nyelvtanhoz tartozó LR(0) elemző táblázatot! Megoldás
8. Készítse el az S → aBa|cC, B → b|bD, C → aD|b, D → ac|aac nyelvtanhoz tartozó LR(0) elemző táblázatot! Megoldás
9. Készítse el az S → A|AB, A → aAb|ab, B → bBc|bc nyelvtanhoz tartozó LR(0) elemző táblázatot! Megoldás 10. Készítse el az S → Aa|b, A → bdB|B, B → abB|cB|ab|c nyelvtanhoz tartozó LR(0) elemző táblázatot!
Megoldás
11. Készítse el az S → aAb|bBc|aBd|bAd, A → f, B → f nyelvtanhoz tartozó LR(0) elemző táblázatot!
Megoldás
12. Készítse el az S → aAb|aBbb, A → aAb|c, B → aBbb|d nyelvtanhoz tartozó LR(0) elemző táblázatot!
Megoldás
13. Készítse el az S → AB, A → aAb|b, B → bBc|c nyelvtanhoz tartozó LR(0) elemző táblázatot!
Megoldás
14. Készítse el az S → Ba, A → aa|bb, B → BB|bA nyelvtanhoz tartozó LR(0) elemző táblázatot!
Megoldás
15. Készítse el az S → AB, A → a|cB, B → c|aA|bB nyelvtanhoz tartozó LR(0) elemző táblázatot!
Megoldás
16. Készítse el az S → A|bB, A → a|ba, B → AB|a nyelvtanhoz tartozó LR(0) elemző táblázatot!
Megoldás
17. Készítse el az S → AA|c, A → Bc|a, B → b|bb nyelvtanhoz tartozó LR(0) elemző táblázatot!
Megoldás
18. Készítse el az S → ABc, A → bA|b, B → c nyelvtanhoz tartozó LR(0) elemző táblázatot! Megoldás 19. Készítse el az S → BaB, A → a|bab, B → bB|a nyelvtanhoz tartozó LR(0) elemző táblázatot!
Megoldás
20. Készítse el az S → AcB, A → aAb|ba, B → aBb|cba nyelvtanhoz tartozó LR(0) elemző táblázatot!
Megoldás
12. SLR elemzés
Megjegyzés
A JFLAP program a grammatika megadása után generálja az SLR elemzőt. A Parsing Simulator hasonló eredményt szolgáltat, ám az LR(0) elemzésnél leírtaknak megfelelően itt is a kiegészített nyelvtan a kiindulópont.
Nézzük először, hogyan történik az SLR(1) elemző táblázat készítése!
(www.inf.unideb.hu/~aszalos/diak/fordito/slr.html)
1. Készítse el az S → Sa|a nyelvtanhoz tartozó SLR elemző táblázatot! Megoldás
2. Készítse el az S → Aa|Bb, A → cA|c, B→cB|c nyelvtanhoz tartozó SLR elemző táblázatot! Megoldás
3. Készítse el az S → aA|bBc, A → Bd|Cc, B → e|λ, C → f|λ nyelvtanhoz tartozó SLR elemző táblázatot!
Megoldás
4. Készítse el az S → AaS|A, A → bcA|b nyelvtanhoz tartozó SLR elemző táblázatot! Megoldás
Feladatok
5. Készítse el az E → TE', E' → +TE', E' → λ, T → FT', T' → *FT', T' → λ, F → (E), F → i nyelvtanhoz tartozó SLR elemző táblázatot! Megoldás
6. Készítse el az S → a|ibtS|ibtSeS nyelvtanhoz tartozó SLR elemző táblázatot! Megoldás 7. Készítse el az S → aAab|bAbb, A → λ|a nyelvtanhoz tartozó SLR elemző táblázatot! Megoldás
8. Készítse el az S → ABA|cC, A → λ|a, B → λ|bD, C → AD|b, D → aAc nyelvtanhoz tartozó SLR elemző táblázatot! Megoldás
9. Készítse el az S → AB, A → aAb|ab, B → bBc|λ nyelvtanhoz tartozó SLR elemző táblázatot! Megoldás
10. Készítse el az S → Aa|b, A → bdB|B, B → abB|cB|λ nyelvtanhoz tartozó SLR elemző táblázatot!
Megoldás
11. Készítse el az S → ABBA, A → a|λ, B → b|λ nyelvtanhoz tartozó SLR elemző táblázatot! Megoldás 12. Készítse el az S → aAb|aBbb, A → aAb|c, B → aBbb|d nyelvtanhoz tartozó SLR elemző táblázatot!
Megoldás
13. Készítse el az S → AB, A → aAb|b, B → bBc|c nyelvtanhoz tartozó SLR elemző táblázatot! Megoldás 14. Készítse el az S → Ba, A → aa|bb, B → BB|bA nyelvtanhoz tartozó SLR elemző táblázatot! Megoldás 15. Készítse el az S → AB, A → a|cB, B → c|aA|bB nyelvtanhoz tartozó SLR elemző táblázatot! Megoldás 16. Készítse el az S → aA|bB, A → λ|ba, B → AB|a nyelvtanhoz tartozó SLR elemző táblázatot! Megoldás 17. Készítse el az S → AA|c, A → Bc|a, B → b|bb nyelvtanhoz tartozó SLR elemző táblázatot! Megoldás 18. Készítse el az S → ABc, A → bA|λ, B → c nyelvtanhoz tartozó SLR elemző táblázatot! Megoldás 19. Készítse el az S → BaB, A → a|bab|λ, B → bB|a nyelvtanhoz tartozó SLR elemző táblázatot!
Megoldás
20. Készítse el az S → AcB, A → aAb|ba, B → aBb|cba nyelvtanhoz tartozó SLR elemző táblázatot!
Megoldás
13. LR(1) elemzés
Megjegyzés
A JFLAP program nem képes generálni az LR(1) elemeket, így a Parsing Simulator programot javasoljuk használni. Ismételten felhívjuk a figyelmet, hogy a program számára a kiegészített nyelvtan a kiindulópont.
Nézzük először, hogyan történik az LR(1) elemző táblázat készítése!
(www.inf.unideb.hu/~aszalos/diak/fordito/lr1.html)
1. Készítse el az S → Sa|a nyelvtanhoz tartozó LR(1) elemző táblázatot! Megoldás
2. Készítse el az S → Aa|Bb, A → cA|c, B→cB|c nyelvtanhoz tartozó LR(1) elemző táblázatot! Megoldás 3. Készítse el az S → aA|bec|bc, A → ed|d|fc|c nyelvtanhoz tartozó LR(1) elemző táblázatot! Megoldás 4. Készítse el az S → AaS|A, A → bcA|b nyelvtanhoz tartozó LR(1) elemző táblázatot! Megoldás
5. Készítse el az E → E+T|T, T → T*F|F, F → (E)|i nyelvtanhoz tartozó LR(1) elemző táblázatot! Megoldás 6. Készítse el az S → a|ibtS|ibtSeS nyelvtanhoz tartozó LR(1) elemző táblázatot! Megoldás
7. Készítse el az S → AA, A → b|aA nyelvtanhoz tartozó LR(1) elemző táblázatot! Megoldás
Feladatok
8. Készítse el az S → aBa|cC, B → b|bD, C → aD|b, D → ac|aac nyelvtanhoz tartozó LR(1) elemző táblázatot! Megoldás
9. Készítse el az S → A|AB, A → aAb|ab, B → bBc|bc nyelvtanhoz tartozó LR(1) elemző táblázatot! Megoldás 10. Készítse el az S → Aa|b, A → bdB|B, B → abB|cB|ab|c nyelvtanhoz tartozó LR(1) elemző táblázatot!
Megoldás
11. Készítse el az S → aAb|bBc|aBd|bAd, A → f, B → f nyelvtanhoz tartozó LR(1) elemző táblázatot!
Megoldás
12. Készítse el az S → aAb|aBbb, A → aAb|c, B → aBbb|d nyelvtanhoz tartozó LR(1) elemző táblázatot!
Megoldás
13. Készítse el az S → AB, A → aAb|b, B → bBc|c nyelvtanhoz tartozó LR(1) elemző táblázatot!
Megoldás
14. Készítse el az S → Ba, A → aa|bb, B → BB|bA nyelvtanhoz tartozó LR(1) elemző táblázatot!
Megoldás
15. Készítse el az S → AB, A → a|cB, B → c|aA|bB nyelvtanhoz tartozó LR(1) elemző táblázatot!
Megoldás
16. Készítse el az S → A|bB, A → a|ba, B → AB|a nyelvtanhoz tartozó LR(1) elemző táblázatot!
Megoldás
17. Készítse el az S → AA|c, A → Bc|a, B → b|bb nyelvtanhoz tartozó LR(1) elemző táblázatot!
Megoldás
18. Készítse el az S → ABc, A → bA|b, B → c nyelvtanhoz tartozó LR(1) elemző táblázatot! Megoldás 19. Készítse el az S → BaB, A → a|bab, B → bB|a nyelvtanhoz tartozó LR(1) elemző táblázatot!
Megoldás
20. Készítse el az S → AcB, A → aAb|ba, B → aBb|cba nyelvtanhoz tartozó LR(1) elemző táblázatot!
Megoldás
14. LALR elemzés
Megjegyzés
A JFLAP program nem képes generálni az LR(1) elemeket, ezeknél a feladatoknál is a Parsing Simulator programot javasoljuk használni. Továbbra is a kiegészített nyelvtant kell megadni a szoftver számára.
Nézzük először, hogyan történik az LALR(1) elemző táblázat készítése!
(www.inf.unideb.hu/~aszalos/diak/fordito/lalr.html)
1. Készítse el az S → Sa|a nyelvtanhoz tartozó LALR(1) elemző táblázatot! Megoldás
2. Készítse el az S → Aa|Bb, A → cA|c, B→cB|c nyelvtanhoz tartozó LALR(1) elemző táblázatot! Megoldás 3. Készítse el az S → aA|bec|bc, A → ed|d|fc|c nyelvtanhoz tartozó LALR(1) elemző táblázatot! Megoldás 4. Készítse el az S → AaS|A, A → bcA|b nyelvtanhoz tartozó LALR(1) elemző táblázatot! Megoldás
5. Készítse el az E → E+T|T, T → T*F|F, F → (E)|i nyelvtanhoz tartozó LALR(1) elemző táblázatot!
Megoldás
6. Készítse el az S → a|ibtS|ibtSeS nyelvtanhoz tartozó LALR(1) elemző táblázatot! Megoldás
Feladatok
7. Készítse el az S → AA, A → b|aA nyelvtanhoz tartozó LALR(1) elemző táblázatot! Megoldás
8. Készítse el az S → aBa|cC, B → b|bD, C → aD|b, D → ac|aac nyelvtanhoz tartozó LALR(1) elemző táblázatot! Megoldás
9. Készítse el az S → A|AB, A → aAb|ab, B → bBc|bc nyelvtanhoz tartozó LALR(1) elemző táblázatot!
Megoldás
10. Készítse el az S → Aa|b, A → bdB|B, B → abB|cB|ab|c nyelvtanhoz tartozó LALR(1) elemző táblázatot! Megoldás
11. Készítse el az S → aAb|bBc|aBd|bAd, A → f, B → f nyelvtanhoz tartozó LALR(1) elemző táblázatot!
Megoldás
12. Készítse el az S → aAb|aBbb, A → aAb|c, B → aBbb|d nyelvtanhoz tartozó LALR(1) elemző táblázatot! Megoldás
13. Készítse el az S → AB, A → aAb|b, B → bBc|c nyelvtanhoz tartozó LALR(1) elemző táblázatot!
Megoldás
14. Készítse el az S → Ba, A → aa|bb, B → BB|bA nyelvtanhoz tartozó LALR(1) elemző táblázatot!
Megoldás
15. Készítse el az S → AB, A → a|cB, B → c|aA|bB nyelvtanhoz tartozó LALR(1) elemző táblázatot!
Megoldás
16. Készítse el az S → A|bB, A → a|ba, B → AB|a nyelvtanhoz tartozó LALR(1) elemző táblázatot!
Megoldás
17. Készítse el az S → AA|c, A → Bc|a, B → b|bb nyelvtanhoz tartozó LALR(1) elemző táblázatot!
Megoldás
18. Készítse el az S → ABc, A → bA|b, B → c nyelvtanhoz tartozó LALR(1) elemző táblázatot! Megoldás 19. Készítse el az S → BaB, A → a|bab, B → bB|a nyelvtanhoz tartozó LALR(1) elemző táblázatot!
Megoldás
20. Készítse el az S → AcB, A → aAb|ba, B → aBb|cba nyelvtanhoz tartozó LALR(1) elemző táblázatot!
Megoldás
2. fejezet - Megoldások
1. Reguláris kifejezések
Megjegyzés
A feladatmegoldások során a szorzást (konkatenációt) nem jelöljük.
1. A reguláris kifejezésben mindenképpen jelölni kell a két a betűt. Ezek előtt, között és mögött tetszőleges számú b szerepelhet: b*ab*ab*.
2. Jelöljük az első két a betűt. Ezek előtt és között tetszőleges számú b szerepelhet, végül a második a-t bármi követheti: b*ab*a(a+b)*.
3. Az első megoldáshoz képest az az eltérés, hogy bármely a eltűnhet, így ezeket a+λ-val helyettesítjük:
b*(a+λ)b*(a+λ)b*.
4. Az első két betű bármi lehet, ezt követi a b, majd ezt bármi követheti: (a+b)(a+b)b(a+b)*.
5. Az első betű bármi lehet, a második csak a vagy c, majd ezt bármi követheti: (a+b+c)(a+c)(a+b+c)*. 6. Ha a mássalhangzók száma páros, akkor a szót olyan részekre lehet bontani, melyek mássalhangzókkal
kezdődnek és pontosan két mássalhangzót tartalmaznak. A két mássalhangzó között és a második mögött tetszőleges számú a betű szerepelhet. Viszont a teljes szó kezdődhet tetszőleges számú a betűvel:
a*((b+c)a*(b+c)a*)*.
7. Mivel a b csakis duplán szerepelhet, a tetszőleges szót leíró reguláris kifejezést kell egy kicsit átírni:
(a+bb)*. Más irányból megközelítve a b-k sorozatai között tetszőleges számú a lehet: (a*(bb))*.
8. Egy elemi konjunkció egy literál vagy literálok konjunkciója, tehát az első literált operátor-literál párosok követik: p(kp)*. A diszjunktív normálforma egy elemi konjunkció vagy azok diszkunkciója, azaz a szerkezet nagyon hasonló. Mivel a diszjunkció és konjunkció azonos precedenciájú, az elemi konjunkciókat zárójelezzük: [p(kp)*](d[p(kp)*])*. A kerek zárójeleknek speciális szerepe van a reguláris kifejezésekben, ezért használunk szögletes zárójeleket. Természetesen az egy literálból álló elemi konjunkciót felesleges zárójelezni, ám ezzel a [p(kp)*] reguláris kifejezés helyett p+[pkp(kp)*]-t kellett volna írni az előbbi megoldásba, amit felesleges elbonyolításnak érzünk.
9. A szó mindenképpen a betűvel kezdődik, így bontsuk olyan részekre melynek a kezdőbetűje a, és nem tartalmaz újabb a-t. Mivel páros betű nem fordulhat elő a szóban, a kezdő a betűt felváltva követheti b és c tetszőleges hosszan, de legalább egy betűnek kell itt szerepelni, mert a két a-t el kell választani egymástól.
Az utolsó rész állhat egy darab a betűből is: (a(b(cb)*(c+λ)+c(bc)*(b+λ)))*(a+λ)+a. Természetesen létezik más megoldás is, amely egyeseknek egyszerűbbnek tűnhet.
2. Reguláris kifejezéseket felismerő nemdeterminisztikus automaták
Megjegyzés
Ebben és azt ezt követő fejezetekben Thompson algoritmusát [Thompson68] alkalmazzuk kisebb lépésekben ugyanarra a 18 feladatra.
A feladatok megoldásait jelentő nemdeterminisztikus automatákat a következőképpen adjuk meg: zöld színnel jelöljük a kiinduló állapotot, és pirossal az egyedüli végállapotot. A λ-átmenetnél a nyilat nem címkézzük az egyszerűség kedvéért.
1. ab*+a*b
Megoldások
2. ab*+bc*+ca*
3. a(a*+b*)b
4. (a+b)*+(b+a)*
Megoldások
5. (a*ba*b)*
6. b*ab*ab*
7. ((a+b)(b+a))*
Megoldások
8. a*b*c
9. ((a*+b)*c)*
10. ab*a+a*ba*
Megoldások
11. (a+bb)*
12. a*((b+c)a*(b+c)a*)*
13. (a+b+c)(a+b)(a+b+c)*
14. (a+b)(a+b)b(a+b)*
Megoldások
15. b*ab*a(a+b)*
16. b*(a+λ)b*(a+λ)b*
17. [p(kp)*](d[p(kp)*])*
18. (a(b(cb)*(c+λ)+c(bc)*(b+λ)))*(a+λ)+a
Megoldások
3. Nemdeterminisztikus automaták determinizálása
Megjegyzés
Minden megoldást két formában is megadunk. Első esetben a nemdeterminisztikus automata állapotainak halmaza lesz az új automa egy-egy állapota. Az ezeket az állapotokat tartalmazó táblázatban nem jelöltük külön a kezdő és végállapotokat, csupán az átmeneteket. Kezdőállapot az, mely az A-val jelölt állapotot tartalmazza (vagyis az első), és végállapot mindaz, amely a rajzon pirossal jelölt állapotot tartalmazza.
1. Determinisztikus automata állapothalmazokkal.
a b
ABGHJ CDFHIJL KL
CDFHIJL HIJ DEFKL
KL
HIJ HIJ KL
DEFKL DEFL
DEFL DEFL
Ugyanaz az automata „hagyományos” jelöléssel.
a b
1 2 3
*2 4 5
*3 6 6
4 4 3
*5 6 7
6 6 6
*7 6 7
2. Determinisztikus automata állapothalmazokkal.
a b c
Megoldások
a b c
ABCHN DEGMS IJLMS OPRS
DEGMS EFGMS
IJLMS JKLMS
OPRS PQRS
EFGMS EFGMS
JKLMS JKLMS
PQRS PQRS
Ugyanaz az automata „hagyományos” jelöléssel.
a b c
1 2 3 4
*2 5 6 5
*3 5 5 7
*4 8 5 5
5 5 5 5
*6 5 6 5
*7 5 5 7
*8 8 5 5
3. Determinisztikus automata állapothalmazokkal.
a b
A BCDFGHJK
BCDFGHJK DEFK HIJKL
DEFK DEFK L
HIJKL HIJKL
L
Ugyanaz az automata „hagyományos” jelöléssel.
a b
1 2 3
2 4 5
3 3 3
4 4 6
*5 3 5
*6 3 3
4. Determinisztikus automata állapothalmazokkal.
a b
ABCDFIJKLNQR CDEFHIKLNOPQR CDFGHIKLMNPQR
CDEFHIKLNOPQR CDEFHIKLNOPQR CDFGHIKLMNPQR
CDFGHIKLMNPQR CDEFHIKLNOPQR CDFGHIKLMNPQR
Megoldások
Ugyanaz az automata „hagyományos” jelöléssel.
a b
*1 2 3
*2 2 3
*3 2 3
5. Determinisztikus automata állapothalmazokkal.
a b
ABCEK CDE FGI
CDE CDE FGI
FGI GHI BCEJK
GHI GHI BCEJK
BCEJK CDE FGI
Ugyanaz az automata „hagyományos” jelöléssel.
a b
*1 2 3
2 2 3
3 4 5
4 4 5
*5 2 3
6. Determinisztikus automata állapothalmazokkal.
a b
ABD EFH BCD
EFH IJL FGH
BCD EFH BCD
IJL JKL
FGH IJL FGH
JKL JKL
Ugyanaz az automata „hagyományos” jelöléssel.
a b
1 2 3
2 4 5
3 2 3
*4 6 7
5 4 5
6 6 6
*7 6 7
7. Determinisztikus automata állapothalmazokkal.
Megoldások
a b
ABCEM DGHJ FGHJ
DGHJ BCEKLM BCEILM
FGHJ BCEKLM BCEILM
BCEKLM DGHJ FGHJ
BCEILM DGHJ FGHJ
Ugyanaz az automata „hagyományos” jelöléssel.
a b
*1 2 3
2 4 5
3 4 5
*4 2 3
*5 2 3
8. Determinisztikus automata állapothalmazokkal.
a b c
ABDEG BCDEG EFG H
BCDEG BCDEG EFG H
EFG EFG H
H
Ugyanaz az automata „hagyományos” jelöléssel.
a b c
1 2 3 4
2 2 3 4
3 5 3 4
*4 5 5 5
5 5 5 5
9. Determinisztikus automata állapothalmazokkal.
a b c
ABCDEGHJKM CDEFGHJK CDEGHIJK BCDEGHJKLM
CDEFGHJK CDEFGHJK CDEGHIJK BCDEGHJKLM
CDEGHIJK CDEFGHJK CDEGHIJK BCDEGHJKLM
BCDEGHJKLM CDEFGHJK CDEGHIJK BCDEGHJKLM
Ugyanaz az automata „hagyományos” jelöléssel.
a b c
*1 2 3 4
2 2 3 4
3 2 3 4
Megoldások
a b c
*4 2 3 4
10. Determinisztikus automata állapothalmazokkal.
a b
ABHIK CDFIJK LMOP
CDFIJK GIJKP DEFLMOP
LMOP MNOP
GIJKP IJK LMOP
DEFLMOP GMNOP DEF
MNOP MNOP
IJK IJK LMOP
GMNOP MNOP
DEF GP DEF
GP
Ugyanaz az automata „hagyományos” jelöléssel.
a b
1 2 3
2 4 5
*3 6 7
*4 8 3
*5 9 10
*6 6 7
7 7 7
8 8 3
*9 6 7
10 11 10
*11 7 7
11. Determinisztikus automata állapothalmazokkal.
a b
ABCEI BCDEHI F
BCDEHI BCDEHI F
F BCEGHI
BCEGHI BCDEHI F
Ugyanaz az automata „hagyományos” jelöléssel.
a b
*1 2 3
*2 2 3
3 4 5
Megoldások
a b
4 4 4
*5 2 3
12. Determinisztikus automata állapothalmazokkal.
a b c
ABDEFHV BCDEFHV GJKMNP IJKMNP
BCDEFHV BCDEFHV GJKMNP IJKMNP
GJKMNP KLMNP EFHORSUV EFHQRSUV
IJKMNP KLMNP EFHORSUV EFHQRSUV
KLMNP KLMNP EFHORSUV EFHQRSUV
EFHORSUV EFHSTUV GJKMNP IJKMNP
EFHQRSUV EFHSTUV GJKMNP IJKMNP
EFHSTUV EFHSTUV GJKMNP IJKMNP
Ugyanaz az automata „hagyományos” jelöléssel.
a b c
*1 2 3 4
*2 2 3 4
3 5 6 7
4 5 6 7
5 5 6 7
*6 8 3 4
*7 8 3 4
*8 8 3 4
13. Determinisztikus automata állapothalmazokkal.
a b c
ABCEH DGJKM FGJKM IJKM
DGJKM LOPQRTWZ NOPQRTWZ
FGJKM LOPQRTWZ NOPQRTWZ
IJKM LOPQRTWZ NOPQRTWZ
LOPQRTWZ PQRSTVWYZ PQRTUVWYZ PQRTWXYZ
NOPQRTWZ PQRSTVWYZ PQRTUVWYZ PQRTWXYZ
PQRSTVWYZ PQRSTVWYZ PQRTUVWYZ PQRTWXYZ
PQRTUVWYZ PQRSTVWYZ PQRTUVWYZ PQRTWXYZ
PQRTWXYZ PQRSTVWYZ PQRTUVWYZ PQRTWXYZ
Ugyanaz az automata „hagyományos” jelöléssel.
a b c
1 2 3 4
2 5 6 7
3 5 6 7
Megoldások
a b c
4 5 6 7
*5 8 9 10
6 6 6 6
*7 8 9 10
*8 8 9 10
*9 8 9 10
*10 8 9 10
14. Determinisztikus automata állapothalmazokkal.
a b
ABD CFGI EFGI
CFGI HK JK
EFGI HK JK
HK LMNPS
JK LMNPS
LMNPS MNOPRS MNPQRS
MNOPRS MNOPRS MNPQRS
MNPQRS MNOPRS MNPQRS
Ugyanaz az automata „hagyományos” jelöléssel.
a b
1 2 3
2 4 5
3 4 5
4 6 7
5 6 7
6 6 6
*7 8 9
*8 8 9
*9 8 9
15. Determinisztikus automata állapothalmazokkal.
a b
ABD EFH BCD
EFH IJKMP FGH
BCD EFH BCD
IJKMP JKLMOP JKMNOP
FGH IJKMP FGH
JKLMOP JKLMOP JKMNOP
JKMNOP JKLMOP JKMNOP
Ugyanaz az automata „hagyományos” jelöléssel.
Megoldások
a b
1 2 3
2 4 5
3 2 3
*4 6 7
5 4 5
*6 6 7
*7 6 7
16. Determinisztikus automata állapothalmazokkal.
a b
ABDEGHIJLMOPQRT FIJLMNOPQRT BCDEGHIJKLMOPQRST
FIJLMNOPQRT NQRT JKLMOPQRST
BCDEGHIJKLMOPQRST FIJLMNOPQRT BCDEGHIJKLMOPQRST
NQRT RST
JKLMOPQRST NQRT JKLMOPQRST
RST RST
Ugyanaz az automata „hagyományos” jelöléssel.
a b
*1 2 3
*2 4 5
*3 2 3
*4 6 7
*5 4 5
6 6 6
*7 6 7
17. Determinisztikus automata állapothalmazokkal.
[ ] d k p
A B
B CDG
CDG HIR E
HIR J
E DFG
J K
DFG HIR E
K LMP
LMP IQR N
IQR J
N MOP
MOP IQR N
Megoldások
Ugyanaz az automata „hagyományos” jelöléssel.
[ ] d k p
1 2 3 3 3 3
2 3 3 3 3 4
3 3 3 3 3 3
4 3 5 3 6 3
*5 3 3 7 3 3
6 3 3 3 3 8
7 9 3 3 3 3
8 3 5 3 6 3
9 3 3 3 3 10
10 3 11 3 12 3
*11 3 3 7 3 3
12 3 3 3 3 13
13 3 11 3 12 3
18. Determinisztikus automata állapothalmazokkal.
a b c
ABCbcefghj DEPdgij
DEPdgij CFGJKMNOabcefgj CQRUVXYZabcefgj
CFGJKMNOabcefgj DEPdgj CHLOabcefgj
CQRUVXYZabcefgj DEPdgj CSWZabcefgj
DEPdgj CFGJKMNOabcefgj CQRUVXYZabcefgj
CHLOabcefgj DEPdgj CGIJKMNOabcefgj
CSWZabcefgj DEPdgj CRTUVXYZabcefgj
CGIJKMNOabcefgj DEPdgj CHLOabcefgj
CRTUVXYZabcefgj DEPdgj CSWZabcefgj
Ugyanaz az automata „hagyományos” jelöléssel.
a b c
*1 2 3 3
*2 3 4 5
3 3 3 3
*4 6 3 7
*5 6 8 3
*6 3 4 5
*7 6 9 3
*8 6 3 10
*9 6 3 7
*10 6 8 3
4. Determinisztikus automaták minimalizálása
Megoldások
1.
végállapotok nem végállapotok
2,3,5,7 1,4,6
2,5,7 3 1 4 6
2 5,7
2.
végállapotok nem végállapotok
2,3,4,6,7,8 1,5
2,6 3,7 4,8 1 5
3.
végállapotok nem végállapotok
5,6 1,2,3,4
5 6 1,3 2 4
1 3
4.
végállapotok nem végállapotok
1,2,3 5.
végállapotok nem végállapotok
1,5 2,3,4
2 3,4
6.
végállapotok nem végállapotok
4,7 1,2,3,5,6
1,3,6 2,5
1,3 6
7.
végállapotok nem végállapotok
1,4,5 2,3
8.
végállapotok nem végállapotok
4 1,2,3,5
1,2,3 5
1,2 3