Mi az a kódfordító és mit csinál?

A fordítóprogram egy program ami lefordítja az emberi olvashatóságot forráskód a számítógéppel végrehajtható gépi kódba. Ennek sikeres elvégzéséhez az emberi olvashatóságnak megfelelő kódnak meg kell felelnie a szintaxis annak a programozási nyelvnek a szabályai, amelybe be van írva. A fordító csak egy program, és nem tudja megjavítani a kódját az Ön számára. Ha hibát követett el, ki kell javítania a szintaxist, különben nem fordul elő.

Mi történik, ha összeállítja a kódot?

A fordító összetettsége a nyelv szintaxisától és az absztrakció mennyiségétől függ az a programozási nyelv rendelkezik. A C fordító sokkal egyszerűbb, mint a C ++ vagy a C # fordító.

Lexikális elemzés

A fordítás során a fordító először beolvassa a karakterfolyamot a forráskódfájlból, és lexikai tokenekből áll. Például a C ++ kód:

int C = (A * B) +10;

lehet elemezni, mivel ezek a tokenek:

  • gépelés
  • "C" változó
  • egyenlők
  • leftbracket
  • "A" változó
  • alkalommal
  • "B" változó
  • rightbracket
  • plusz
  • szó szerint "10"

Szintaktikai elemzés

A lexikai kimenet a fordító szintaktikai elemző részére kerül, amely a nyelvtani szabályok alapján dönt arról, hogy a bemenet érvényes-e vagy sem. Hacsak

instagram viewer
változók Az A és B korábban bejelentették és hatályukat megtették, a fordító azt mondhatja:

  • „A”: be nem jelentett azonosító.

Ha bejelentették, de nem inicializálták. a fordító figyelmeztet:

  • az „A” helyi változó inicializálása nélkül használható.

Soha ne hagyja figyelmen kívül a fordító figyelmeztetéseit. Fura és váratlan módon megtörheti a kódot. Mindig javítson a fordító figyelmeztetésein.

Egy vagy kettő?

Néhány programozási nyelv úgy van megírva, hogy a fordító csak egyszer tudja elolvasni a forráskódot, és elkészíti a gépi kódot. Pascal az egyik ilyen nyelv. Sok fordítóprogramok legalább két lépés szükséges. Időnként ez a következő: funkciók vagy osztályok.

A C ++ kategóriában az osztály deklarálható, de csak később határozható meg. A fordító nem tudja kiszámítani, mennyi memóriára van szüksége az osztálynak, amíg össze nem állítja az osztály testét. A megfelelő gépi kód előállítása előtt újra kell olvasnia a forráskódot.

Gépi kód generálása

Feltételezve, hogy a fordító sikeresen befejezi a lexikai és szintaktikai elemzéseket, az utolsó szakasz gépi kód generálása. Ez egy bonyolult folyamat, különösen a modern CPU-k esetén.

Az összeállított sebesség végrehajtható A kódnak a lehető leggyorsabbnak kell lennie, és óriási mértékben változhat a létrehozott kód minőségétől és az igényelt optimalizálás mértékétől függően.

A legtöbb fordító lehetővé teszi az optimalizálás összegének meghatározását - általában a gyors hibakeresési fordítók és a kiadott kód teljes optimalizálása szempontjából ismert.

Kódgenerálás kihívást jelent

A fordító írónak kihívásokkal kell szembenéznie, amikor kódgenerátort ír. Sok processzor felgyorsítja a feldolgozást a használatával

  • Utasítás csővezeték
  • Belső cache.

Ha az összes utasítás egy kódon belül van hurok lehet tartani a processzor gyorsítótár, akkor ez a hurok sokkal gyorsabban fut, mint amikor a CPU-nak utasításokat kell lehívnia a fő RAM-ból. A CPU gyorsítótár a CPU chipbe beépített memóriablokk, amelyhez sokkal gyorsabban lehet hozzáférni, mint a fő RAM memória adataihoz.

Gyorsítótárak és sorok

A legtöbb CPU-nak előzetes letöltési sora van, ahol a CPU az utasításokat beolvassa a gyorsítótárba, mielőtt végrehajtja őket. Feltételes ág esetén a CPU-nak újratöltenie kell a sort. A kód minimalizálása érdekében el kell generálni a kódot.

Számos CPU-nak külön része van a következőkre:

  • Egész számtani (egész számok)
  • Lebegőpontos számtani (törtszámok)

Ezek a műveletek gyakran párhuzamosan futhatnak a sebesség növelése érdekében.

A fordítók általában gépi kódot generálnak objektum fájlokba, amelyek akkor vannak összekapcsolt együtt egy linker programmal.

instagram story viewer