Emlékeztető: a fordítás lépései. Szimbólumtábla-kezelés. Információáramlás. Információáramlás. Információáramlás.



Hasonló dokumentumok
A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

4. Öröklődés. Programozás II

C# osztályok. Krizsán Zoltán

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

A kódgenerálás helye a fordítási folyamatban. Kódgenerálás I. (kifejezések és vezérlési szerkezetek) A kódgenerálás feladata. Ebben az előadásban...

A PROGAMOZÁS ALAPJAI 1. Függvény mint függvény paramétere. Függvény mint függvény paramétere. Függvény mint függvény paramétere

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

A fordítóprogramok szerkezete. Kódoptimalizálás. A kódoptimalizálás célja. A szintézis menete valójában. Kódoptimalizálási lépések osztályozása

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

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

Programozás C++ -ban 2007/4

3. Gyakorlat Ismerkedés a Java nyelvvel

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Osztály és objektum fogalma

19. Hasításos technikák (hash-elés)

Programozás II gyakorlat. 4. Öröklődés

JAVA PROGRAMOZÁS 3.ELŐADÁS

Objektumorientált programozás C# nyelven

Objektumorientált programozás C# nyelven

Adatszerkezetek és algoritmusok

Objektumorientált programozás C# nyelven

Osztályok. 4. gyakorlat

117. AA Megoldó Alfréd AA 117.

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

Kalapácsvetés 2016 szöveges

Információs Technológia

Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

ISA szimulátor objektum-orientált modell (C++)

Magas szintű programozási nyelvek 2 Előadás jegyzet

Bánsághi Anna

Programozás 5. Dr. Iványi Péter

Maximum kiválasztás tömbben

Java II. I A Java programozási nyelv alapelemei

Budapesti Műszaki és Gazdaságtudományi Egyetem Automatizálási és Alkalmazott Informatikai Tanszék INFORMATIKA 2 ADATBÁZISOK

Bánsághi Anna

Bevezetés a programozásba 2

Programozás II gyakorlat. 8. Operátor túlterhelés

Bevezetés a C++ programozási nyelvbe

Objektumorientált programozás C# nyelven III.

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

A verem (stack) A verem egy olyan struktúra, aminek a tetejéről kivehetünk egy (vagy sorban több) elemet. A verem felhasználása

Programozási nyelvek Java

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

Programozási nyelvek Java

INFORMATIKAI ALAPISMERETEK

INFORMATIKAI ALAPISMERETEK

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?

Java és web programozás

15. Programok fordítása és végrehajtása

JAVA PROGRAMOZÁS 2.ELŐADÁS

Számítógépvezérelt rendszerek mérnöki tervezése

Memóriakezelés, dinamikus memóriakezelés

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

C++ programozási nyelv

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

KIVONAT. Szeged Megyei Jogú Város Közgyűlése én tartott ülésének jegyzőkönyvéből. HATÁROZAT

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

Elemi Alkalmazások Fejlesztése II.

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

Az élet szép, környezetünk tele van fákkal, virágokkal, repdeső madarakkal, vidáman futkározó állatokkal.

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

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Nyíregyházi Egyetem Matematika és Informatika Intézete. Fájl rendszer

Programozás II. labor

Alprogramok, paraméterátadás

1. Alapok. Programozás II

Java II. I A Java programozási nyelv alapelemei

Származtatási mechanizmus a C++ nyelvben

Programozás II. 4. Dr. Iványi Péter

NYILVÁNOS KÖNYVTÁRI KATALÓGUSOK

Programozás alapjai. 10. előadás

OOP #14 (referencia-elv)

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Felhasználó által definiált adattípus

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Objektumorientált programozás C# nyelven

Java programozási nyelv 4. rész Osztályok II.

QGIS tanfolyam (ver.2.0)

Az alábbi példában a Foo f(5); konstruktor hívása után mennyi lesz f.b értéke? struct Foo { int a, b; Foo(int c):a(c*2),b(c*3) {} };

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

1. Az utasítás beolvasása a processzorba

