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.
Egy tipikus többnyelvű, többcélú fordítóprogram működésének sematikus vázlata

A fordítóprogram (angolul compiler) olyan számítógépes program, amely valamely programozási nyelven írt programot képes másik nyelv szabályaira lefordítani, például gépi kódra, köztes kódra, vagy egy másik programozási nyelv kódjára.

Csoportosítás[szerkesztés | forrásszöveg szerkesztése]

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
  • magas szintű nyelvből egy másik magas szintű nyelvre

Kivitelezés[szerkesztés | forrásszöveg szerkesztése]

A fordítóprogramok két fázisban dolgozzák fel a kódot:

  • az elsőben lefordítja a forráskódot egy közbeeső kódra (előrész)
  • a második fázisban történik az úgynevezett fordítási eljárás. (hátrész)

Első fázis[szerkesztés | forrásszöveg szerkesztése]

Ezt a fázist három nagy fázisra lehet bontani: lexikális elemzésre, szintaktikai elemzésre és szemantikai elemzésre

Lexikális elemzés[szerkesztés | forrásszöveg szerkesztése]

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

Szintaktikai elemzés[szerkesztés | forrásszöveg szerkesztése]

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.

Szemantikai elemzés[szerkesztés | forrásszöveg szerkesztése]

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 általánosan és hatékonyan automatizálni.

Hátrész[szerkesztés | forrásszöveg szerkesztése]

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:

  1. optimizálás: opcionális, a közbeeső kód átalakítása kisebb és gyorsabb formába (a program kívülről látható működése ettől (többnyire) nem változik). Általában ezt már az assembly nyelvű kódon végzi a fordítóprogram.
  2. kódgenerálás: a gépi kód generálása. A mnemonikok egyszerű átfordítása gépi kóddá valamint a modulon belül feloldható hivatkozások feloldása, ugrási címkék kiszámítása.

Fordítóprogram vagy interpreter?[szerkesztés | forrásszöveg szerkesztése]

A magas szintű 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.

Történet[szerkesztés | forrásszöveg szerkesztése]

Az 1990-es évek során nagy számban jelentek meg szabad fordítóprogramok a GNU projekt és a nyílt forráskód mozgalomban. Sok közülük nagyon jó minőségű.

Lásd még[szerkesztés | forrásszöveg szerkesztése]

Források[szerkesztés | forrásszöveg szerkesztése]

Külső hivatkozások[szerkesztés | forrásszöveg szerkesztése]