FORDÍTÓPROGRAMOK. MKSA3144F kidolgozott tételek. 0.6 -ás verzió. 2006 január 21., Domján Tamás



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

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

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

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. I. Előadás. Műszaki informatika szakos hallgatók számára Veszprémi Egyetem Számítástudomány Alkalmazása Tanszék 2002.

Mesterséges intelligencia 1 előadások

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

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

Bevezetés a programozásba. 12. Előadás: 8 királynő

KETTŐS KÖNYVELÉS PROGRAM CIVIL SZERVEZETEK RÉSZÉRE

2.3. A C nyelv utasításai

1 Rendszer alapok. 1.1 Alapfogalmak

Ködös határ (Félreértés, hiba)

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

INFORMATIKAI ALAPISMERETEK

4. A GYÁRTÁS ÉS GYÁRTÓRENDSZER TERVEZÉSÉNEK ÁLTALÁNOS MODELLJE (Dudás Illés)

Bináris keres fák kiegyensúlyozásai. Egyed Boglárka

Programozási módszertan. Dinamikus programozás: Nyomtatási feladat A leghosszabb közös részsorozat

Ügyvitel ágazat Ügyvitel szakmacsoport Ügyviteli titkár Szakközépiskola 9-12.évfolyam Érettségire épülő szakképzés

2. Halmazelmélet (megoldások)

Átrendezések és leszámlálások ÚTMUTATÓ Hegedüs Pál június 30.

MemoLuX Kft. MINİSÉGÜGYI KÉZIKÖNYV. Jelen példány sorszáma: 0. Verzió: Lapszám: Fájlnév: 4/0 1/30 MMKv4.doc

Aronic Főkönyv kettős könyvviteli programrendszer

Széchenyi István Szakképző Iskola

Béta Software számlázó programok adóhatósági ellenőrzési adatszolgáltatása (AEA)

Analízisfeladat-gyűjtemény IV.

(Nem jogalkotási aktusok) RENDELETEK

ÍRÁSBELI SZORZÁS ELŐKÉSZÍTÉSE; TÖBBTAGÚ ÖSSZEADÁSOK, TÖBBSZÖRÖZÉSEK. 37. modul

Egy emelt szintű érettségi feladat kapcsán Ábrahám Gábor, Szeged

Kitöltési útmutató a Magánfőző párlat adójegy megrendelése című NAV_J27 elektronikus nyomtatványhoz

INFORMATIKAI ALAPISMERETEK

5. modul - Adatbázis-kezelés

EURÓPAI PARLAMENT C6-0040/2007 HU PART.1. Közös álláspont. Ülésdokumentum 2003/0153(COD); 29/11/2006

Matematikai logika. Nagy Károly 2009

SEGÉDLET a jegyzők felkészüléséhez a helyi önkormányzati képviselők és polgármesterek évi választásán

Mesterséges Intelligencia I. (I602, IB602)

Felkészülést segítő kérdések Gépszerkesztés alapjai tárgyból

Kari Adminisztrátor. Funkcionális leírás

Matematika tanmenet (A) az HHT-Arany János Tehetségfejleszt Program el készít -gazdagító évfolyama számára

3. gyakorlat. 1/7. oldal file: T:\Gyak-ArchiCAD19\EpInf3_gyak_19_doc\Gyak3_Ar.doc Utolsó módosítás: :57:26

Tantárgyi útmutató. 1. A tantárgy helye a szaki hálóban. 2. A tantárgyi program általános célja. Statisztika 1.

Készítette: Citynform Informatikai Zrt.

élőfej és élőláb távolsága a lapszéltől (0,5 cm)

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

Párhuzamos algoritmusmodellek Herendi, Tamás Nagy, Benedek

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

I. A légfékrendszer időszakos vizsgálatához alkalmazható mérő-adatgyűjtő berendezés műszaki

II. év. Adatbázisok és számítógépek programozása

Operációs rendszerek. 3. előadás Ütemezés

Írta: GYIMÓTHY TIBOR HAVASI FERENC KISS ÁKOS FORDÍTÓPROGRAMOK. Egyetemi tananyag

Történeti áttekintés

Biztosítási ügynökök teljesítményének modellezése


Analízis 1. (BSc) vizsgakérdések Programtervez informatikus szak tanév 2. félév

4. Programozási nyelvek osztályozása. Amatőr és professzionális

CSORVÁS VÁROS ÖNKORMÁNYZATA KÉPVISELŐ-TESTÜLETÉNEK 16/2014.(XI.30.) ö n k o r m á n y z a t i r e n d e l e t e

Az Összetett hálózatok vizsgálata elektronikus tantárgy részletes követeleményrendszere