Programozás alapjai II. (7. ea) C++

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Tájékoztató a lakás-elôtakarékossági szerzôdésekre igényelhetô állami támogatásról

Java és web programozás

GPU Lab. 4. fejezet. Fordítók felépítése. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

Szkriptnyelvek II. Perl programok

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Programozási Paradigmák és Technikák

Események C#-ban Krizsán Zoltán iit

Delegátumok C#-ban Krizsán Zoltán iit

Átírás:

Emlékeztető: a fordítás lépései Forrás-kezelő (source handler) Szimbólumtábla-kezelés Fordítóprogramok előadás (A, C, T szakirány) Lexikális elemző (scanner) Szintaktikus elemző (parser) Szemantikus elemző (semantic analizer) Belső reprezentáció Kódgenerátor (code generator) Optimalizáló (optimizer) Kód-kezelő (code handler) Tárgyprogram 1 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 2 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés Információáramlás Információáramlás Programszöveg x = y + 2; Lexikális elemző: lexikális elemek sorozatát állítja elő Lexikális elemek változó operátor változó operátor számkonstans utasításvég Szemantikus elemző: deklarálva van-e az x és y változó? x és y + 2 kifejezések típusa azonos-e? stb. Kódgenerálás: utasítások generálása a tárgyprogram nyelvén, amelyek megvalósítják az értékadást. Szintaktikus elemző: felépíti a szintaxisfát 3 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 4 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés Információáramlás Információáramlás Szemantikus elemző: deklarálva van-e az x és y változó? x és y + 2 kifejezések típusa azonos-e? stb. Kódgenerálás: utasítások generálása a tárgyprogram nyelvén, amelyek megvalósítják az értékadást. A szemantikus elemzéshez és a kódgeneráláshoz nem elég a lexikális elemek sorozata és a szintaxisfa! A szemantikus elemzés és a kódgenerálás számára szükséges kiegészítő információk: konstansok értéke változók típusa függvények, operátorok szignatúrája a tárgykódba már bekerült változók, függvények címe részkifejezések típusa, hozzárendelt tárgykód stb. 4 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 5 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés

Információáramlás Szimbólumtáblában tárolt információk A szemantikus elemzés és a kódgenerálás számára szükséges kiegészítő információk: konstansok értéke változók típusa függvények, operátorok szignatúrája a tárgykódba már bekerült változók, függvények címe részkifejezések típusa, hozzárendelt tárgykód stb. Ezeket az információkat két módon tároljuk: szimbólumtábla szemantikus értékek szimbólum neve szimbólum attribútumai: definíció adatai típus tárgyprogram-beli cím definíció helye a forrásprogramban szimbólumra hivatkozások a forrásprogramban 5 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 6 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés Szimbólum neve Definíció adatai a szemantikus elemző és a kódgenerátor a szimbólumokat a nevükkel azonosítja a nevek általában változó hosszúságúak lehetnek érdemes dinamikus memóriában tárolni a tábla csak egy mutatót tartalmaz pl. C++ std :: string választás esetén pont ez történik... változó típus módosító kulcsszavak: const, static... címe a tárgyprogramban (függ a változó tárolási módjától) 7 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 8 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés Definíció adatai Definíció adatai változó típus módosító kulcsszavak: const, static... címe a tárgyprogramban (függ a változó tárolási módjától) függvény, eljárás, operátor paraméterek típusa visszatérési típus módosítók címe a tárgyprogramban típus (típusleíró, típusdeszkriptor) egyszerű típusok: méret rekord: mezők nevei és típusleírói tömb: elem típusleírója, index típusleírója, méret intervallum-típus: elem típusleírója, minimum, maximum unio-típus: a lehetséges típusok leírói, méret 8 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 9 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés

