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



Hasonló dokumentumok
Fordítóprogram (compiler), értelmezőprogram (interpreter)

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

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

C programozási nyelv

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

Tárgymutató. Typotex Kiadó. Csörnyei Zoltán. akonyv 2007/3/9 6:29 page 315 # , >, 205 <, 96, 108, 115 >, 96, 108, 115 =, 96, 108

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

Programzás I gyakorlat

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

Adatbázis és szoftverfejlesztés elmélet

Programozás alapjai Bevezetés

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

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?

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 TANTÁRGY ADATLAPJA

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

C++ programok fordítása

C programozás. 1 óra Bevezetés

Az assembly nyelv sor-orientált nyelv, tehát minden sorba pontosan egy utasítás kerül. Egy sor mezőkből áll a következőképpen:

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

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

Programozási nyelvek (ADA)

Fordító Optimalizálás

Programozási nyelvek (ADA)

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?

Alkalmazások architektúrája

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

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

Digitális technika VIMIAA01 9. hét

Fordítóelmélet bevezetés

Flex tutorial. Dévai Gergely

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

Aritmetikai kifejezések lengyelformára hozása

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

Programozási nyelvek a közoktatásban alapfogalmak I. előadás

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

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.

B I T M A N B I v: T M A N

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

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

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

Programozás alapjai 2.Gy: A C nyelv alapjai P R O

INFORMATIKAI ALAPISMERETEK

Dr. Schuster György október 14.

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

Programozási nyelvek 6. előadás

INFORMATIKAI ALAPISMERETEK

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Makrózás gyakorlat (GYAKORLAT)

Programozási nyelvek a közoktatásban alapfogalmak II. előadás

Java II. I A Java programozási nyelv alapelemei

Alprogramok, paraméterátadás

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

Programozás I. gyakorlat

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

Internet programozása. 1. előadás

INFORMATIKAI ALAPISMERETEK

Clang Static Analyzer belülről

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.

Vizuális, eseményvezérelt programozás XI.

2. előadás Programegység, fordítási egység, könyvtári egység, beágyazás, blokkszerkezet, alprogramok, csomagok

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

INFORMATIKAI ALAPISMERETEK

A Feldspar fordító, illetve Feldspar programok tesztelése

Szerző Lővei Péter LOPSAAI.ELTE IP-08PAEG/25 Daiki Tennó

ME Szoftverfejlesztés

Bevezetés. Dr. Iványi Péter

Assembly programozás levelező tagozat

INFORMATIKAI ALAPISMERETEK

BUJDOSO GYÖNGYI FAZEKAS ATTILA // / / KEZDOLEPESEK TERTIA KIADÓ

FORMÁLIS NYELVEK ÉS FORDÍTÓPROGRAMOK. LABORGYAKORLATOK

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

Bevezetés a programozásba. 6. Előadás: C++ bevezető

PPKE-ITK Bevezetés a programozásba 1.

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

Bevezetés az informatikába

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

SZOFTVERFEJLESZTÉS. Földtudományi mérnöki mesterszak / Geoinformatikus-mérnöki szakirány. 2017/18 II. félév. A kurzus ebben a félévben nem indult

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

Széchenyi István Szakképző Iskola

Fordítóprogramok. és formális nyelvek

B I T M A N B I v: T M A N

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

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

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

A KÓDOLÁS TECHNIKAI ELVEI

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

Szoftvertechnológia alapjai Java előadások

Java II. I A Java programozási nyelv alapelemei

Szoftver labor III. Tematika. Gyakorlatok. Dr. Csébfalvi Balázs

A C programozási nyelv III. Pointerek és tömbök.

A MATLAB alapjai. Kezdő lépések. Változók. Aktuális mappa Parancs ablak. Előzmények. Részei. Atomerőművek üzemtana

SZÁMÍTÓGÉPEK BELSŐ FELÉPÍTÉSE - 1

Ha meg akarod tudni, hogy az egyes típusok milyen méretűek a te rendszereden, a következő program megmutatja:

1. Alapok. #!/bin/bash

8. gyakorlat Pointerek, dinamikus memóriakezelés

A szürke háttérrel jelölt fejezet/alfejezet szövege a CD-mellékleten található. A CD-melléklet használata. 1. Elméleti áttekintés 1

Átírás:

Fordítóprogramok Aszalós László 2009. szeptember 7. 1. Bemelegítés Honlap: www.inf.unideb.hu/ aszalos/diak.html (Fordítóprogramok, 2009) Jegymegajánló: utolsó hét előadásán. PótZH (csak gyakorlat) vizsgaidőszak első hete. 1.1. Ajánlott irodalom Csörnyei Zoltán: Fordítóprogramok Typotex, 2006 Fülöp Zoltán: Formális nyelvek és szintaktikus elemzésük Poligon, 1999 2. Általános ismertető 2.1. Fordítóprogramok fajtái struktúra editor szövegszerkesztő, de ismeri a nyelv kulcsszavait, felajánlja a szerkezeti elemeket (ciklus, stb.), ismeri a zárójelpárokat. pretty printer a forráslistában más színekkel vagy betűtípussal szedi a szerkezeti elemeket, megjegyzéseket, változókat, stb. static checker a program futtatása vagy lefordítása nélkül felfedez szintaktikai vagy szemantikai hibákat (nem definiált változó, típusütközés) szövegformázó a forráskód a formázandó szöveg, amely tartalmazza a formázási parancsokat: alsó-felső index, képletek, ábrák. Pl. TeX, pic-tbl-eqn-troff, Lout, Metapost vagy web-böngésző programozható hardver a forrás egy programkód, az output a neki megfelelő áramkör interpreter a forráskód transzformálása helyett azok azonnali végrehajtása lekérdezések interpretere az SQL a lekérdezéseket az aktuális adatbázis számára érthető formára alakítja. 1

1. ábra. Fordítóprogramok gondolati térkép 2

2.2. Fordítás és értelmezés folyamata 2. ábra. Fordítóprogram működése 3. ábra. Értelmező működése 2.3. Fogalmak forrásprogram (avagy forrásnyelvű program) a fordító (compiler) inputja tárgyprogram (avagy tárgynyelvű program) a fordító outputja fordítási idő/futtatási idő n menet ha a forrásprogramot P, a tárgyprogramot az Q, a fordítási folyamatot T jelöli, és Q = T (P ), ahol T = T 1... T n, akkor n menetes fordítóról beszélünk. T i T i+1 T n (P )-t a program közbülső programformájának nevezzük. 2.4. Fordítóprogram struktúrája Input: forrásprogram Output: tárgyprogram és/vagy lista a forrásprogram hibáiról, a tárgyprogram adatairól 3

4. ábra. Fordítóprogramok szerkezete 2.5. Input-handler A forrásnyelvű programot a háttértárolóról a memóriába kell juttatni. Pufferelt beolvasás (operációs rendszer feladata), megjegyzések, soremelések, felesleges szóközök figyelmen kívül hagyása. (include fájlok, makrók kezelése) Input: forrásprogram Output: karaktersorozat 2.6. Output-handler Input: forrásprogram, hibák Output: ember számára emészthető hibalista 2.7. Code-handler Operációs rendszertől függően kell elkészíteni az áthelyezhető, futtatható programot. Input: tárgykód Output: tárgyprogram 2.8. Fordító/compiler Input: karaktersorozat Output: tárgykód, hibák Analízis: az input feldolgozása, lexikális egységekre bontás Szintézis: a forrás alapelemeinek megfelelő tárgykódok összeállítása tárgykóddá 4

2.9. Lexikális elemző A forrás felbontása szimbolikus egységekké: változók, kulcsszavak, konstansok, operátorok. Input: karaktersorozat Output: szimbólumsorozat, lexikális hibák. Felhasznált elmélet: reguláris nyelv, reguláris kifejezések, Thompson módszere determinisztikus automata generálására. Generátor: lex 2.10. Szintatikus elemző Input: szimbólumsorozat Output: szintaktikusan elemzett program (elemzési fa/szintaxisfa), szintaktikus hibák Módszerek: általános alulról-fel vagy felülről-le elemző, LL, LR, precedencia elemzők Generátor: yacc/bison 2.11. Szemantikus elemző Annak ellenőrzése, hogy pl. a megfelelő változók, konstansok definiálva vannak-e, megfelelő típusúak-e. Input: elemzési fa Output: analizált program, analitikus hibák 2.12. Kódgenerátor Input: analizált program Output: tárgykód (általános, vagy processzorfüggő) 2.13. Általános tárgykódú kódgenerátor tripod: háromcímű kód, egy utasításnak maximum három argumentuma lehet fordított lengyel jelölés 5

2.14. Kódoptimalizáló Hatékony program készítése: azonos kódrészletek alprogramba helyezése, felesleges ismétlődő számítások kiemelése a ciklusokból. Input: tárgykód Output: tárgykód 2.15. További alapfogalmak Front end azon fázisok összessége, amely a forrásnyelvtől függ és független a tárgynyelvtől (lexikai, szintaktikai és szemantikai elemző, szimbólumtábla létrehozása, közbülső kód generálása, hibakezelés, esetleges kódoptimalizálás) Back end azon fázisok összessége, amely a tárgynyelvtől függ és független a forrásnyelvtől. (bizonyos kódoptimalizálások, kódgenerálás, a hibák és a szimbólumtábla kezelése) 2.16. Többszörös front és back end Szokásos módszer, hogy több különböző nyelvi fordítónál is ugyanazt a közbülső kódot használjuk, így eme fordítók back end-je megegyezhet. Egy front end-hez tartozhat több back end, ezzel keresztfordítás készíthető. 3. Fordítás a gyakorlatban 3.1. Lexikális analízis: x := y + z 30 x azonosító := értékadás jele y azonosító + összeadás jele z azonosító szorzás jele 30 konstans szám 3.2. Szintaktikai analízis Az elemzési fa az 5. ábrán látható. 6

5. ábra. Szintaktikai elemzés eredménye 3.3. Szemantikai analízis Ha az előbbi példában x valós típusú a 30 egész számot a fordító lecserélheti a 30.0 valós számra, illetve egész változót egy int2real függvény beillesztésével helyes típusúra hozhatja. 3.4. Kódgenerálás temp1 := int2real(30) temp2 := id3 temp1 temp3 := id2 + temp2 id1 := temp3 fordított lengyel jelöléssel: x y z 30.0 + := (Egy egyszerűbb fordító a processzor utasításainak kb. 20%-át használja.) 3.5. Kódoptimalizálás Példánkban 7

temp1 := id3 30.0 id1 := id2 + temp1 3.6. Kódgenerátor LOAD id3 MUL #30.0 STORE temp1 LOAD id2 ADD temp1 STORE id1 4. Módszerek 4.1. Keresztfordítás Feladat Sun-os C fordító készítése PC-s C fordító felhasználásával 6. ábra. Keresztfordítás SUN C fordító írása C-ben SUN C fordító készítése PC-s C fordítóval (tárgykód), majd PC-s szerkesztővel (PC-n futtatható kód) A PC-n futtatható SUN C fordítóval lefordítani a SUN C fordító forrását (SUN tárgykódú program) SUN-os szerkesztővel a tárgykódú program SUN-on futtatható alakjának elkészítése 4.2. Csizmahúzás/bootstrapping minimális C fordító írása assembly nyelven 8

7. ábra. Csizmahúzás minimális C fordító készítése assemblerrel (tárgykód) majd szerkesztővel (futtatható kód) teljes C fordító írása minimális C nyelven teljes C fordító készítése minimális C fordítóval (tárgykód) majd szerkesztővel 4.3. Virtuális processzorra fordítás p-code Pascal programokhoz Java? 9