A fordító egy fordító, amely a forrásnyelvet (magas szintű nyelv) objektumnyelvvé (gépi nyelvvé) alakítja át. A fordítóval ellentétben az értelmező olyan program, amely a forrásnyelven írt programok végrehajtását utánozza. Egy másik különbség a fordító és az értelmező között az, hogy a fordító az egész programot egy menetben alakítja át, az értelmező viszont a programot egyszerre csak egy-egy sort véve alakítja át.
Az ember és egy olyan elektronikus eszköz, mint a számítógép érzékelése nyilvánvalóan különbözik. Az emberek a természetes nyelveken keresztül bármit megérthetnek, de egy számítógép nem. A számítógépnek fordítóra van szüksége ahhoz, hogy az ember által olvasható formában írt nyelveket számítógép által olvasható formába alakítsa át.
A fordító és az értelmező a nyelvi fordító típusai. Mi az a nyelvi fordító? Ez a kérdés felmerülhet az Ön fejében.
A nyelvi fordító olyan szoftver, amely az ember által olvasható formában lévő forrásnyelvi programokat lefordítja egy objektumnyelvi egyenértékű programra. A forrásnyelv általában egy magas szintű programozási nyelv, az objektumnyelv pedig jellemzően egy tényleges számítógép gépi nyelve.
Tartalom: Compiler Vs Interpreter
- Összehasonlító táblázat
- Definíció
- Főbb különbségek
- Következtetés
Összehasonlító táblázat
.
Az összehasonlítás alapja | Compiler | Interpreter |
---|---|---|
Bemenet | Egyszerre egy teljes programot vesz. | Egyszerre egyetlen kódsort vagy utasítást vesz fel. |
Kimenet | Elkészíti a köztes objektumkódot. | Nem készít köztes objektumkódot. |
Munkamechanizmus | A fordítás a végrehajtás előtt történik. | A fordítás és a végrehajtás egyszerre történik. |
Gyorsaság | Viszonylag gyorsabb | Kisebb |
Memória | A memóriaigény nagyobb az objektumkód létrehozása miatt. | Kisebb a memóriaigénye, mivel nem hoz létre köztes objektumkódot. |
Hibák | Megjeleníti az összes hibát a fordítás után, egyszerre. | Egyenként jeleníti meg az egyes sorok hibáit. |
Hibák felismerése | Nehéz | Egyszerűbb viszonylag |
A vonatkozó programozási nyelvek | C, C++, C#, Scala, typescript fordítót használ. | PHP, Perl, Python, Ruby értelmezőt használ. |
A fordító definíciója
A fordító olyan program, amely a magas szintű nyelven írt programot beolvassa és gépi vagy alacsony szintű nyelvre alakítja át, valamint jelzi a programban lévő hibákat. A teljes forráskódot egy menetben vagy több menetben alakítja át, de végül a felhasználó megkapja a lefordított kódot, amely készen áll a futtatásra.
A fordítóprogram fázisok szerint működik; a különböző fázisok két részre csoportosíthatók, amelyek a következők:
- A fordítóprogram elemzési szakaszát front endnek is nevezik, amelyben a programot alapvető alkotóelemekre bontják, és ellenőrzik a kód nyelvtani, szemantikai és szintaktikai jellemzőit, majd létrehozzák a köztes kódot. Az elemzési fázis magában foglalja a lexikai elemzőt, a szemantikai elemzőt és a szintaxiselemzőt.
- A fordító szintézisfázisa a back endnek is nevezett fázis, amelyben a köztes kódot optimalizálják, és létrehozzák a célkódot. A szintézis fázis magában foglalja a kódoptimalizálót és a kódgenerátort.
A fordító fázisai
Most értsük meg részletesen az egyes fázisok működését.
- Lexikai elemző: A kódot mint karakterfolyamot vizsgálja, a karaktersorozatot lexémákba csoportosítja, és a programozási nyelvre való hivatkozással tokenek sorozatát adja ki.
- Szintaxiselemző: Ebben a fázisban az előző szakaszban generált tokeneket a programozási nyelv nyelvtana alapján ellenőrzi, hogy a kifejezések szintaktikailag helyesek-e vagy sem. Ehhez parse fákat készít.
- Semantic Analyzer: Ellenőrzi, hogy az előző fázisban generált kifejezések és utasítások követik-e a programozási nyelv szabályait vagy sem, és megjegyzésekkel ellátott parse fákat készít.
- Közbenső kódgenerátor: A forráskód egyenértékű köztes kódot generál. A köztes kódnak számos reprezentációja létezik, de a TAC (Three Address Code) a legszélesebb körben használt.
- Kódoptimalizáló: Javítja a program idő- és helyigényét. Ehhez kiküszöböli a programban jelenlévő felesleges kódot.
- Kódgenerátor: Ez a fordító utolsó fázisa, amelyben a célkódot generálja egy adott géphez. Olyan műveleteket végez, mint a memóriakezelés, a regiszter hozzárendelés és a gépspecifikus optimalizálás.
A szimbólumtábla valamennyire egy adatszerkezet, amely az azonosítókat kezeli az általa tárolt megfelelő típusú adatokkal együtt. A hibakezelő a fordító különböző fázisai között felmerülő hibákat észleli, jelenti, kijavítja.
A fordító definíciója
A fordító egy programozási nyelv megvalósításának alternatívája, és ugyanazt a munkát végzi, mint a fordító. Az értelmező a fordítóprogramhoz hasonlóan végzi a lexelést, az elemzést és a típusellenőrzést. Az értelmező azonban közvetlenül a szintaxisfát dolgozza fel a kifejezések eléréséhez és az utasítás végrehajtásához, ahelyett, hogy kódot generálna a szintaxisfából.
Az értelmezőnek ugyanazt a szintaxisfát többször is fel kell dolgoznia, ez az oka annak, hogy az értelmezés viszonylag lassabb, mint a lefordított program végrehajtása.
A fordítás és az értelmezés valószínűleg kombinálva valósít meg egy programozási nyelvet. Amelyben egy fordítóprogram középszintű kódot generál, majd a kódot inkább értelmezik, mint gépi kódra fordítják.
Egy értelmező alkalmazása előnyös a programfejlesztés során, ahol a legfontosabb az, hogy a program módosítását gyorsan tesztelni lehessen, nem pedig a program hatékony futtatása.
Főbb különbségek a fordító és az értelmező között
Lássuk a fordító és az értelmező közötti főbb különbségeket.
- A fordító a programot egészben veszi és fordítja le, az értelmező viszont utasításonként fordítja le a programot.
- A fordító esetében köztes kódot vagy célkódot generál. Ezzel szemben az értelmező nem hoz létre köztes kódot.
- A fordító viszonylag gyorsabb, mint az értelmező, mivel a fordító a teljes programot egyszerre veszi át, míg az értelmezők minden egyes kódsort egymás után fordítanak le.
- A fordító több memóriát igényel, mint az értelmező a tárgykód generálása miatt.
- A fordító az összes hibát egyidejűleg jeleníti meg, és nehéz felismerni a hibákat, ezzel szemben az értelmező az egyes utasítások hibáit egyenként jeleníti meg, és könnyebb felismerni a hibákat.
- A fordító, ha hiba lép fel a programban, leállítja a fordítást, és a hiba eltávolítása után az egész programot újra lefordítja. Ezzel szemben, amikor hiba történik az értelmezőben, megakadályozza annak fordítását, és a hiba elhárítása után a fordítás folytatódik.
- A fordítóban a folyamat két lépést igényel, amelyben először a forráskódot lefordítják a célprogramba, majd végrehajtják. Míg az Interpreterben Ez egy egylépéses folyamat, amelyben a forráskódot egyszerre fordítják le és hajtják végre.
- A fordítót olyan programozási nyelvekben használják, mint a C, C++, C#, Scala stb. Másrészt az Interpreter-t olyan nyelvekben alkalmazzák, mint a PHP, Ruby, Python, stb.
Következtetés
A kompilátor és az interpreter egyaránt ugyanazt a munkát hivatott elvégezni, de működési eljárásukban különböznek, A Compiler a forráskódot összevontan veszi, míg az Interpreter a forráskód alkotórészeit, ill,
Bár mind a fordítónak, mind az értelmezőnek vannak bizonyos előnyei és hátrányai, például az értelmezett nyelvek platformokon átívelőnek tekinthetők, azaz a kód hordozható. A fordítóval ellentétben nem kell előzetesen lefordítani az utasítást, ami időtakarékos. A fordított nyelvek gyorsabbak a fordítási folyamatot tekintve.