Tárgyprogram-beli cím Tárgyprogram-beli cím A változók címét a definiáláskor határozza meg a fordító. globális és statikus változók: az adatszegmens kezdetétől számított relatív cím az utoljára elhelyezett változó utáni szabad helyre lokális változók (alprogramban vagy belső blokkban deklarálva): a veremben kap helyet az aktuális veremkereten belüli relatív cím az ebben a blokkban utoljára deklarált változó után dinamikusan foglalt változók a heap memóriában kapnak helyet címük csak a program futásakor derül ki mutatókkal hivatkozunk rájuk, csak azonak van neve deklarált mutatók az előző két kategóriába esnek Az alprogramok tárgyprogram-beli címét is definiáláskor határozza meg a fordító. kódszegmensen belüli relatív cím az utoljára definiált alprogram utáni szabad helyre 10 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 11 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés Hivatkozások a szimbólumra (Túl) egyszerű példa deklaráció, definíció és hivatkozások sorainak száma a forrásprogramban hasznos lehet: jó hibaüzenetek generálásához kereszthivatkozás-lista létrehozásához ( Hol melyik változót használjuk? ) 3. 6. 12 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 13 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés (Túl) egyszerű példa (Túl) egyszerű példa 3. 6. d változó double 1 3. 6. d változó double 1 fv függvény double int 2 i paraméter int 2 14 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 15 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés

(Túl) egyszerű példa (Túl) egyszerű példa 3. 6. d változó double 1 fv függvény double int 2 i paraméter int 2 4 j változó int 4 3. 6. d változó double 1 5 fv függvény double int 2 i paraméter int 2 4 j változó int 4 5 16 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 17 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés A szimbólumtábla műveletei Hatókör, láthatóság, élettartam keresés beszúrás szimbólum használatakor új szimbólum megjelenésekor tartalmaz egy keresést is: Volt-e már deklarálva? hatókör: Ahol a deklaráció érvényben van. Ezek hatékonysága nagy mértékben befolyásolja a fordítóprogram sebességét! 18 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 19 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés Hatókör, láthatóság, élettartam Hatókör, láthatóság, élettartam hatókör: Ahol a deklaráció érvényben van. láthatóság: Ahol hivatkozni lehet rá a nevével. része a hatókörnek az elfedés miatt lehet kisebb, mint a hatókör hatókör: Ahol a deklaráció érvényben van. láthatóság: Ahol hivatkozni lehet rá a nevével. része a hatókörnek az elfedés miatt lehet kisebb, mint a hatókör élettartam: Amíg memóriaterület van hozzárendelve. 19 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 19 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés

Példa: hatókör Példa: láthatóság int x = 3; int x = 3; 20 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 21 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 2. 3. 7. 22 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 22 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 2. 3. 7. 2. 3. 7. 23 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 24 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés

2. 3. 7. 2. 3. 7. 25 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 26 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 2. 3. 7. x int... 5.sor 2. 3. 7. x int... 5.sor 27 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 28 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 2. 3. 7. x int... 5.sor 2. 3. 7. 29 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 30 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés

Verem szimbólumtábla Meddig kell a szimbólumokat törölni a blokk végén? Számon kell tartani a blokk kezdetét a szimbólumtábla vermében! Verem szimbólumtábla Meddig kell a szimbólumokat törölni a blokk végén? Számon kell tartani a blokk kezdetét a szimbólumtábla vermében! Ötlet: blokk-index vektor ez is egy verem blokk kezdetén: set az új blokk első szimbólumára mutató pointert teszünk a blokk-index vektorba blokk végén: reset a blokk-index vektor tetején lévő pointer mutatja, hogy meddig kell törölni az elemeket a szimbólumok törlése után a blokk-index vektor legfelső elemét is törölni kell Név: verem szimbólumtábla 31 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 31 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés Példa Hatékonyságnövelés int a int b; int c; int d; int e;... 3 1 4. e int... 3. d int... 2. c int... 1. b int... 0. a int... verem-szimbólumtábla: keresés: lineáris beszúrás (mivel tartalmaz egy keresést is): lineáris 32 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 33 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés Hatékonyságnövelés Faszerkezetű szimbólumtábla verem-szimbólumtábla: keresés: lineáris beszúrás (mivel tartalmaz egy keresést is): lineáris hatékonyabb adatszerkezetek: kiegyensúlyozott fa: keresés és beszúrás is logaritmikus hash-tábla: keresés és beszúrás is konstans műveletigényű (jól megválasztott hash-függvény esetén) Minden blokkhoz egy fa tartozik. A szimbólumtábla sorai a fa csúcsaiban helyezkednek el. A fákat egy veremben tároljuk. Új blokk kezdetén egy új (üres) fát teszünk a verembe. A blokk szimbólumait ebbe a fába láncoljuk be. Időnként kiegyensúlyozzuk a fát. (Ha a nyelvben van külön deklarációs része a blokkoknak, akkor elég ennek a végén kiegyensúlyozni.) A blokk végén a teljes fát törölni kell a veremből. A verem tetején lévő fában kezdjük. Továbblépünk az előző fára, ha addig nem volt találat. Az első előfordulásig keresünk. 33 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 34 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés

Hash-szerkezetű szimbólumtábla Keresés a hash-szerkezetű szimbólumtáblában szimbólumtábla sorai: veremben (mint a verem-szimbólumtábla esetén) van blokk-index vektor is hash-függvény: a szimbólum nevét egy hash-értékre képezi le hash-tábla: a hash értékekhez hozzárendeli a legutóbbi ilyen hash-kódú szimbólum pozícióját a veremben ha még nem volt ilyen kódú szimbólum: nullpointer vagy speciális érték ha több ilyen kódú szimbólum is van: láncolni kell őket a legutóbbitól a régebbiek felé a hash-függvénnyel meghatározzuk a keresendő szimbólum hash-értékét a hash-táblából megkapjuk az ilyen kódú szimbólumok láncolt listáját végigmegyünk a listán az első találatig 35 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 36 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés Beszúrás a hash-szerkezetű szimbólumtáblába Törlés a hash-szerkezetű szimbólumtáblából a szimbólumot (és attribútumait) a verem tetejére helyezzük a hash-függvénnyel meghatározzuk a beszúrandó szimbólum hash-értékét a hash táblában a kapott hash értékhez bejegyezzük a verem-beli pozíciót ha volt már ilyen hash-kódú szimbólum, akkor az új szimbólumhoz beláncoljuk blokk végén a blokk-index vektor tetején lévő elem mutatja, hogy meddig kell törölni a szimbólumokat egy szimbólum törlése: előállítjuk a hash-értékét a hash-táblába a kapott hash-értékhez beírjuk a törlendő elemhez láncolt következő elem pozícióját (ha nincs hozzá láncolva elem, akkor a hash táblába az üres lista jelzés kerül) eltávolítjuk az elemet a verem tetejéről a blokk összes szimbólumának törlése után a blokk-index vektor legfelső elemét is töröljük 37 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 38 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés Minősített nevek kezelése Minősített nevek kezelése A (külső) x és b szimbólumokhoz fel kell jegyezni a szimbólumtáblába, hogy az a névtérhez tartoznak. 39 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 40 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés

Minősített nevek kezelése A (belső) x és print szimbólumokhoz fel kell jegyezni a szimbólumtáblába, hogy a b névtérhez tartoznak. Minősített nevek kezelése A nem minősített nevű szimbólumok keresése nem változik. 41 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés 42 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés Minősített nevek kezelése Az a :: x szimbólum keresésekor olyan x-et kell keresni a szimbólumtáblában, amihez fel van jegyezve, hogy az a névtérben van. 43 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés Szimbólumok importálása using ; int main() return 0; A névterek szimbólumait a veremből nem törölni kell, hanem feljegyezni egy másik tárterületre. A using direktíva használatakor az importált névtér szimbólumait be kell másolni a verembe (vagy legalább hivatkozást tenni a verembe erre a névtérre). 44 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés Osztályok A rekordokhoz hasonló: típusleírót kell készíteni hozzá. Láthatóság szabályozása: a mezőkhöz és tagfüggvényekhez fel kell jegyezni, hogy milyen a láthatóságuk (public, protected, private). Az osztályok névteret is alkotnak: (statikus) adattagjai minősített névvel is elérhetők, ilyenkor az előbb látott technikát lehet használni. 45 Fordítóprogramok előadás (A, C, T szakirány) Szimbólumtábla-kezelés