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

Hasonló dokumentumok
Programozási nyelvek (ADA)

Fordító részei. Fordító részei. Kód visszafejtés. Izsó Tamás szeptember 29. Izsó Tamás Fordító részei / 1

Programozási nyelvek (ADA)

1. Egyszerű (primitív) típusok. 2. Referencia típusok

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

Fordító Optimalizálá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

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

Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem }

Digitális technika VIMIAA01 9. hét Fehér Béla BME MIT

Digitális technika VIMIAA01 9. hét

A programozás alapjai

Fordítóprogramok. Aszalós László szeptember 7.

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

Adatbázis és szoftverfejlesztés elmélet

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Bemutatkozás. Bemutatkozás. Bemutatkozás. Bemutatkozás. 1. előadás. A tárgy címe: A programozás alapjai 1

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

Java II. I A Java programozási nyelv alapelemei

C programozási nyelv

Operációs rendszerek gyakorlat

1. Jelölje meg az összes igaz állítást a következők közül!

Segédanyagok. Formális nyelvek a gyakorlatban. Szintaktikai helyesség. Fordítóprogramok. Formális nyelvek, 1. gyakorlat

Vezérlési szerkezetek

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

Occam 1. Készítette: Szabó Éva

Szoftvertervezés és -fejlesztés I.

Szelekció. Döntéshozatal

3 A C programozási nyelv szintaktikai egységei

Bevezetés a programozásba

Java II. I A Java programozási nyelv alapelemei

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Fordító Optimalizálás

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

AWK programozás, minták, vezérlési szerkezetek

Mintavételes szabályozás mikrovezérlő segítségével

Karakterkészlet. A kis- és nagybetűk nem különböznek, a sztringliterálok belsejét leszámítva!

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...

Webprogramozás szakkör

SZÁMÍTÓGÉPES PROBLÉMAMEGOLDÁS

Számítógép architektúra

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Széchenyi István Szakképző Iskola

Podoski Péter és Zabb László

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

Programozási nyelvek JAVA EA+GY 1. gyakolat

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.

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

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

C programozás. 1 óra Bevezetés

Programozási alapismeretek 3. előadás

Java programozási nyelv

Komputeralgebra Rendszerek

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

A PROGRAMOZÁS ALAPJAI 3. Készítette: Vénné Meskó Katalin

Objektumorientált Programozás III.

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

Forráskód formázási szabályok

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Programok értelmezése

Flex tutorial. Dévai Gergely

A KÓDOLÁS TECHNIKAI ELVEI

Bevezetés az informatikába

Algoritmizálás és adatmodellezés tanítása 1. előadás

A programozás alapjai 1 Rekurzió

7. fejezet: Mutatók és tömbök

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

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

Mintaillesztő algoritmusok. Ölvedi Tibor OLTQAAI.ELTE

OOP I. Egyszerő algoritmusok és leírásuk. Készítette: Dr. Kotsis Domokos

Máté: Assembly programozás

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

Programzás I gyakorlat

Szkriptnyelvek. 1. UNIX shell

Programozás alapjai Bevezetés

Bevezetés a C++ programozási nyelvbe

Bevezetés a programozásba I.

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem }

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Előfeldolgozó rendszer Tömbök. Dr. Bécsi Tamás 4. Előadás

Programozási nyelvek Java

Pénzügyi algoritmusok

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

Járműfedélzeti rendszerek II. 1. előadás Dr. Bécsi Tamás

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

Aritmetikai kifejezések lengyelformára hozása

Assembly Utasítások, programok. Iványi Péter

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

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

Bevezetés az informatikába

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

VI. SZOFTVERES PROGRAMOZÁSÚ VLSI ÁRAMKÖRÖK

file./script.sh > Bourne-Again shell script text executable << tartalmat néz >>

Vezérlési szerkezetek. Szelekció Ciklusok

Számítógépek felépítése

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r

További vezérlő valamint számításokat megkönnyítő szerkezetek

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

találhatók. A memória-szervezési modell mondja meg azt, hogy miként

AWK programozás, minták, vezérlési szerkezetek

Átírás:

sallang avagy Fordítótervezés dióhéjban Sallai Gyula Az előadás egy kis példaprogramon keresztül mutatja be fordítók belső lelki világát De mit is jelent, az hogy fordítóprogram?

Mit csinál egy fordító? valami.c fordítás valami.exe A fordító feladata a kényelmes programozási nyelvet (pl. C) gépi kódra (pl. x86) fordítani. Egy fogaskerék ikonnal vagy egy paranccsal meghívható, nem igazán látjuk, mi történik a motorháztető alatt. Programozási kihívások terén egészen sokat tud nyújtani egy fordító írása: Modellezés, tervezés Nyelvi elemzés Adatszerkezetek, hatékony algoritmusok Optimalizálás Számítógép architektúrák

sallang Saját progamozási nyelv Egyszerű szintaxis Alap vezérlési szerkezetek Egész és logikai típus Saját virtuális gép a végrehajtáshoz A példa fordító még alfa előtti állapotban szerepel, jelenleg csak a fontos vezérlési szerkezetek (if, else, while) működnek, illetve csak egész és logikai típusokkal tudunk dolgozni. A dián egy sallangban írt program látható, ami meghatározza egy szám legkisebb valódi osztóját. A program két részből épül fel: deklarációs blokk és utasítás blokk. A deklarációs blokkban nem deklarált változókat nem használhatjuk. A végrehajtást nem igazi CPU n végezzük, erre van egy saját virtuális gép. Így a nyelv működése hasonló a Java hoz.

Lexikális elemzés A lexikális elemzés során eltávolítjuk a minket nem érdeklő részeket (whitespace, kommentek, stb.) a releváns szabad karaktereket pedig sokkal kényelmesebben kezelhető tokenekké alakítjuk. A tokenek együttes jelentéssel bíró karaktersorozatok, azaz pl. a while karaktersorozatot nem így, hanem egyetlen konstansként (T_WHILE) tudjuk kezelni. A képen látható, hogy milyen tokenfolyam keletkezik a forrásfájlból, a formázást az olvashatóság kedvéért hagytam meg.

Nyelvtani elemzés a = 3 + 4 T_ID,'=', T_INT_LITERAL, '+', T_INT_LITERAL A tokenekből hozunk létre egyre komplexebb szabályokat. Pl. Előírjuk, hogy a skalár vagy egész szám literális vagy logikai literális token. Az azonosító (itt: változónév) egy azonosító token. Ezután előírjuk, hogy a kifejezés vagy egy skalár, vagy egy azonosító, illetve egy vagy több kifejezés és valamilyen operátor. Az illesztés után elkezdünk egy fát építeni. Az egyes kifejezések gyermekei az operandusai lesznek. Ezzel a módszerrel egy teljes forrásfájlt le tudunk írni.

A szintaktikai elemzés után egy ehhez hasonló fát építünk a programunkból. Ezt az adatszerkezetet Absztarkt Szintaxisfának (AST) hívjuk, mert már kevésbé függ a forrásnyelvtől (hasonló szemantikájú, más szintaxisú nyelvből is építhető ugyanilyen AST).

Szemantikus elemzés Van egy szintaktikailag helyes szövegünk, de értelmes e? Deklaráltuk a használt változókat? Megfelelő típusok közt végzünk műveleteket? A következő lépés a szemantikus elemzés. Bár tudjuk, hogy szintaktikailg helyes programot írtunk, még nem lehetünk biztosak benne, hogy nincs tele értelmetlenséggel (típusosság megsértése, ismeretlen változók használata, stb.)

Szimbólum tábla Honnan tudjuk, hogy egy változót deklaráltunk e már? Tárolnunk kell a már látott azonosítókat. Ha kétszer próbáljuk ugyanazt a változót deklarálni vagy deklarálatlan változót használni szemantikai hiba! A tárolt azonosítókat egy szimbólum táblának nevezett adatszerkezetbe rakjuk. Minden látott azonosító bekerül ide, az itt nem szereplő azonosítók használatakor a fordító hibát jelez. Legjobban egy hash táblával lehet megvalósítani, ahol a kulcs az azonosító neve, az érték pedig az ahhoz tartozó információk.

Kódgenerálás A fordító az AST bejárásával assembly kódot ad ki. Ezt egy másik fordító (assembler) fogja átírni binárissá. Kódgeneráláskor az AST t járjuk be, a megfelelő csúcsoknál kiadjuk a megfelelő utasítást. (Pl.: add típusú csúcsnál a virtuális gép add utasítását adjuk ki. Feltételnél pedig a feltétel kiértékelése után egy feltételes ugrást.) A generált assembly kódot ezután az assembler átfordítja végül binárissá, a számítógép nyelvére. Ezután végre tudjuk hajtani a programunkat. A példa egy saját, egészen kellemesen használható virtuális gépre fordít, amely nagyon sok enyhítést alkalmaz (közvetlen print utasítás, végtelen számú regiszter, stack alapú műveletvégzés, stb.)