Teljes visszalépéses elemzés

Hasonló dokumentumok
Chomsky-féle hierarchia

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

Informatika szigorlat. A lexikális elemző feladatai közé tartozik a whitespace karakterek (a

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



ZH feladatok megoldásai

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

MintaFeladatok 2.ZH Megoldások

Chomsky-féle hierarchia

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

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

MintaFeladatok 1.ZH Megoldások



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

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

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

2. Visszalépéses stratégia



















Atomataelmélet: A Rabin Scott-automata

MintaFeladatok 1.ZH Megoldások

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

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

Automaták és formális nyelvek

MintaFeladatok 2.ZH Megoldások





Fordítóprogramok beugrókérdések

Miért van szükség fordítóprogramokra? Fordítóprogramok célja és szerkezete. Miért van szükség fordítóprogramokra?

Informatika 1 2. el adás: Absztrakt számítógépek

Fordítóprogramok (A,C,T szakirány) Feladatgy jtemény

Szemantikai elemzés. konzisztenciájának vizsgálata a szemantikai elemzés feladata lesz.

Bisonc++ tutorial. Dévai Gergely. A szabály bal- és jobboldalát : választja el egymástól. A szabályalternatívák sorozatát ; zárja le.







\ _/ / / _ \ ' / _` / ' / _ \ / _` (_) (_ (_) (_ \_ \ / _ \,_\ \ / \, / / 2.1. Alapfogalmak. 1. Mirol mire fordít a fordítóprogram?

Szegmentálás. Memória kezelési stratégia mely a felhasználó nézőpontját támogatja Például:

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

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

ML/GL (164)

Formális nyelvek - 5.

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

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

Mikroprocesszor CPU. C Central Központi. P Processing Számító. U Unit Egység

sallang avagy Fordítótervezés dióhéjban Sallai Gyula



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


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

Miről mire fordít a fordítóprogram? Miről mire fordít az assembler? Mi a különbség a fordítóprogram és az interpreter között? Mi a virtuális gép?

2. Visszalépéses keresés


2. Az önkormányzat és költségvetési szervei évi költségvetésének teljesítése


Mesterséges Intelligencia. Csató Lehel. Csató Lehel. Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2007/2008


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

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda IRT- 4. kurzus. 3. Előadás: A mohó algoritmus

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

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

Kő, papír, olló és a snóbli

Tárgyév adata december 31. Tárgyév adata december 31. A tétel megnevezése


Bevezetés az informatikába

Knuth-Morris-Pratt algoritmus

Kifejezések. Kozsik Tamás. December 11, 2016


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

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


Formális nyelvek - 9.

DIGITÁLIS TECHNIKA I

A szemantikus elemzés elmélete. Szemantikus elemzés (attribútum fordítási grammatikák) A szemantikus elemzés elmélete. A szemantikus elemzés elmélete

BASH script programozás II. Vezérlési szerkezetek

Adatszerkezetek és algoritmusok

Átírás:

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

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

Teljes visszalépéses 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#)

Teljes visszalépéses elemzés az elemzés szabályai: q állapot (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ó

Teljes visszalépéses elemzés az elemzés szabályai: b állapot (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

Teljes visszalépéses elemzés az előző elemzés menete formálisan: (q, 1,, S#) (q, 1, S 1, aad#) (q,, S 1 a, Ad#) (q,, S 1 aa 1, bd#) (b,, S 1 aa 1, bd#) (b,, S 1 aa, cd#) (q,, S 1 aa c, d#) (b,, S 1 aa c, d#) (b,, S 1 aa, cd#) (b,, S 1 a, Αd#) (b, 1, S 1, aad#) (q, 1, S, a#) (q,, S a, #) (q,, S a 1, ccd#) (q,, S a 1 c, cd#) (q,, S a 1 cc, d#) (q,, S a 1 ccd, #) (t,, S a 1 ccd, #)

feladat Teljes visszalépéses elemzés S» T TE E» +T +TE T» F FU U» *F *FU F» i [S] elemezzük a következő szövegeket: 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?

Teljes visszalépéses elemzés összesen lépés lesz, ebből az elsők: (q, 1,, S#) (q, 1, S 1, Τ#) (q, 1, S 1 T 1, F#) (q, 1, S 1 T 1 F 1, i#) (q,, S 1 T 1 F 1 i, #) (b,, S 1 T 1 F 1 i, #) (b, 1, S 1 T 1 F 1, i#) (q, 1, S 1 T 1 F, [Ε]#) (b, 1, S 1 T 1 F, [Ε]#) (b, 1, S 1 T 1, F#) (q, 1, S 1 T, FU#) (q, 1, S 1 T F 1, iu#) (q, 1, S 1 T F 1 i, U#) (q, 1, S 1 T F 1 iu 1, *F#)...

Teljes visszalépéses elemzés Az elemzés végállapota: (t,, S T 1 F 1 ie 1 +T 1 F 1 i, #) T S E 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. F T F i + i

mohó algoritmus: elfogadott terminálist nem von vissza a grammatikát át kell hozzá alakítani A» aβ aγ helyett A» a és» β γ szabályok nem tartalmazhatják egymást, azaz nem lehet ilyen: A» x és» xβ működése: programozott mikrogép 1 bites regiszter mutató a szövegre mikroprocesszor verem

általános programsor: címke a AT AF 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 execute AT end if else execute AF end if 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

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

epszilon-szabály A» ε programja A X * true X * a csillagok helyére bármilyen jel kerülhet több alternatívával rendelkező szabály A» β γ δ programja átírjuk a szabályt A» X Y δ alakra, ahol X és Y új nemterminálisok δ utolsó sora kivételével, mint az egyszerű szabálynál, AF és AT üres A X true Y δ 1... δ utolsó true true

feladat: add meg az alábbi nyelvtan programját, majd elemezd az a=(a+b)# mondatot vele! Korlátozott visszalépéses elemzés feladat: add meg az alábbi nyelvtan programját! S» A A» aa a» 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

az A» aa a szabály átalakítandó C új nemterminális A» ac C» a ε ha az alternatíva csak egy terminálist tartalmaz, akkor nem szükséges új nyelvtani jelet bevezetni S» A A» aa a» b ac ERROR A a C true a c true C a true C true C C true C a

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

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 A = kezdetben: 1 1 true a true b true S» A A» =» a b ( + ) ( + ) true

1 1 1 A = true a true b true ( 1 + ) true

1 1 1 1 1 1 A = true a true ( + ) true

1 1 1 1 1 1 1 1 A = true a true ( + ) true

1 1 1 1 1 1 1 1 1 A = true a true ( + ) true

1 1 1 1 1 1 1 1 1 1 A = true a true ( + ) true

1 1 1 1 1 1 1 1 1 1 1 A = true a true ( + ) true

1 1 1 1 1 1 1 1 1 1 1 1 A = true a true ( + ) true

1 1 1 1 1 1 1 1 1 1 1 1 1 A = true a true ( + ) true

1 1 1 1 1 1 1 1 1 1 1 1 1 1 A = true a true ( + ) true

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 A = true a true ( + ) true

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 A = true a true ( + ) true

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 A = true a true ( + ) true

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 A = true a true ( + ) true

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 A = true a true ( + ) true

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 A = true a true ( + ) true

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 A = true a true ( + ) true

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 A = true a true ( + ) true

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 A = true a true ( + ) true

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 A = true a true ( + ) true

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 A = true a true ( + ) true

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 A = true a true ( + ) true

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 OK 1 A = true a true ( + ) true