Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Teljes visszalépéses elemzés

Hasonló előadás


Az előadások a következő témára: "Teljes visszalépéses elemzés"— Előadás másolata:

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

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

3 Teljes visszalépéses elemzés
az elemzés balrekurziómentes L nyelvtanokra jó az elemzés menetét egy négyessel írjuk le állapot q: előrehaladás b: visszalépés t: terminálás – véget ért az elemzés mutató a bemenet következő elemére az elemzés története (verem) vizsgált mondatforma (verem) kezdőállapot: (q, 1, , S#) 2

4 Teljes visszalépéses elemzés
az elemzés szabályai ha q állapotban vagyunk (előrehaladás) ha a mondatformában terminális jön... ... és az megegyezik az aktuális pozíción elhelyezkedő terminálissal, léptetjük a pozíciót, és áthelyezzük a terminálist az elemzés történetének végére ... és nem egyezik, b állapotba váltunk ha nemterminális jön a mondatformában, áthelyezzük az elemzés történetébe, és az első vele szereplő szabály jobb oldalát a vizsgált mondatforma elejére fűzzük ha a mondat végére értünk (# jel következik) ... és a szöveg végén áll a mutató, t állapotba váltunk ... különben pedig b állapotba ha t állapotban vagyunk, készen vagyunk, és a mondat helyes; a szintaxisfa az elemzés történetében található

5 Teljes visszalépéses elemzés
az elemzés szabályai ha b állapotban vagyunk (visszalépés) ha az elemzés történetének végén terminális áll, visszaírjuk az vizsgált mondatforma elejére, eltávolítjuk az elemzés végéről, és visszaállítjuk eggyel a mutatót ha az elemzés történetének végén nemterminális áll ... és még van vele alkalmazható szabály, akkor feljegyezzük, hanyadik alkalmazott szabálynál tartunk, és az előző szabály jobb oldalát, amelynek ekkor a vizsgált mondatforma elején kell lennie, lecseréljük az aktuális jobb oldalra ... ha már minden alkalmazható szabályt végigpróbáltunk, akkor visszaírjuk a vizsgált mondatforma elejére, és kitöröljük az elemzés végéről ha az elemzés története üres, a mondat nem eleme a nyelvnek kellemetlen, hogy nem tudunk semmit se mondani arról, hol rontottuk el a mondatot

6 Teljes visszalépéses elemzés
az előző elemzés menete formálisan (ez a lényeg): (q, 1, , S#) ® (q, 1, S1, aAd#) ® (q, 2, S1a, Ad#) ® (q, 2, S1aA1, bd#) ® (b, 2, S1aA1, bd#) ® (b, 2, S1aA2, cd#) ® (q, 2, S1aA2c, d#) ® (b, 2, S1aA2c, d#) ® (b, 2, S1aA2, cd#) ® (b, 2, S1a, Ad#) ® (b, 1, S1, aAd#) ® (q, 1, S2, aB#) ® (q, 2, S2a, B#) ® (q, 2, S2aB1, ccd#) ® (q, 3, S2aB1c, cd#) ® (q, 4, S2aB1cc, d#) ® (q, 5, S2aB1ccd, #) ® (t, 5, S2aB1ccd, #)

7 Teljes visszalépéses elemzés
feladat adott a következő nyelvtan S » T | TE E » +T | +TE T » F | FU U » *F | *FU F » i | [S] elemezzük a következő szöveget: i+i# # (vagyis az üres szöveg) mi lesz az elemzés végén az elemző állapota? hogyan néz ki a kapott szintaxisfa? hány lépést tettünk meg?

8 Teljes visszalépéses elemzés
összesen 32 lépés lesz, ebből az elsők: (q, 1, ε, S#) ® (q, 1, S1, T#) ® (q, 1, S1T1, F#) ® (q, 1, S1T1F1, i#) ® (q, 2, S1T1F1i, #) ® (b, 2, S1T1F1i, #) ® (b, 1, S1T1F1, i#) ® (q, 1, S1T1F2, [E]#) ® (b, 1, S1T1F2, [E]#) ® (b, 1, S1T1, F#) ® (q, 1, S1T2, FU#) ® (q, 1, S1T2F1, iU#) ® (q, 1, S1T2F1i, U#) ® (q, 1, S1T2F1iU1, *F#) ® ...

9 Teljes visszalépéses elemzés
Az elemzés végállapota: (t, 4, S2T1F1iE1+T1F1i, #) Ez kiolvasható a fából szélességi bejárással; a harmadik komponens alapján pedig fel lehet építeni a szintaxisfát. T E F T F i + i

10 Korlátozott visszalépéses elemzés
mohó algoritmus: elfogadott terminálist nem von vissza a grammatikát át kell hozzá alakítani A » ab | ag helyett A » aB és B » b | g szabályok nem tartalmazhatják egymást, azaz nem lehet ilyen: A » x és B » xb működése: programozott mikrogép 1 bites regiszter mutató a szövegre mikroprocesszor verem

11 Korlátozott visszalépéses elemzés
általános programsor: működés: if a = c[i] then c[i] a szöveg i-edik karakterét jelöli i = i + 1 execute AT else if nemterminális( a ) then push i call a if reg then end if else execute AF címke a AT AF execute X: ha üres a mező: a következő sorra megyünk logikai érték esetén: a regiszter felveszi az értéket, majd visszatérünk a rutinból OK vagy ERROR: program vége

12 Korlátozott visszalépéses elemzés
egy általános szabály A » aBcd programja A a false B false AF mindig false, AT az utolsó sorban true, különben üres. c false d true false S-hez tartozó szabály S » ABc programja S A ERROR B ERROR Különbségek: jobb oldal végén # (ez jelzi a szöveg végét) true és false helyett OK és ERROR (ezek jelzik az elemzés végét) c ERROR # OK ERROR

13 Korlátozott visszalépéses elemzés
epszilon-szabály A » ε programja A X * true X * false false a csillagok helyére bármilyen jel kerülhet több alternatívával rendelkező szabály A » b | g | d programja átírjuk a szabályt A » X | Y | d alakra, ahol X és Y új nemterminálisok A X true Y true d utolsó sora kivételével, mint az egyszerű szabálynál, AF false és AT üres d1 false ... false dutolsó true false

14 Korlátozott visszalépéses elemzés
feladat: add meg az alábbi nyelvtan programját! S » AB A » aa | a B » b | ac adj meg egy olyan mondatot, amely eleme a nyelvnek, de a program mégse fogadja el! az elemző komoly hiányossága a nemteljessége feladat: add meg az alábbi nyelvtan programját, majd elemezd az a=(a+b)# mondatot vele! S » A A » B=B B » a | b | ( B + B )

15 Korlátozott visszalépéses elemzés
az A » aa | a szabály átalakítandó C új nemterminális A » aC C » a | ε S A ERROR B ERROR # OK ERROR A a false C true false B b true ha az alternatíva csak egy terminálist tartalmaz, akkor nem szükséges új nyelvtani jelet bevezetni a false c true false C a true S » AB A » aa | a B » b | ac true false Cε2 true Cε2 a false false

16 Korlátozott visszalépéses elemzés
az aac# szöveg eleme a nyelvnek az alábbi szintaxisfával az elemző azonban rossz szabályt próbál alkalmazni, és elakad S A B c a S A B a a b a c

17 Korlátozott visszalépéses elemzés
az elemzés állapota tartalmazza: a pozíciót a szövegben a végrehajtandó sor sorszámát a visszatérési címeket kezdetben: S A ERROR # OK ERROR A B false = false 1 1 B true false B a true b true ( false B false S » A A » B=B B » a | b | ( B + B ) + false B false ) true false

18 Korlátozott visszalépéses elemzés
1 1 1 S A ERROR 2 # OK ERROR 3 A B false 4 = false 5 B true false 6 B a true 7 b true 8 ( false 9 B false 10 + false 11 B false a = ( a + b ) # 12 ) true false

19 Korlátozott visszalépéses elemzés
1 1 1 S A ERROR 1 3 1 2 # OK ERROR 3 A B false 4 = false 5 B true false 6 B a true 7 b true 8 ( false 9 B false 10 + false 11 B false a = ( a + b ) # 12 ) true false

20 Korlátozott visszalépéses elemzés
1 1 1 S A ERROR 1 3 1 2 # OK ERROR 1 6 1 3 3 A B false 4 = false 5 B true false 6 B a true 7 b true 8 ( false 9 B false 10 + false 11 B false a = ( a + b ) # 12 ) true false

21 Korlátozott visszalépéses elemzés
1 1 1 S A ERROR 1 3 1 2 # OK ERROR 1 6 1 3 3 A B false 2 3 1 4 = false 5 B true false 6 B a true 7 b true 8 ( false 9 B false 10 + false 11 B false a = ( a + b ) # 12 ) true false

22 Korlátozott visszalépéses elemzés
1 1 1 S A ERROR 1 3 1 2 # OK ERROR 1 6 1 3 3 A B false 2 3 1 4 = false 2 4 1 5 B true false 6 B a true 7 b true 8 ( false 9 B false 10 + false 11 B false a = ( a + b ) # 12 ) true false

23 Korlátozott visszalépéses elemzés
1 1 1 S A ERROR 1 3 1 2 # OK ERROR 1 6 1 3 3 A B false 2 3 1 4 = false 2 4 1 5 B true false 3 5 1 6 B a true 7 b true 8 ( false 9 B false 10 + false 11 B false a = ( a + b ) # 12 ) true false

24 Korlátozott visszalépéses elemzés
1 1 1 S A ERROR 1 3 1 2 # OK ERROR 1 6 1 3 3 A B false 2 3 1 4 = false 2 4 1 5 B true false 3 5 1 6 B a true 3 6 1 5 7 b true 8 ( false 9 B false 10 + false 11 B false a = ( a + b ) # 12 ) true false

25 Korlátozott visszalépéses elemzés
1 1 1 S A ERROR 1 3 1 2 # OK ERROR 1 6 1 3 3 A B false 2 3 1 4 = false 2 4 1 5 B true false 3 5 1 6 B a true 3 6 1 5 7 b true 3 7 1 5 8 ( false 9 B false 10 + false 11 B false a = ( a + b ) # 12 ) true false

26 Korlátozott visszalépéses elemzés
1 1 1 S A ERROR 1 3 1 2 # OK ERROR 1 6 1 3 3 A B false 2 3 1 4 = false 2 4 1 5 B true false 3 5 1 6 B a true 3 6 1 5 7 b true 3 7 1 5 8 ( false 3 8 1 5 9 B false 10 + false 11 B false a = ( a + b ) # 12 ) true false

27 Korlátozott visszalépéses elemzés
1 1 1 S A ERROR 1 3 1 2 # OK ERROR 1 6 1 3 3 A B false 2 3 1 4 = false 2 4 1 5 B true false 3 5 1 6 B a true 3 6 1 5 7 b true 3 7 1 5 8 ( false 3 8 1 5 9 B false 4 9 1 5 10 + false 11 B false a = ( a + b ) # 12 ) true false

28 Korlátozott visszalépéses elemzés
1 1 1 S A ERROR 1 3 1 2 # OK ERROR 1 6 1 3 3 A B false 2 3 1 4 = false 2 4 1 5 B true false 3 5 1 6 B a true 3 6 1 5 7 b true 3 7 1 5 8 ( false 3 8 1 5 9 B false 4 9 1 5 10 + false 4 6 1 5 9 11 B false a = ( a + b ) # 12 ) true false

29 Korlátozott visszalépéses elemzés
1 1 5 9 1 5 1 S A ERROR 1 3 1 2 # OK ERROR 1 6 1 3 3 A B false 2 3 1 4 = false 2 4 1 5 B true false 3 5 1 6 B a true 3 6 1 5 7 b true 3 7 1 5 8 ( false 3 8 1 5 9 B false 4 9 1 5 10 + false 4 6 1 5 9 11 B false a = ( a + b ) # 12 ) true false

30 Korlátozott visszalépéses elemzés
1 1 5 9 1 5 1 S A ERROR 1 3 1 5 10 1 5 2 # OK ERROR 1 6 1 3 3 A B false 2 3 1 4 = false 2 4 1 5 B true false 3 5 1 6 B a true 3 6 1 5 7 b true 3 7 1 5 8 ( false 3 8 1 5 9 B false 4 9 1 5 10 + false 4 6 1 5 9 11 B false a = ( a + b ) # 12 ) true false

31 Korlátozott visszalépéses elemzés
1 1 5 9 1 5 1 S A ERROR 1 3 1 5 10 1 5 2 # OK ERROR 1 6 1 3 6 11 1 5 3 A B false 2 3 1 4 = false 2 4 1 5 B true false 3 5 1 6 B a true 3 6 1 5 7 b true 3 7 1 5 8 ( false 3 8 1 5 9 B false 4 9 1 5 10 + false 4 6 1 5 9 11 B false a = ( a + b ) # 12 ) true false

32 Korlátozott visszalépéses elemzés
1 1 5 9 1 5 1 S A ERROR 1 3 1 5 10 1 5 2 # OK ERROR 1 6 1 3 6 11 1 5 3 A B false 2 3 1 6 6 1 5 11 4 = false 2 4 1 5 B true false 3 5 1 6 B a true 3 6 1 5 7 b true 3 7 1 5 8 ( false 3 8 1 5 9 B false 4 9 1 5 10 + false 4 6 1 5 9 11 B false a = ( a + b ) # 12 ) true false

33 Korlátozott visszalépéses elemzés
1 1 5 9 1 5 1 S A ERROR 1 3 1 5 10 1 5 2 # OK ERROR 1 6 1 3 6 11 1 5 3 A B false 2 3 1 6 6 1 5 11 4 = false 2 4 1 6 7 1 5 11 5 B true false 3 5 1 6 B a true 3 6 1 5 7 b true 3 7 1 5 8 ( false 3 8 1 5 9 B false 4 9 1 5 10 + false 4 6 1 5 9 11 B false a = ( a + b ) # 12 ) true false

34 Korlátozott visszalépéses elemzés
1 1 5 9 1 5 1 S A ERROR 1 3 1 5 10 1 5 2 # OK ERROR 1 6 1 3 6 11 1 5 3 A B false 2 3 1 6 6 1 5 11 4 = false 2 4 1 6 7 1 5 11 5 B true false 3 5 1 7 11 1 5 6 B a true 3 6 1 5 7 b true 3 7 1 5 8 ( false 3 8 1 5 9 B false 4 9 1 5 10 + false 4 6 1 5 9 11 B false a = ( a + b ) # 12 ) true false

35 Korlátozott visszalépéses elemzés
1 1 5 9 1 5 1 S A ERROR 1 3 1 5 10 1 5 2 # OK ERROR 1 6 1 3 6 11 1 5 3 A B false 2 3 1 6 6 1 5 11 4 = false 2 4 1 6 7 1 5 11 5 B true false 3 5 1 7 11 1 5 6 B a true 3 6 1 5 7 12 1 5 7 b true 3 7 1 5 8 ( false 3 8 1 5 9 B false 4 9 1 5 10 + false 4 6 1 5 9 11 B false a = ( a + b ) # 12 ) true false

36 Korlátozott visszalépéses elemzés
1 1 5 9 1 5 1 S A ERROR 1 3 1 5 10 1 5 2 # OK ERROR 1 6 1 3 6 11 1 5 3 A B false 2 3 1 6 6 1 5 11 4 = false 2 4 1 6 7 1 5 11 5 B true false 3 5 1 7 11 1 5 6 B a true 3 6 1 5 7 12 1 5 7 b true 3 7 1 5 8 5 1 8 ( false 3 8 1 5 9 B false 4 9 1 5 10 + false 4 6 1 5 9 11 B false a = ( a + b ) # 12 ) true false

37 Korlátozott visszalépéses elemzés
1 1 5 9 1 5 1 S A ERROR 1 3 1 5 10 1 5 2 # OK ERROR 1 6 1 3 6 11 1 5 3 A B false 2 3 1 6 6 1 5 11 4 = false 2 4 1 6 7 1 5 11 5 B true false 3 5 1 7 11 1 5 6 B a true 3 6 1 5 7 12 1 5 7 b true 3 7 1 5 8 5 1 8 ( false 3 8 1 5 8 1 9 B false 4 9 1 5 10 + false 4 6 1 5 9 11 B false a = ( a + b ) # 12 ) true false

38 Korlátozott visszalépéses elemzés
1 1 5 9 1 5 1 S A ERROR 1 3 1 5 10 1 5 2 # OK ERROR 1 6 1 3 6 11 1 5 3 A B false 2 3 1 6 6 1 5 11 4 = false 2 4 1 6 7 1 5 11 5 B true false 3 5 1 7 11 1 5 6 B a true 3 6 1 5 7 12 1 5 7 b true 3 7 1 5 8 5 1 8 ( false 3 8 1 5 8 1 9 B false 4 9 1 5 8 2 10 + false 4 6 1 5 9 11 B false a = ( a + b ) # 12 ) true false

39 Korlátozott visszalépéses elemzés
1 1 5 9 1 5 1 S A ERROR 1 3 1 5 10 1 5 2 # OK ERROR 1 6 1 3 6 11 1 5 3 A B false 2 3 1 6 6 1 5 11 4 = false 2 4 1 6 7 1 5 11 5 B true false 3 5 1 7 11 1 5 6 B a true 3 6 1 5 7 12 1 5 7 b true 3 7 1 5 8 5 1 8 ( false 3 8 1 5 8 1 9 B false 4 9 1 5 8 2 10 + false 4 6 1 5 9 9 OK 11 B false a = ( a + b ) # 12 ) true false


Letölteni ppt "Teljes visszalépéses elemzés"

Hasonló előadás


Google Hirdetések