MATEMATIKA ÉVFOLYAM

Hálózati protokoll tervezése

A TANTÁRGYTÖMBÖSÍTETT OKTATÁS BEVEZETÉSÉNEK KIDOLGOZÁSA

Topográfia 7. Topográfiai felmérési technológiák I. Mélykúti, Gábor

BUDAPESTI MŰSZAKI ÉS GAZDASÁGTUDOMÁNYI EGYETEM ÁRAMLÁSTAN TANSZÉK TOMPA TESTEK ELLENÁLLÁSTÉNYEZŐJÉNEK VIZSGÁLATA MÉRÉSI SEGÉDLET. 2013/14. 1.

Matematikai és matematikai statisztikai alapismeretek

Ismétlődő műveletek elvégzésének automatizálása

A KÖZPONTI KÖLTSÉGVETÉSI SZERVEK ELEMI BESZÁMOLÓJÁNAK PÉNZÜGYI (SZABÁLYSZERŰSÉGI) ELLENŐRZÉSÉNEK MÓDSZERTANA május 001-1

Bevezetés a C programozási nyelvbe. Az Általános Informatikai Tanszék C nyelvi kódolási szabványa

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

Tanári kézikönyv az Informatika az 1. és 2. évfolyam számára című munkafüzetekhez és a PC Peti oktatóprogramokhoz TANMENETJAVASLAT 2.

AZ EURÓPAI UNIÓ TANÁCSA. Brüsszel, április 7. (14.04) (OR. en) 8159/10 EUROPOL 13 ENFOPOL 89 JAIEX 33 COWEB 95

3. Strukturált programok

36/2007. (III. 26.) GKM rendelet Hatályos január 01-től

A verbális szövegek analitikus megközelítése szemiotikai szövegtani keretben I. rész

PILÓTA NÉLKÜLI REPÜLŐGÉPEK ÚTVONALTERVEZÉSE DIGITÁLIS DOMBORZAT MODELL ALKALMAZÁSÁVAL

OKI-TANI Kisvállalkozási Oktatásszervező Nonprofit Kft. Minőségirányítási Kézikönyv

Objektum Orientált Szoftverfejlesztés (jegyzet)

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Kombinatorika

Inter.Net Hitelesítés Szolgáltatási Utasítás A NetLock Kft. Szolgáltatási Szabályzatának szolgáltatás specifikus rendelkezései

Ingrid Signo Felhasználói kézikönyv. Pénztári használatra

AZ EURÓPAI UNIÓ TANÁCSA. Brüsszel, november 17. (18.11) (OR. en) 16431/10 TRANS 338 FEDŐLAP. az Európai Bizottság. Az átvétel dátuma:

Általános statisztika II. Kriszt, Éva Varga, Edit Kenyeres, Erika Korpás, Attiláné Csernyák, László

közti kapcsolatok, Ellenőrzés, Játék 21. modul

ZH feladatok megoldásai

MAGYAR TUDOMÁNYOS AKADÉMIA SZÁMÍTÁSTECHNIKAI ÉS AUTOMATIZÁLÁSI KUTATÓ INTÉZETE

4. előadás. Vektorok

A 27/2012 (VIII. 27.) NGM rendelet (12/2013 (III.28.) NGM rendelet által módosítva) szakmai és vizsgakövetelménye alapján.

MATEMATIKA 5 8. ALAPELVEK, CÉLOK

PROGRAMOZÁS 1. kötet TERVEZÉS

INFORMATIKAI ALAPISMERETEK

EÖTVÖS LORÁND TUDOMÁNYEGYETEM KLASSZIFIKÁCIÓ AZ ADATBÁNYÁSZATBAN

GroupWise 5.2 használói jegyzet

A TOLNA MEGYEI ÖNKORMÁNYZAT 10/2003. (IV.22.) ÖNKORMÁNYZATI RENDELETE 1 A TOLNA MEGYEI ÖNKORMÁNYZAT SZERVEZETI ÉS MŰKÖDÉSI SZABÁLYZATÁRÓL

ÚTMUTATÓ. a tömegtermelés vásárlói igényekhez való igazításához. Legjobb Gyakorlatok. Union Regionale delle Camere di Commercio del Veneto

Vass Balázs. Online algoritmusok árverési feladatokban

1. Adatok közelítése. Bevezetés. 1-1 A közelítő függvény

BIZONYTALAN ADATOK KEZELÉSE: FUZZY SZAKÉRTŐI RENDSZEREK

Gazdasági informatika vizsga kérdések


AZ EURÓPAI PARLAMENT ÉS A TANÁCS 138/2004/EK RENDELETE (2003. december 5.) a közösségi mezőgazdasági számlarendszerről. (HL L 33., , 1. o.

Tervezett erdőgazdálkodási tevékenységek bejelentése

ELEMI BÁZISTRANSZFORMÁCIÓ LÉPÉSEI 2.NEHEZÍTETT VÁLTOZAT 2.a) Paramétert nem tartalmazó eset

Átírás:

FORDÍTÓPROGRAMOK MKSA3144F kidolgozott tételek 0.6 -ás verzió 2006 január 21., Domján Tamás A dokumentum alapja egy puska és Tóth Péter által készített jegyzet volt, azt egészítettem ki, így hibákat, hiányosságokat tartalmazhat!

1. A fordító program felépítése: (rajz, egy-egy mondat az elemek be- és kimeneteiről, feladataikról) A fordító egy forrásnyelvről (pl: C) egy célnyelvre (Assembly, gépikód) fordít közölve az esetleges hibákat. De tetszőleges program is lehet. Egy program bemeneteit jól, lehetőleg formálisan definiálni kell. Kimenetének értelmezhetőnek kell lennie egy másik program, vagy egy felhasználó számára. A program adatokon műveleteket végez. A bemenetek és az adatszerkezetek, illetve az adatszerkezetek és a kimenet közti leképezést a fordító végzi. Lexikai elemzés: A forrásnyelvű szöveget elejétől a végéig karakterenként beolvassuk, és olyan szakaszokra bontjuk (ún.: tokenekre), melyekben szereplő karaktereknek együtt van értelme. Példa: position:= initial+ rate* 60 Tokenekre bontva: 1. position azonosító 2. := értékadás szimbólum 3. initial azonosító 4. + összeadás jel 5. rate azonosító 6. * szorzás jel 7. 60 szám Megjegyzés: a lexikai elmzés során a tokenek közti elválasztó karaktereket elhagyjuk Természetes nyelvi analógia: a szöveget szavakra bontjuk. Szintaktikai elemzés: Más néven hierarchikus elemzésnek vagy (parsing) parzolásnak nevezzük. Tokeneket szervez hierarchiába nyelvtani szabályok alapján. Példa: 1.Minden azonosító egy kifejezés 2.Minden szám is egy kifejezés 3.Ha exp1 és exp2 kifejezések, akkor exp1*exp2 is kifejezés 4.Ha id azonosító és exp egy kifejezés, akkor id:=exp egy állítás 2.

A szintaktikai elemzés eredménye a tokenekkapcsolatát leíró fa: szintaxis fa Tremészetes nyelvi analógia: a nyelvtani mondatrészek. Szemantikai elemzés: Ellenőrzi, hogy a formailag helyes szövegrészeknek van e értelme. Tipikus feladat a típusegyeztetés. Közbülő kód generálás: Olyan reprezentációját képezi a nyelvnek, amely könnyen felépíthető és belőle a kimenet könnyen generálható. Példa: egy dinamikusan tárolt fa A kód optimalizálót és a kód generálót most nem tárgyaljuk. Szimbólumtábla kezelő: Egy szöveg tartalmazhat azonosítókat, és egy azonosító hivatkozhat: konstansra, változóra, függvényre. Egy fordító alapvető feladata, hogy rögzítse a szövegben lévő azonosítókat, a hozzájuk tartozó adatokkal együtt. Például: mi egy azonosító: neve, típusa, érvényessége (a szövegen belül), hivatkozott információ helye a memóriában Megjegyzés: ezeket az adatokat a szimbólumtábla tárolja; a szemantikai elemzés során a szimbólum táblából olvassuk ki az azonosítók típusát. Hibakezelő: A fordítás minden lépése okozhat hibákat. A szintaktikai és a szemantikai elemzés során fény derül a hibák többségére. Olyan fordító, amely megáll az első hibánál, kevésbé hasznos (minnél több hibát írjon ki). 3.

