Fordítóprogram
A Wikipédiából, a szabad enciklopédiából.
- Ez a szócikk azokkal a fordítóprogramokkal foglalkozik, melyek egyik programozási nyelvről a másikra alakítanak át kódot. A nyelvi fordítással kapcsolatban lásd a Gépi fordítás szócikket.
A fordítóprogram (angolul compiler) olyan számítógépes program, amely valamely programozási nyelven írt programot képes egy másik programozási nyelvre lefordítani.
Tartalomjegyzék |
[szerkesztés] Csoportosítás
A fordítandó programot forrásprogramnak (nyelvét forrásnyelvnek), a lefordított programot tárgyprogramnak (nyelvét tárgynyelvnek) nevezzük.
E szerint a fordítóprogramokat a következőképp csoportosíthatjuk:
- natív-kódra fordítók
- több platformra fordítók
- magasszintű nyelvből egy másik magasszintű nyelvre
[szerkesztés] Kivitelezés
Régebben a fordítóprogramok több fázisban működtek. Mikor egy fázis véget ért, a fordítóprogram felszabadíthatta a használatban levő memóriát. A mai modern fordítóprogramok csak két fázist használnak:
- az elsőben lefordítja a forráskódot egy közbeeső kódra (előrész)
- a masodik fázisban torténik az úgynevezett fordítási eljárás. (hátrész)
[szerkesztés] Első fázis
Ezt a fázist három nagy fázisra lehet bontani: lexikális elemzésre, szintaktikai elemzésre és szemantikai elemzésre
[szerkesztés] Lexikális elemzés
A forráskód tokenizálása, felbontása a szintaktikai elemzőnek értelmezhető szimbólumokká, azaz a nyers forrásszövegből kreál szimbólumsorozatot, általában operátorok, fenntartott szavak, azonosítók stb. formájában. A lexikai hibák általában elírásokból adódnak, ezeket legjobb tudásuk szerint elfedik az elemzők, sokszor kitalálva, mit is akarhatott írni a programozó.
[szerkesztés] Szintaktikai elemzés
A nagyrészt környezetfüggetlen nyelvtan alapján felépíti a szintaxisfát, az esetleges hibákat tudása szerint átugorva.
Főbb fajtái az LL és az LR elemzők.
[szerkesztés] Szemantikai elemzés
A dinamikus szemantika ellenőrzése történik ebben a szakaszban, típusellenőrzések, függvények paraméterszáma, típushelyessége, általában a programkód értelmessége. Míg a lexikális és a szintaktikus ellenőrzésre már igen jó automatizált eszközeink vannak, a szemantikus elemzést mindeddig nem sikerült automaziálni általánosan.
[szerkesztés] Hátrész
Itt történik a közbeeső kód lefordítása gépi kódra. Ez is több lépésből tevődik össze:
- optimizálás: a közbeeső kód átalakítása kisebb és gyorsabb formába (a program működése ettől nem változik)
- kódgenerálás: a gépi kód generálása.
[szerkesztés] Fordítóprogram vagy interpreter?
A magasszintű programozási nyelven megírt programot futtatáshoz fordítóprogrammal lefordítjuk gépi kódra, vagy interpreterrel interpretárjuk, vagyis értelmezzük. Az első esetben ún. object code keletkezik, amiből szerkesztéssel lehet futtatható programot készíteni. A második esetben általában nem keletkezik futtatható program, legfeljebb egy tömör, mindenféle felesleges résztől mentes közbülső kód (néha ún. bytecode), amit az interpreter második fázisa végrehajt. (Forrás: Wikipedia angol nyelvű rész!)
[szerkesztés] Történet
Az 1990-es évek során nagyszámban jelentek meg szabad fordítóprogramok a GNU projekt és az nyílt forráskód mozgalomban. Sok közülük nagyon jó minőségű és jó példaként szolgálhatnak bárkinek, aki ebben a témában érdeklődik.
[szerkesztés] Lásd még
- assembler
- elemzés
- fentről lefele
- lentről felfele
- újrafordítás
- JIT fordítók