Fordítóprogramok FORD01 Programozó matematikus III. évf. Miskolci Egyetem 1 Fordítóprogramok 1 Programozó matematikus szak 2003/2004-es tanév II. félév Készítette: dr. Nagy Ferenc I.
Fordítóprogramok FORD01 Programozó matematikus III. évf. Miskolci Egyetem 2 Programnyelvek Magasszintű nyelvek számítógép függetlenek hardware funkciókat nem biztosítják fordítóprogram szükséges, amely adott operációs rendszer alatt fut és adott operációs rendszer alá fordít Vannak: felhasználó orientált nyelvek (általános probléma könnyen megfogalmazható) probléma orientált nyelvek (speciális terület pl folyamatirányítás) Alacsonyszintű nyelvek Gépi kód (utasításai bináris numerikus értékek (kódok), operandusok, memóriacímek szintén binárisak) Assembly (A gépi kód szimbolikus megfelelője) A Makro-assembly közelít a magasszintű struktúrákhoz
Fordítóprogramok FORD01 Programozó matematikus III. évf. Miskolci Egyetem 3 A fordítóprogram működési sémaja Adatok Forrásnyelvű program Compiler Tárgynyelvű program Tárgyprogram végrehajtása Eredmények Fordítási időFutási idő A fordítási és a futási idő jól elkülönül Matematikailag: Q=T(P) ahol P - forrásnyelvű program Q - tárgynyelvű program T - fordítás (Transzláció, transzformáció) Ha többmenetes a fordító, akkor: P n-1 =T n (P n ), P n-2 =T n-1 (P n-1 ), …, P 1 =T 2 (P 2 ), Q=T n (P 1 ) ahol P i - közbülső programforma
Fordítóprogramok FORD01 Programozó matematikus III. évf. Miskolci Egyetem 4 Az interpreter működési sémaja Adatok Forrásnyelvű program Interpreter Eredmények Fordítási és futási idő A fordítási és a futási idő nem válik szét A hardware által vezérelt („bedrótozott”) interpreter neve formulavezérelt számítógép
Fordítóprogramok FORD01 Programozó matematikus III. évf. Miskolci Egyetem 5 A fordítóprogram szerkezete A forrásprogram általában egy file-ban van. Compiler(forrásnyelvű program)(tárgyprogram, lista) A fordítás lépései: 1.Source-handler(forrásnyelvű program, hibák)(karaktersorozat, lista) Input-handler(forrásnyelvű program)(karaktrersorozat) Output-handler(forrásnyelvű program, hibák)(lista) 2.Compiler(karaktersorozat)(tárgykód, hibák) 3.Kód-handler(tárgykód)(tárgyprogram) Forrás program Source-handler Compiler Kód-handler ListaTárgyprogram
Fordítóprogramok FORD01 Programozó matematikus III. évf. Miskolci Egyetem 6 Az analízis feladata A compiler analizálja a kapott karaktersorozatot és szintetizálva építi fel a tárgykódot. 1.Lexikális elemzés: az input karaktersorozatban a szimbolikus egységek meghatározása (konstansok, változók, kulcsszavak, operátorok felismerése, szóközök, kommentárok kiszűrése). A szimbólumok általában kódoltak (típuskód, cím a szimbólumtáblába) Lexikális elemző(karaktersorozat)(szimbólumsorozat, lexikális hibák) 2.Szintaktikus elemző(szimbólumsorozat)(szintaktikusan elemzett program, szintaktikus hibák) A programstruktúra felismerése Szintaxisfa kialakítása Lengyel formák 3.Szemantikus elemző(szintaktikusan elemzett program)(analizált program, szemantikai hibák) Szemantikai tulajdonságok vizsgálata (pl A+B esetén deklarált-e A és B, azonosak-e a típusok, van-e értékük)
Fordítóprogramok FORD01 Programozó matematikus III. évf. Miskolci Egyetem 7 A szintézis 1.Kódgenerátor(Analizált program)(tárgykód) Szintaxisfából, lengyel formából kód generálása Gépfüggő, operációs rendszerfüggő assembly vagy gépi kód kimenet 2.Kódoptimalizáló(tárgykód)(tárgykód) Azonos programrészek kiemelése alprogramba Hurkok ciklusváltozótól független részeinek hurkon kívüli elhelyezése Optimális regiszterhasználat
Fordítóprogramok FORD01 Programozó matematikus III. évf. Miskolci Egyetem 8 A PL/0 nyelv A PL/0 nyelv lehetőségei, eszközei: Értékadó utasítás Struktúrálási elvek - Sorozatképzés - Feltételes végrehajtás - Ciklusképzés Szubrutin Adattípusok: integer konstans és változó Aritmetkiai és relációs műveletek
Fordítóprogramok FORD01 Programozó matematikus III. évf. Miskolci Egyetem 9 PL/0 szintaxis - 1 Program Blokk. Utasítás CONST=, ; VAR, ; PROCEDURE ; ; Blokk AzonosítóSzám Azonosító
Fordítóprogramok FORD01 Programozó matematikus III. évf. Miskolci Egyetem 10 PL/0 szintaxis - 2 Utasítás CALL WHILE BEGINEND Utasítás ; IF Feltétel THEN Utasítás Feltétel DO Utasítás := AzonosítóKifejezés Azonosító
Fordítóprogramok FORD01 Programozó matematikus III. évf. Miskolci Egyetem 11 PL/0 szintaxis - 3 Feltétel = Kifejezés ODD Kifejezés <><><=>= Kifejezés - Tag + - +
Fordítóprogramok FORD01 Programozó matematikus III. évf. Miskolci Egyetem 12 PL/0 szintaxis - 4 Tag Tényező ) ( / * Azonosító Szám Kifejezés