2. Környezetfüggetlen nyelvtan: (definició, levezetés, levezetési fa, egyértleműség, asszociativitás, precedencia megadása) Egy nyelvet az határoz meg, hogyan néz ki: szintaxis, és hogy mi a jelentése: szemantikája. Környezetfüggetlen nyelvtanokat bevezetjük a szintaxis meghatározásához. Ez segít a nyelv értelmezésében. Elemei: - a tokeneket tekintjük formális szimbólumnak, - nemterminálisok, - levezetési szabályok, - kiindulási szimbólum. Levezetési szabály: nemterminális -> terminálisok és nemterminálisok sorozata. Azaz: a kezdőszimbólumtól indulva a nemterminálisokat lecserélve valamely levezetési szabály jobb oldalán álló kifejezéssel míg csak terminálisokból, tehát tokenekből álló sorozathoz nem jutunk. Ezt szemlélteti a levezetési fa: RAJZ(19 oldal)! Levezetési fák: Egy adott környezetfüggetlen nyelvtan esetén a következő tulajdonságok teljesülniek: 1. A gyökér címkéje a kiindulási szimbólum. 2. Egy levél címkéje token vagy e. 3. Közbülső csúcs címkéje nemterminális. 4. Ha A egy közbülső csúcs címkéje, X1, Xn a gyermekeinek címkéje és n csúcs gyermekeinek száma, akkor: A X1,X2 Xn egy levezetési szabály és A e esetén az A címkéjű csúcsnak csak egy gyereke van. Ha a leveleket balról jobbra összeolvassuk, megkapjuk a levezetett szót. Az az eljárás, mely során egy token sorozathoz meghatározzuk a levezetési fát az a levezetés vagy parzolás(parsing). Egyértelműség: Ha egy sorozat egyazon nyelvtanból többféleképpen is levezethető, a nyelv nem egyértelmű. Ennek bizonyítéka, ha több levezetési fa is tartozhat hozzá. Associativitás: Mi a kiértékelési sorrendje? Plusz információt kell bevinni a nyelvtanba. A + és a műveletek illetve a * és az / műveleteket balról jobbra végezzük, balasszociatív. Programozási nyelvekben az értékadás jobbról balra történik, jobbasszociatív. Precedencia megadása: Az operátorok kiértékelési sorrendje. Kiértékelési sorrendben előrébb van a * mint a + azaz előbb el kell végezni a szorzást majd az összeadást. A különböző precedencia-szintekhez külön nemterminálisokat vezetünk be. 4.

3. Szintaxis vezérelt definíció: (szintetizált attribútumok kiszámítása, mélységi bejárás, örökölt vagy származtatott attribútumok, függőségi gráf, topológiai rendezés) Szintaxis vezérelt fordításhoz szintaxis vezérelt definíciókat használunk. Szintaxis vezérelt definíció esetén: bemenet szintaktikai szerkezetét egy környezetfüggetlen nyelvtan határozza meg. szimbólumokhoz attribútumokat vagy tulajdonságokat rendelünk. levezetési szabályokhoz szemantikai szabályokat rendelünk, amelyek megadják egy nyelvtani szabály bal oldalán álló szimbólum attribútumának számítási módját. Szintetizált attribútumról beszélünk, ha értékét a kiértékelési fában hozzá tartozó csúcs gyermekeinek attribútumából számítjuk. Példa(postfix->infix): 95-2+ szét fejteni 9-5+2-re fával. Mélységi bejárás: A kiértékelési fa minden olyan bejárása célravezető, ahol egy csúcs gyermekeit előbb értékeljük ki mint magát a csúcsot. Ennek egy könnyen megvalósítható módja a mélységi bejárás rekurzív eljárással. Származtatott vagy örökölt attribútum A fában egy csúcshoz tartozó szimbólum attribútumait a szülők és testvérek attribútumaiból számoljuk; Szabályban: a jobb oldalon álló szimbólumok attribútumait a bal és a jobb oldalon álló szimbólumok attribútumaiból számoljuk. Függőségi gráf: Csúcsok: attribútumok Élek: ha a értékéből kiszámoljuk b -t, akkor b függ a -tól, amit a->b jelöl. Topológiai rendezésnek nevezzük a csúcsok egy V1,V2,,Vn sorrendjét, ha minden Vi->Vj élre i < j a rendezés szerint; A topológikus rendezés ad egy megfelelő sorrendet az attribútumok kiértékelésére. 5.

4.Fordítási sémák: (megadása, jelölése levezetési fában, bejárási sorrend) A továbbiakban eljárásszerűen adjuk meg a fordítás módját. A fordítási séma egy olyan környezetfüggetlen nyelvtan, ahol a szabályok jobb oldalába programrészleteket, úgynevezett szemantikai akciókat ( semanticaction) ágyazunk. A fordítási séma abban különbözik a szintaxis vezérelt definíciótól, hogy a szemantikai szabályok kiértékelési sorrendje egyértelműen meghatározott a szemantikai akciók szabályon belüli helye alapján, és a mélységi bejárást feltételezve. A szemantikai akciókat a szabályon belül kapcsos zárójelbe tesszük. Példa: expr -> expr + term! Pl.: expr expr + term { print( + ) } expr expr - term { print( - ) } expr term term 0 { print( 0 ) } term 1 { print( 1 ) }.... term 9 { print( 9 ) } A szintaxisvezérelt definíció alkalmazásával ellentétben nincs mindig szükség átmeneti tárolásra. Ha egy szabályban szemantikai akció szerepel, akkor a kiértékelési fában a szabály bal oldalán szereplő csúcshoz egy plusz gyermeket veszünk fel, szaggatott vonallal csatolva és a szemantikai akcióval címkézve. Példa: 95-2+ szét fejteni 9-5+2-re fával! A bejárási sorrend kötött. 6.

