• Nem Talált Eredményt

Fordítóprogramok feladatgyűjtemény

N/A
N/A
Protected

Academic year: 2022

Ossza meg "Fordítóprogramok feladatgyűjtemény"

Copied!
122
0
0

Teljes szövegt

(1)

Fordítóprogramok feladatgyűjtemény

Aszalós, László

Herendi, Tamás, Debreceni Egyetem

(2)

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

(3)

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

(4)
(5)

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.

(6)

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.

(7)

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:

(8)

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

(9)

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

(10)

Feladatok

3. Determinizálja az alábbi automatát! Megoldás

4. Determinizálja az alábbi automatát! Megoldás

(11)

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

(12)

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

(13)

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

(14)

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

(15)

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

(16)

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

(17)

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!

(18)

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

(19)

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

(20)

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!

(21)

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'

(22)

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

(23)

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

(24)

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

(25)

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

(26)

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

(27)

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

(28)

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

(29)

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

(30)

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

(31)

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

(32)

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

(33)

Megoldások

2. ab*+bc*+ca*

3. a(a*+b*)b

4. (a+b)*+(b+a)*

(34)

Megoldások

5. (a*ba*b)*

6. b*ab*ab*

7. ((a+b)(b+a))*

(35)

Megoldások

8. a*b*c

9. ((a*+b)*c)*

10. ab*a+a*ba*

(36)

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)*

(37)

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

(38)

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

(39)

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

(40)

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.

(41)

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

(42)

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

(43)

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

(44)

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.

(45)

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

(46)

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

(47)

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

Hivatkozások

KAPCSOLÓDÓ DOKUMENTUMOK

az angyal bevezeto szavai (belyzetkep, utasitas, batoritas) 4. az emberi reakci6.. A sziiletesi hiradasokra jellemz6, bogy olyan esemenyekrol adnak hirt, vagy tartalmaznak

lósítható. De egyes rendszerek emellett már a természetes nyelv ű lekérdezést is lehet ő vé teszik. Azonban mivel sokan csak egy-két átfogó szót vagy kifejezést

A 12.13 Tételből következik, hogy véges ábécé felett minden definit, s így minden nilpotens nyelv is iterációmentes.. Szükségünk lesz néhány félcsoportelméleti fogalomra

A szimbólumtáblában az adott nyelv azonosítóiról (pl. típusok nevei,változók, függvény nevek) tárolunk információkat. Ilyen információ lehet például egy változó esetén

Mennyi annak a valószínűsége, hogy két, egymástól függetlenül kitöltött lottószelvény közül legalább az egyik pontosan négytalálatos3. Az A és B események közül

b) a Közösségben létrejött vagy elõállított olyan termékek, amelyek olyan anyagokat tartalmaznak, amelyek nem teljes egészében ott létrejöttek vagy elõállítottak,

Indikáció: 3.00 D cylinder feletti reguláris és irreguláris astigmia, aphakia, sphericus -8.00 D feletti myopia, sphericus +6.00 D feletti hypermetropia Felírási jogosultság:

Indikáció: 3.00 D cylinder feletti reguláris és irreguláris astigmia, aphakia, sphericus -8.00 D feletti myopia, sphericus +6.00 D feletti hypermetropia Felírási jogosultság: