Fordítóelmélet bevezetés



Hasonló dokumentumok
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

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

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

Fordító Optimalizálás

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

Programozási nyelvek (ADA)

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?

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

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

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

Formális szemantika. Kifejezések szemantikája. Horpácsi Dániel ELTE Informatikai Kar

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

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

Autóipari beágyazott rendszerek. Komponens és rendszer integráció

C programozási nyelv

Clang Static Analyzer belülről

Java II. I A Java programozási nyelv alapelemei

GPU Lab. 5. fejezet. A C++ fordítási modellje. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

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

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

Adatbázis rendszerek. dr. Siki Zoltán

Digitális technika VIMIAA01 9. hét

Programok értelmezése

Automaták és formális nyelvek

Fordító Optimalizálás

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

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

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

KOMPUTER-ALGEBRA RENDSZEREK VERIFIKÁCIÓJA

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

C++ programok fordítása

A TANTÁRGY ADATLAPJA

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

Haladó Fordítóprogramok

Programzás I gyakorlat

Szöveges domain- specifikus nyelvek. Budapes( Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék

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

Metamodellezés. Simon Balázs BME IIT, 2011.

Java programozási nyelv

AWK programozás Bevezetés

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai

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

C programozás. 1 óra Bevezetés

Adatszerkezetek és algoritmusok

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.

5. előadás Reguláris kifejezések, a reguláris nyelvek jellemzése 1.

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

Java II. I A Java programozási nyelv alapelemei

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)

Mindenki abból a három tantárgyból tesz szigorlatot, amelyet hallgatott.

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

Objektumorientált paradigma és a programfejlesztés

Operációs rendszerek gyak.

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

Modellező eszközök, kódgenerálás

Adatbázis-kezelő rendszerek. dr. Siki Zoltán

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

Modellek végrehajtása, kódgenerálás

Python tanfolyam Python bevezető I. rész

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

Algoritmusok Tervezése. 6. Előadás Algoritmusok 101 Dr. Bécsi Tamás

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba

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

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

Véges automaták, reguláris nyelvek

Fordítás Kódoptimalizálás

Digitális technika (VIMIAA02) Laboratórium 3

Komputeralgebra rendszerek

Bevezetés, a C++ osztályok. Pere László

Digitális technika (VIMIAA02) Laboratórium 3

A félév során előkerülő témakörök

Alkalmazások architektúrája

Komputeralgebra rendszerek

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

Automaták mint elfogadók (akceptorok)

Bevezetés a C++ programozási nyelvbe

Relációs algebra 1.rész alapok

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Bevezetés az informatikába

Informatika tanítási módszerek

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

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

7. előadás Környezetfüggetlen nyelvtanok

Már megismert fogalmak áttekintése

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

Web-programozó Web-programozó

Flex tutorial. Dévai Gergely

Programozási nyelvek 6. előadás

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

Absztrakt adatstruktúrák A bináris fák

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

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

ZH feladatok megoldásai

Regionális forduló november 18.

Objektumorientált paradigma és programfejlesztés Bevezető

Programozási nyelvek (ADA)

Információ megjelenítés Alapok

Átírás:

Fordítóelmélet bevezetés Simon Balázs BME IIT, 2011. forrás: http://www.info.uni-karlsruhe.de/lehre/2007ws/uebau1/

Tartalom Motiváció és követelmények Fordítás típusai Formális nyelvek Fordítás fázisai Analízis Leképzés Kódgenerálás Fordító által használt adatszerkezetek (C) Simon Balázs, BME IIT, 2011. 2

Motiváció és követelmények (C) Simon Balázs, BME IIT, 2011. 3

Motiváció A gyakorlati informatika legrégebbi területe Stabil architektúra A helyesség és megbízhatóság követelmény Elősegíti a programnyelvek fejlődését Elősegíti az egyéb HW és SW interfészek fejlődését Egységes szövegfeldolgozást és kódgenerálást tesz lehetővé Sokféle alkalmazási terület: szövegformázás, programtranszformáció, metaprogramozás, aspektus-orientált programozás, stb. (C) Simon Balázs, BME IIT, 2011. 4

Felhasználási területek Információ kinyerése szövegből pl. LaTeX, Word, konfigurációs fájlok Szövegből másik szöveg előállítása forráskód-transzformáció pl. preprocesszor, kódgenerálás Programszövegből virtuális gép kódja pl. Java byte-code,.net CLI Programszövegből gépi kód pl. C fordító, Pascal fordító (C) Simon Balázs, BME IIT, 2011. 5

Mi a fordítás? A szöveges forrásnyelv átvitele a célnyelvre a jelentés megtartásával A forrás- és célnyelv lehetnek azonosak A célnyelv lehet számítógép által értelmezhető Programozási nyelveknél adott a szemantika (jelentés) a program struktúrája határozza meg a jelentést pl. adattípusok, vezérlőszerkezetek, stb. (C) Simon Balázs, BME IIT, 2011. 6

Helyesség Követelmények Minimális erőforráshasználat futásidő, memóriaméret, fogyasztás Kompatibilitás más fordítókkal más nyelvekből, más számítógépeken fordított kódok Fordítási sebesség (C) Simon Balázs, BME IIT, 2011. 7

Fordítás típusai (C) Simon Balázs, BME IIT, 2011. 8

Fordítás típusai Interpretálás Előfordítás Futás-idejű fordítás Teljes fordítás Makrók (C) Simon Balázs, BME IIT, 2011. 9

Interpretálás előfordítás nélkül Kifejezések beolvasása egyenként Ezek értelmezése, fordítása Végrehajtás egyenként Megéri, ha csak egyszer kell végrehajtani pl. parancsértelmezők (DOS, UNIX shell) (C) Simon Balázs, BME IIT, 2011. 10

Interpretálás előfordítással A forrásnyelv értelmezése Fordítás az interpreter által könnyen értelmezhető nyelvre pl. változódefiníció és -használat, post-fix formára transzformálás A célnyelv nem feltétlenül gépi kód Példa: Java byte-code (C) Simon Balázs, BME IIT, 2011. 11

Futási idejű fordítás Végrehajtás közbeni fordítás JIT = Just-In-Time fordítás A forráskódból előállított köztes kód továbbfordítása Gyorsabb, mint az interpretálás Lassabb, mint a teljes fordítás, mert nincs meg a teljes kontextus Kisebb memóriaigény: a köztes kód tömörebb, mint a célkód Dinamikus futásidejű viselkedést is figyelembe tudja venni Példa:.NET (a hiányzó típusinformációk miatt nem interpretálható) (C) Simon Balázs, BME IIT, 2011. 12

Teljes fordítás A gépközeli kódnak is van absztrakt gépi kódja A végrehajtást befolyásolja: a célgép HW-e operációs rendszer futtatórendszer (pl. memóriakezelés) Példa: C, Pascal fordító (C) Simon Balázs, BME IIT, 2011. 13

Makrók A forrás- és célnyelvek megegyeznek A makrók helyettesítési szabályokat definiálnak Példa: szövegformázás szövegfeldolgozás preprocesszor: C, C++, C# (C) Simon Balázs, BME IIT, 2011. 14

Formális nyelvek (C) Simon Balázs, BME IIT, 2011. 15

Formális nyelvek Természetes nyelv: bonyolult, strukturálatlan, félreérthető Számítógépek számára egyértelmű bemenet kell Formális nyelv: strukturált, egyértelmű szigorú szabályok vannak a mondatok előállítására számítógép számára könnyen értelmezhető (C) Simon Balázs, BME IIT, 2011. 16