5. Egyszerű levezetők: (visszalépéses algoritmus, előrejelző levezető) Azt az eljárást, amely során megadjuk, hogy egy kifejezés (tokenek sorozata) hogyan vezethető le nyelvtani szabályokkal, levezetésnek vagy parzolásnak hívjuk. A levezetés egyben a levezetési fa felépítését is jelenti. Ezen eljárások többsége két csoportra osztható: top down: gyökértő a levelek fele bottom up: levelektől a gyökér felé A top down módszerek általában könnyebben végrehajthatók. A bottom up módszerek a nyelvek bővebb osztályának kezelésére alkalmasak. Top-Down levezetés: Visszalépéses algoritmussal (back-tracking): 1. Tekintsük a token sorozat bal oldalán álló első tokent és a nyelvtan kiindulási szimbólumára vonatkozó szabályokat. Pl.: aaab, S 2. Vegyünk egy olyan levezetési szabályt, mely jobb oldalának bal oldalán ez a token áll. S asb 3. A kiválasztott szabályok alapján próbáljuk levezetni a következő tokent a) a terminálisokat egyeztetjük b) a nem terminálisokból levezetjük (2. lépés rekurzív hívása). Ha a 3.a vagy a 3.b nem sikerül akkor visszatérünk a 2. Lépésre, s újabb szabályt választunk, ha ilyen nincs akkor visszalépünk a rekurzióban. Ezt az algoritmust olyan nyelvtanokra tudjuk hatékonyan alkalmazni, ahol a szabályok jobb oldalának bal oldalán nem áll nemterminális. Azt a speciális esetet, amikor nincs szükség visszalépésre, előrejelző levezetésnek (predictive parsing) hívjuk. Előrejelző levezetés: rekurzív eljárások egy halmaza dolgozza fel; a nyelvtan minden nemterminálisához egy-egy rekurzív eljárás tartozik; Előrejelző levezetés esetén a következő illesztendő token (lookahead) alapján egyértelműen eldönthető, hogy mely szabályt kell alkalmazni, illetve mely eljárást kell meghívni. Az előrejelző levezetés arra a feltevésre hagyatkozik, hogy egyértelműen eldönthető, hogy a következő token mely szabályból vezethető le, másképp mi lehet az első token, ami egy szabály alkalmazása után generálódik. Ezen tokeneket jelöli a FIRSThalmaz. Példa: type-ból levezethető szabályokról kell döntenünk Ha van két levezetési szabály A α és A β,mélységi levezetés visszalépés nélkül akkor lehetséges, ha FIRST(α) FIRST(β) = Ø (diszjunkt). e szabályok kezelése: A nemterminális e szabályokat akkor alkalmazzuk, ha a nemterminálisraa többi szabály nem alkalmazható ( nem kell hibát jelezni, error helyette ezt alkalmazzuk). A First halmazok meghatározása: Abban az esetben, ha a nyelvtan nem tartalmaz nemterminális e alakú szabályokat akkor egy nemterminálishoz tartozó First halmaz tartalma a szabályok jobb oldalának bal szélén álló terminálisokhalmaza, és az itt álló nemterminálisok FIRST halmazának uniója. Pl: A B; A C; A a; A b esetén FIRST(A) = {a,b} FIRST(B) FIRST(C) 7.

6. Lexikai elemző: (felépítése, alapfogalmak (token, lexéma), hibavisszaállítási stratégia, pufferelés) Lexikai elemzés: A forrásnyelvű szöveget elejétől a végéig karakterenként beolvassuk, és olyan szakaszokra bontjuk (ún.: tokenekre), melyekben szereplő karaktereknek együtt van értelme.pl: position := initial+ rate* 60 ahol position = azonosító, := értékadási szimbólum, initial = azonosító, + = összeadás jel, rate = azonosító, * =szorzás jel, 60 = szám. A tokenek közötti elválasztó karaktereket elhagyjuk. Természetes nyelvi analógia: a szöveget szavakra bontjuk. Alapfogalmak: Token: szintaktikai és szemantikai szempontból azonosan kezelt fogalom, amit a nyelvtanban egy szimbólum jelöl. Egy tokenhez tartozó mintázat: olyan karaktersorozatok, amik egyazon tokent eredményeznek. Lexéma: egy minta konkrét előfordulása a szövegben. Előfeldolgozás: Ismeretlen karaktersorozatról azt feltételezzük, hogy új azonosító. Ha a feldolgozás további része ezen feltevés mellett nem lehetséges, akkor visszalépünk, és próbáljuk a hibákat megkeresni: - egy karaktert törlünk, - beszúrunk, - két szomszédos karaktert felcserélünk, - egy karaktert kicserélünk. Alapelv: Azt a megoldást keressük, ami a legkevesebb módosítással vezet értelmezhető sorozathoz. Ezek a hibák száma. Hiba-visszaállítási stratégiák ( error recovery ): pánikszerű (panicmode) egy blokkot hagy figyelmen kívül pl.: egy sort, egy begin-end pár közötti részt a hiba környezetében kifejezés szintű visszaállítás (phraselevel) lokális javítások, ahol a levezető elakad pl.: vessző, pontosvessző csere, pontosvessző hozzáadása, pontosvessző figyelmen kívül hagyása. hiba előrevetítés (error production) tipikus hibák ismeretében olyan nyelvtan készítése, hibás kifejezéseket is eredményez, és ilyet levezetve pontos hibaüzenetet ad globális javítás (global correction) teljes szöveg legkevesebb javításával azt értelmessé tenni. Nagyon hasznos, de borzasztó költséges. Pufferelés (Buffering): Ha több karakternyi előre és visszalépésre van szükség, akkor annak érdekében, hogy a karaktereket ne kelljen oda-vissza mozgatni, puffereljük és indexeljük őket. 8.

7. Tokenek megadása: (reguláris kifejezés, reguláris definició, reguláris kifejezésben használt további jelölések) Token: szintaktikai és szemantikai szempontból azonosan kezelt fogalom, amit a nyelvtanban egy szimbólum jelöl Reguláris kifejezés: Egy ábécé minden eleme és e reguláris kifejezés. A kifejezés által definiált nyelvek: L(δ) = {δ} bármely δ Σ U{e} Ha r és s reguláris kifejezés, akkor r s reguláris kifejezés és L(r s) = L(r) L(s) r s reguláris kifejezés és L(r s) = L(r)L(s) r* reguláris kifejezés és L(r*) = L(r)* L((r)) = L(r) (extra zárójelezés megengedett) Reguláris definíció: azon 1 reguláris kifejezés az ábécé felett; azon 2 ; azon k reguláris kifejezés az ábécé elemei és azon 1, azon 2, azon k-1 azonosítók felett. További jelölések: Előfordulások számára: (r)? L(r)U{e} (r)+ L(r)L(r)* Karakter osztályok: [abc] azaz ([abc]=a b c) L([abc])={a}U{b}U{c} [A-Z] azaz ([A-Z]=A B C Z) L([A-Z])={A}U{B}U{C}U U{Z} 9.

8. Szintaktikai elemző: (felépítése, hiba-visszalállítási stratégia, CFG-vel megadott nyelvek felismerése veremautómatával) A szintaktikai elemző helye a fordítás folyamatában: Nyelvek: Church tétel: általános nyelvtan által adott nyelvek és a Turinggép által elfogadott nyelvek ekvivalenciája. Cocke-Younger-Kamasi algoritmus általános nyelvtanok alapján képes nyelveket levezetni Minél szűkebb a nyelvi osztály annál hatékonyabb levezető algoritmusok tartoznak hozzá Hibakezelés alapelvei: A hiba mibenlétét tisztán és pontosan meg kell tudnunk fogalmazni. Gyorsan vissza kell tudni állítani a hibákat, hogy további hibákat detektálhassunk A hiba kezelő ( és detektáló ) nem lassíthatja le túlságosan a hibátlan nyelvek fordítását Hiba-visszaállítási stratégiák ( error recovery ): pánikszerű (panicmode) egy blokkot hagy figyelmen kívül pl.: egy sort, egy begin-end pár közötti részt a hiba környezetében kifejezés szintű visszaállítás (phraselevel) lokális javítások, ahol a levezető elakad pl.: vessző, pontosvessző csere, pontosvessző hozzáadása, pontosvessző figyelmen kívül hagyása. hiba előrevetítés (error production) tipikus hibák ismeretében olyan nyelvtan készítése, hibás kifejezéseket is eredményez, és ilyet levezetve pontos hibaüzenetet ad globális javítás (global correction) teljes szöveg legkevesebb javításával azt értelmessé tenni. Nagyon hasznos, de borzasztó költséges. Nyelv meghatározása: reguláris kifejezésből, hogy kapok környezetfüggetlen nyelvtant? => reguláris kifejezés NFA környezetfüggetlen nyelvtan (reguláris nyelvtan). Egy környezetfüggetlen nyelvtan pontosan akkor reguláris, ha R (V\ ) x * x ((V\ ) e) Megvalósítás veremmel: - a bemenetet pakoljuk a verembe, amíg nem redukálható, - környezetfüggetlen nyelvtan: ha egy szó levezethető, akkor mindig a leginkább jobbra levő nem terminális kifejtve is levezethető, így a handle mindig a verem tetején lesz. 10.