Fogalmak Nemterminális (non-terminal) levezetések során eltűnnek jelölés: nagybetű pl. A, B, X, stb. Terminális (terminal) levezetések végén csak ezek maradnak jelölés: kisbetű, egyéb szimbólum pl. a, b, x, y, (, ), +, stb. Üres szimbólum (empty) azt jelzi, hogy az adott nemterminális eltűnik epszilon (ε) (C) Simon Balázs, BME IIT, 2011. 17

Fogalmak Mondat az előállítandó terminálisokból álló szimbólumsorozat Mondatszimbólum a kiinduló nemterminális (tipikus jelölés: S) ez reprezentálja a mondatot Levezetési szabály (production rule) megadja, hogy egy adott karaktersorozat mire cserélhető le pl. A aba, xb Ay, X ε, stb. (C) Simon Balázs, BME IIT, 2011. 18

Levezetés: Fogalmak a mondatszimbólumból terminálisok sorozatának előállítása a levezetési szabályok segítségével Elemzés: terminálisok egy adott sorozatából a levezetési szabályok felhasználási sorrendjének visszafejtése egészen a mondatszimbólumig (fordítóknál ez a fontos!) (C) Simon Balázs, BME IIT, 2011. 19

Példák levezetésekre A->a, A->Aa A=>Aa=>Aaa=>Aaaa=>aaaa S->AB, A->aA, A->a, B->bB, B->b S=>AB=>aAB=>aaAB=>aaAbB=>aaabB=> aaabb S->aSb, S->ε S=>aSb=>aaSbb=>aaaSbbb=>aaabbb S->aSBC, S->abC, CB->BC, bb->bb, bc->bc, cc->cc S=>aSBC=>aabCBC=>aabBCC=>aabbCC=> aabbcc=>aabbcc (C) Simon Balázs, BME IIT, 2011. 20

Chomsky-nyelvosztályok 3: Reguláris nyelvek (regular) 2: Kontextusfüggetlen nyelvek (context free) 1: Kontextusfüggő nyelvek (context sensitive) 0: Egyéb nyelvek Adott nyelvtan osztálya: csak az osztálynak megfelelő feltételeket teljesítő levezetési szabályokat tartalmaz Adott nyelv osztálya: a legegyszerűbb nyelvtan osztálya, amellyel a nyelv mondatai leírhatók (C) Simon Balázs, BME IIT, 2011. 21

Reguláris nyelvek Csak az alábbi típusú szabályok: A Ba és A a vagy A ab és A a bal oldalon egyetlen nemterminális jobb oldalon csak egy terminális vagy egy nemterminális és egy terminális (de mindig ugyan abban a sorrendben!) Elemzés: véges automatával fordítók esetén: lexikai elemzés így történik (C) Simon Balázs, BME IIT, 2011. 22

Kontextusfüggetlen nyelvek Csak az alábbi típusú levezetési szabályok: A α bal oldalon egyetlen nemterminális jobb oldalon (α) tetszőleges terminálisok és nemterminálisok sorozata Elemzés: veremautomatákkal vagy LL, LR, LALR, stb. fordítók esetén: szintaktikai elemzés így történik (C) Simon Balázs, BME IIT, 2011. 23

Kontextusfüggő nyelvek Csak az alábbi típusú levezetési szabályok: βaγ βαγ tehát A helyettesítése csak a β-γ kontextusban történhet a szabályok nem rövidítő szabályok: alkalmazásuk során sosem lesz rövidebb a már levezetett karaktersorozat Nehéz őket elemezni: fordítóknál nem használjuk (C) Simon Balázs, BME IIT, 2011. 24

Egyéb nyelvek Minden szabály megengedett Nagyon nehéz őket elemezni: Turing-gép (C) Simon Balázs, BME IIT, 2011. 25

Fordítás fázisai (C) Simon Balázs, BME IIT, 2011. 26

A fordítók archtektúrája Forrásnyelvből célnyelv előállítása Több fázisban Az egyes fázisok között: köztesnyelv Több köztesnyelv is lehet A köztesnyelvek szükségessége gyakorlati: egyszerűbb a fordítás kisebb a memóriaigény 1. Köztes k. Köztes Forrásnyelv nyelv 1. fázis nyelv n. fázis Célnyelv (C) Simon Balázs, BME IIT, 2011. 27

A fordítás fázisai Elemzés: 1. Lexikai elemzés (lexical analysis: lexer): szimbólumok meghatározása 2. Szintaktikai elemzés (syntax analysis: parser): konkrét és absztrakt szintaxisfa meghatározása 3. Szemantikai elemzés (semantic analysis): névfeloldás, típusellenőrzés, konzisztenciaellenőrzés Leképzés: 4. Transzformáció: célnyelvhez közeli reprezentációra 5. Globális optimalizálás: konstansok, közös részkifejezések, kód újraszervezése Kódkészítés: 6. Kód előállítása: végrehajtás sorrendje, parancsok kiválasztása, regiszterkiosztás, utóoptimalizálás 7. Assembler és linker: (C) Simon Balázs, BME IIT, 2011. 28 címhivatkozások feloldása, parancsok, címek és adatok kódolása

1. Lexikai elemzés (lexer) A forrásnyelv feldarabolása elemi jelentést hordozó elemekre (szimbólumok) Felesleges karakterek elhagyása kommentek, szóközök, tabulátorok, stb. A szintaktikai elemzés előtti fázis: véges automatával megoldható (reguláris nyelvek segítségével) gyorsabb (C) Simon Balázs, BME IIT, 2011. 29

2. Szintaktikai elemzés (parser) Előállítja a programkód fastruktúráját Concrete Syntax Tree (CST) Abstract Syntax Tree (AST) Bemenete: szimbólumsorozat Kontextusfüggetlen (CF = context-free) nyelvtan alapján dolgozik ezt könnyű elemezni viszonylag gyorsan elég nagy kifejezőerő tipikus elemző automaták: LL, LR, LALR (C) Simon Balázs, BME IIT, 2011. 30

3. Szemantikai elemzés AST elemzése indok: a programnyelvek context-sensitive-ek azonosítók (identifier) jelentésének meghatározása Név- és típusfeloldás Konzisztenciaellenőrzés a programnyelv által meghatározott korlátok ellenőrzése pl. statikus tömbök kiindexelése, konstansok, interfész függvényeinek implementációja, stb. Jelentés hozzárendelése operátorok definíciók és hivatkozások összerendelése (változók, függvények, stb.) (C) Simon Balázs, BME IIT, 2011. 31

4. Transzformáció Tényleges fordítás Objektumok reprezentációjának meghatározása a célgépen Operációk fordítása Vezérlőszerkezetek fordítása Eredmény: célnyelvhez közeli köztesnyelv Még nem keletkezik célnyelvben leírt kód (C) Simon Balázs, BME IIT, 2011. 32

5. Optimalizálás Optimalizáló transzformációk A működés helyességének megtartása Ez ma a fő kutatási terület Példák: dead code elimination, expression simplification, if optimalization, register allocation, tail recursion, stb. Nincs optimális programkód, csak optimalizált: egymásnak ellentmondó optimalizációk egy optimalizációs eljárás bevezethet olyan struktúrákat, amelyeket egy korábbi eljárás már kiszűrt így számít az eljárások sorrendje, akár megismétlése is (C) Simon Balázs, BME IIT, 2011. 33

Kód előállítása 6. Kódgenerálás Parancsok kiválasztása Végrehajtási sorrend kiválasztása Konkrét reprezentáció kiválasztása memória regiszter Lokális utóoptimalizálás (C) Simon Balázs, BME IIT, 2011. 34

7. Assembler és Linker Assembler: bináris előállítása szimbolikus címek feloldása, ameddig lehet Linker: lefordított modulok összeszerkesztése külső szimbolikus címhivatkozások feloldása (C) Simon Balázs, BME IIT, 2011. 35

Fordító által használt adatszerkezetek (C) Simon Balázs, BME IIT, 2011. 36

Fordító adatszerkezetei Szimbólumsorozat Concrete Syntax Tree (CST) Abstract Syntax Tree (AST) Attribútumos AST Kódgráf Szimbólumtábla Definíciós tábla (csak fogalmilag fontosak, nem feltétlenül jelennek meg az implementációban) (C) Simon Balázs, BME IIT, 2011. 37

Fordító moduláris struktúrája Elemzés Leképzés Kódgészítés Lexikai Szintaktikai Szemantikai Transzformáció Optimalizálás Kódgenerálás Linkelés Forrás nyelv Szimbólumsorozat Attribútumos AST Kódgráf Célnyelv AST Szimbólumtábla Definíciós tábla (C) Simon Balázs, BME IIT, 2011. 38

Szimbólum: Szimbólumsorozat a program elemi jelentéssel bíró egysége két rész: kulcs (token) és érték (value) Szimbólumsorozat: a programkód szimbólumok sorozataként való előállítása Lexer kimenete Parser bemenete (C) Simon Balázs, BME IIT, 2011. 39

CST, AST Concrete Syntax Tree (CST) a forráskód jelentéssel bíró elemeit (szimbólumokat) tartalmazó fastruktúra Abstract Syntax Tree (AST) a szintaxis nagyban leegyszerűsítve, csak a struktúra marad pl. kulcsszavak, zárójelek, pontosvesszők elhagyása Parser kimenete Szemantikai elemző bemenete (C) Simon Balázs, BME IIT, 2011. 40

Attribútumos AST Attribútum: név-érték pár pl. típusok, nevek, konstans értékek, definíció, hivatkozás, stb. Attribútumos AST az AST csúcsainak felruházása attribútumokkal az attribútumok értékeinek számítása az AST struktúrájából, a szimbólumokból és a többi attribútum értékéből Szemantikai elemző kimenete Leképzési fázis bemenete (C) Simon Balázs, BME IIT, 2011. 41

Kódgráf A program előállítása a célnyelvhez közeli adatstrukturák és műveletek segítségével A konkrét gépi parancsok még nem kerülnek kiválasztásra Nincs regiszter- és memóriakorlát Transzformáció kimenete Optimalizáció bemenete és kimenete Kódgenerálás bemenete (C) Simon Balázs, BME IIT, 2011. 42

Célnyelv A célnyelv kiválasztott parancsai szimbolikusan kódolva Assembler: előállítja a bináris kódot külső címek csak szimbolikusak Linker: összeszerkeszti a kódot feloldja a külső hivatkozásokat Eredmény: bináris kód szimbolikus címek nélkül (C) Simon Balázs, BME IIT, 2011. 43

Szimbólumtábla Azonosítók (identifier) és konstans értékek (literal) leképzése a fordító belső reprezentációjára Egy táblabejegyzés: szimbólum (token) és érték (value) valamint sor- és oszlopindex a forráskódban (hibajelzéshez) Lexer építi fel Felépítés után végig változatlan marad a fordítás során (C) Simon Balázs, BME IIT, 2011. 44

Definíciós tábla A fordító adatbázisa Tárolja az azonosítók definícióját A szimbólumokhoz jelentést társít Megadja, hogy azonos szimbólumok mikor jelölik ugyanazt a változót, típust, függvényt, stb. Tárolja a feldolgozott szimbólumok szemantikai kontextusát A szemantikai elemző építi fel (C) Simon Balázs, BME IIT, 2011. 45

Fordító moduláris struktúrája Elemzés Leképzés Kódgészítés Lexikai Szintaktikai Szemantikai Transzformáció Optimalizálás Kódgenerálás Linkelés Forrás nyelv Szimbólumsorozat Attribútumos AST Kódgráf Célnyelv AST Szimbólumtábla Definíciós tábla (C) Simon Balázs, BME IIT, 2011. 46