9.Környezetfüggetlen nyelvtan II: (balrakurzió-mentesítés, balfaktorizálás, átviteli diagrammok) A top-down levezetés nem tudja lekezelni a bal rekurzív nyelveket, így egy balrekurzió mentesítő transzformációra van szükség. (A balrekurzió-mentesítés előtt még kör ill. e mentesíteni kell! ) Balrekurzió eltüntetése: a bementként megadottal megegyező, balrekurzió mentes nyelvtan létrehozása A Aα 1 Aα 2 Aα 3 Aα m β 1 β 2 β n helyett: A β 1 A β 2 A β n A és A α 1 A α 2 A α m A e A bal fatorizálás olyankor hasznos, mikor predektív parzolás-ra (előrejelző levezetés) alkalmas nyelvtant szeretnénk előállítani. Bal faktorizálás: azonos előtagok eltüntetése A αβ 1 αβ 2 αβ n γ Helyett: A αa γ és A β 1 β 2 β n Átviteli diagrammok az előrejelző levezetéshez Átviteli diagram (transition diagram) létrehozásának feltétele, hogy először eltüntessük a bal rekurziót a nyelvtanból, aztán balfaktorizáljuk a nyelvtant, vagyis determinisztikusnak kell lennie. (azaz ne létezzen több átvitel egy állapotból ugyanarra a bemenetre; egyértelmű nyelvtant próbáljunk meghatározni és ha a nem determinizmus nem tüntethető el, akkor előrejelző levezetés nem megvalósítható) Példa: Az alábbi ábrán összegyüjtöttük a következő nyelvtan átviteli diagramját (E TE'; E' +TE' e; T FT'; T' *FT' e; F (E) id) Az átviteli diagrammokat, a nyelvtanhoz hasonlóan, egyszerüsíthetjük, egymásba vonhatjuk: E' esetén: E esetén: Ezt követően az E' diagram elhagyható. Hasonló technikák alkalmazhatók T és T' esetében is. A leegyszerüsített predektív parzolással készített C fordító 20-25% gyorsabb, mint az eredeti. 11.

10. TOP-DOWN levezetés: (FIRST és FOLLOW halmazok elkészítése, LL(1) nyelvek, LL(1) levezetési táblák alkalmazása) Az előrejelző levezetés (levezetési táblázat) létrehozásához két segédfüggvény szükségeltetik: FIRST: 1.Ha X egy terminális, akkor FIRST(X) = {X} 2.Ha van X e szabály, akkor e FIRST(X) 3.Ha x egy nem terminális és x y 1 y 2 y k egy szabály, akkor: a, Minden j k-ra, ha e FIRST(y i ) minden i=1,2,,j-1-re, akkor FIRST(y j )\{e} FIRST(x) b, ha e FIRST(y i ) minden i=1,2,,k -ra akkor e FIRST(x) FOLLOW: 1.Legyen $ FOLLOW(S), ahol S a kezdőszimbólum és $ a bemenetet lezáró szimbólum. 2.Ha létezik A αbβ szabály, akkor legyen FIRST(β)\{e} FOLLOW (B) 3.Ha létezik A αβ vagy A αbβ ahol e FIRST(β) akkor FOLLOW(A) FOLLOW(B) Algoritmus: - A nyelvtan minden A α szabályhoz hajtsuk végre 2-t és 3-t - Minden a FIRST(α) terminálisra legyen (A α) M(A,a). - Ha e FIRST(α), akkor legyen (A α) M(A,b) minden b FOLLOW(A) terminálisra vagy $-ra. - Minden nem definiált mezőjébe M-nek írjunk hibajelet. LL(1) nyelvek Ha a nyelvtan nem egyértelmű vagy bal rekurzív, akkor biztosan lesz legalább egy cellája a levezetési táblázatnak, ami egynél több szabályt tartalmaz. Előrejelző levezetés csak akkor alkalmazható, ha minden cella legfeljebb egy szabályt tartalmaz. Azokat a nyelveket, melyekre a levezetési táblázat minden cellája legfeljebb egy szabályt tartalmaz, LL(1) nyelveknek hívjuk. Az első L jelenti, hogy balról olvasva; a második L, hogy a legbaloldalibb nem terminálist tekintve; az 1 -es, hogy egy karakter előreolvasás alapján eldönthető egyértelműen, hogy melyik szabályt kell alkalmazni. LL(1) nyelvek megkülönböztető tulajdonságai: Ha A α β része a nyelvnek, akkor 1. α -ból és β-ból nem vezethető le ugyanolyan terminálissal kezdődő szó 2. α és β közül legfeljebb az egyikből vezethető le e 3. Ha β *e, akkor α -ból nem vezethető le olyan a terminálissal kezdődő szó, melyre a FOLLOW(A) LL(1) Levezetési tábla 12.

11. Botton-Up levezetés: (akciók, dilemmák, SLR levezetési tábla alkalmazása) Alulról felfelé parzolás (Bottom-up) vagy más néven az eltol-redukál (shift reduce) levezetők: építés a levéltől kezdve, a szabályokat visszafelé alkalmazva, szövegrész cseréje nem-terminálisra => redukció, mígnem a kezdő szimbólumhoz jutunk. Példa: S aabf; A Abc b; B d nyelvtan esetén: abbcdf; aabcdf; aadf; aabf; S Handle (fogódzó, kapaszkodó): az a mintázat amire visszafelé alkalmazunk egy szabályt Példa: E E+E; E E*E; E (E); E id nyelvtan esetén: Megvalósítás veremmel a bemenetet pakoljuk a verembe, amíg nem redukálható CFG: ha egy szó levezethető, akkor mindig a leginkább jobbra levő nem terminálist kifejtve is levezethető (rightmost derivation), így a handle mindig a verem tetején lesz Akciók: 1.eltolás (bemenet verem) (shift) 2.redukálás (szabály alkalmazása visszafelé) (reduce) 3.elfogad (accept) 4.hiba (error) Dilemmák: eltol / redukál dilemma: eltol vagy redukál? redukál / redukál dilemma: mely szabályt alkalmazzuk? Példa: 13.

SLR levezetési táblázat készítése: SLR = SimpleLR LR(0) tételek: szabályok és a jobb oldalon egy pont: A XYZ; A X YZ; A XY Z; A XYZ Ha a pont előtti részből levezethető szimbólum sorozat van a veremben, akkor arra számítunk, hogy a pont utáni részből levezethető szimbólum sorozat van a bemeneten. Lezárt (closure): Legyen I egy tételhalmaz: 1.Kezdetben I lezárt(i) 2.Ha A α Bβ lezárt(i) és B σ egy szabály, akkor B σ lezárt(i) a másodikat addig alkalmazzuk, míg új tétel kerül a lezárt(i)-be. Példa: E E; E E+T T; T T*F F; F (E) id nyelvtanra nézve: Legyen I={E.E} ekkor lezárt(i)={e E; E E+T; E T; T T*F; T F; T (E); T id} Lépés (goto): lépés(i,x) olyan A α X β tételeket tartalmazó halmaz lezártja, amelyekre A α X β I SLR levezetési tábla generálása: 14.

12. Attribútumok kiszámítása: (szimtetizált attribútumok alulról felfelé, szimtetizált attribútumok felülről lefelé, L-attribútumok kifejezése felülről lefelé, L-attribútumok kifejezése alulról felfelé) Szintetizált attribútumok: A levezetési fában a gyermekekhez rendelt attribútumokból számoljuk a szülő attribútumait Szabályban: a bal oldalon álló szimbólum attribútuma a jobb oldalon álló szimbólumok attribútumainak függvénye. 116 oldal környékén van erről szó! 15.

13.Egyszerű típus ellenőrzők: (kifejezések, állítások, szekvencia, elágazás, ciklus, függvény) Egyszerű: Olyan nyelvekre használható, ahol az azonosítókat előre kell definiálni (előbb definiálni mint használni). Például: D - deklaráció, E - kifejezés, T - típus, - pointer. A típus ellenőrzés fordítási sémával megadható. type attribútumot rendelünk a nem terminálisokhoz melynek lehetséges értékei típusok vagy type error. Kifejezések típusellenőrése: lookup: szimbólumtáblában való keresés Állítások típusellenőrzése: - csak típus ellenőrzés, - az érték vagy void = valós vagy type_error = hibás. Pl.: Értékadás: S id:=e {S.type := if id.type = E.type then void else type_error} Feltételes kifejezés: (elágazás) S if E then S 1 {S.type := if E.type = boolean then S 1.type else type_error} Ciklus: S while E do S 1 {if E.type = S.type = boolean then S 1.type else type_error} Szekvencia: S S 1 ;S 2 {S.type := if S 1.type = void and S 2.type = void then void else type_error} Függvények típus ellenőrzése: E E(E) - egy függvény típusa: s t ha S az argumentum típusa és t a visszaállítási érték típusa. E E 1 (E 2 ) {E.type: = if E 2.type = S and E 1.type = S t then t else type_error} 16.