A fordító fázisai példával: Fordítási folyamat és lépések

Melyek a fordítótervezés fázisai?

fordítóprogram különböző fázisokban működik, mindegyik fázis átalakítja a forrásprogramot egyik reprezentációból a másikba. Minden fázis bemeneteket vesz az előző szakaszából, és a kimenetét a fordító következő fázisába táplálja.
A fordítóprogramban 6 fázis van. Ezen fázisok mindegyike segít a magas szintű nyelv gépi kódjának konvertálásában. A fordítóprogram fázisai a következők:

  1. Lexikai elemzés
  2. Szintaxis elemzés
  3. Szemantikai elemzés
  4. Köztes kódgenerátor
  5. Kódoptimalizáló
  6. Kódgenerátor
A fordító fázisai
A fordító fázisai

Mindezek a fázisok átalakítják a forráskódot tokenekre való felosztással, elemzési fák létrehozásával és a forráskód különböző fázisokkal történő optimalizálásával.

1. fázis: Lexikai elemzés

A Lexical Analysis az első fázis, amikor a fordító beolvassa a forráskódot. Ez a folyamat karakterenként balról jobbra mozgatható, és ezeket a karaktereket tokenekbe csoportosíthatja.
Itt a forrásprogramból származó karakterfolyam értelmes sorozatokba van csoportosítva a tokenek azonosításával. Beírja a megfelelő jegyeket a szimbólumtáblázatba, és átadja a tokent a következő fázisnak.
Ennek a fázisnak az elsődleges funkciói:

  • Azonosítsa a lexikai egységeket a forráskódban
  • Osztályozza a lexikai egységeket osztályokba, például konstansokba, fenntartott szavakba, és írja be őket különböző táblázatokba. Figyelmen kívül hagyja a forrásprogram megjegyzéseit
  • Azonosítsa a tokent, amely nem része a nyelvnek

Példa:
x = y + 10

tokenek

X azonosító
= Hozzárendelés operátor
Y azonosító
+ Összeadás operátor
10 Szám

2. fázis: Szintaxis elemzés

A szintaktikai elemzés a kód szerkezetének feltárásáról szól. Meghatározza, hogy egy szöveg az elvárt formátumot követi-e vagy sem. Ennek a fázisnak a fő célja annak ellenőrzése, hogy a programozó által írt forráskód helyes-e vagy sem.
A szintaktikai elemzés az adott programozási nyelven alapuló szabályokon alapul, az értelmező fa tokenek segítségével történő felépítésével. Meghatározza a forrásnyelv szerkezetét és a nyelv nyelvtanát vagy szintaxisát is.
Itt található az ebben a fázisban elvégzett feladatok listája:

  • Szerezzen be tokeneket a lexikális elemzőből
  • Ellenőrzi, hogy a kifejezés szintaktikailag helyes-e vagy sem
  • Jelentse az összes szintaktikai hibát
  • Hozzon létre egy hierarchikus struktúrát, amelyet elemzőfának nevezünk

Példa

Bármely azonosító/szám kifejezés
Ha x egy azonosító és y+10 egy kifejezés, akkor x= y+10 egy utasítás.
Tekintsük az elemzési fát a következő példához

(a+b)*c

Példa szintaktikai elemzésre

Az Elemzőfában

  • Belső csomópont: rögzítés egy operátorral és két fájl gyerekeknek
  • Leaf: rekordok 2/több mezővel; egy a tokenhez és a tokenhez kapcsolódó egyéb információkhoz
  • Győződjön meg arról, hogy a program összetevői értelmesen illeszkednek egymáshoz
  • Típusinformációkat gyűjt és ellenőrzi a típuskompatibilitást
  • Az ellenőrző operandusokat a forrásnyelv engedélyezi

3. fázis: Szemantikai elemzés

A szemantikai elemzés ellenőrzi a kód szemantikai konzisztenciáját. Az előző fázis szintaxisfáját és a szimbólumtáblázatot használja annak ellenőrzésére, hogy az adott forráskód szemantikailag konzisztens-e. Azt is ellenőrzi, hogy a kód megfelelő jelentést közvetít-e.
A Szemantikus Analizátor ellenőrzi a típus-eltéréseket, az inkompatibilis operandusokat, a nem megfelelő argumentumokkal meghívott függvényeket, a nem deklarált változókat stb.
A szemantikus elemzési fázis funkciói a következők:

  • Segít tárolni az összegyűjtött típusinformációkat és elmenteni azokat szimbólumtáblázatba vagy szintaktikai fába
  • Lehetővé teszi a típusellenőrzés végrehajtását
  • Típushiba esetén, ahol nincsenek pontos típusjavítási szabályok, amelyek kielégítik a kívánt műveletet, szemantikai hiba jelenik meg
  • Típusinformációkat gyűjt, és ellenőrzi a típuskompatibilitást
  • Ellenőrzi, hogy a forrásnyelv engedélyezi-e az operandusokat vagy sem

Példa

float x = 20.2;
float y = x*30;

A fenti kódban a szemantikai elemző a 30-as egész számot 30.0-ra írja le a szorzás előtt

4. fázis: Köztes kódgenerálás

Amint a szemantikai elemzési fázis véget ért, a fordító köztes kódot generál a célgép számára. Ez egy program valamilyen absztrakt géphez.
A köztes kód a magas szintű és a gépi szintű nyelv között található. Ezt a köztes kódot úgy kell előállítani, hogy könnyen lefordítható legyen a célgépi kódra.
A közbenső kódgenerálás funkciói:

  • A forrásprogram szemantikai reprezentációjából kell előállítani
  • A fordítási folyamat során kiszámított értékeket tárolja
  • Segít lefordítani a köztes kódot célnyelvre
  • Lehetővé teszi a forrásnyelv elsőbbségi sorrendjének fenntartását
  • Az utasítás megfelelő számú operandusát tartalmazza

Példa

Például,

total = count + rate * 5

A köztes kód a címkód módszer segítségével:

 
t1 := int_to_float(5) 
t2 := rate * t1 
t3 := count + t2
total := t3

5. fázis: Kódoptimalizálás

A következő fázis a kódoptimalizálás vagy a köztes kód. Ez a fázis eltávolítja a felesleges kódsorokat, és úgy rendezi el az utasítások sorrendjét, hogy erőforrások pazarlása nélkül felgyorsítsa a program végrehajtását. Ennek a fázisnak a fő célja a közbenső kód fejlesztése, hogy gyorsabban futhasson és kevesebb helyet foglaljon el.
Ennek a fázisnak az elsődleges funkciói:

  • Segít megtalálni a kompromisszumot a végrehajtás és a fordítási sebesség között
  • Javítja a célprogram futási idejét
  • Áramvonalas kódot generál még közbenső ábrázolásban
  • Az elérhetetlen kód eltávolítása és a nem használt változók eltávolítása
  • A nem módosított utasítások eltávolítása a ciklusból

Példa:
Vegye figyelembe a következő kódot

a = intofloat(10)
b = c * a
d = e + b
f = d

Válhat

b =c * 10.0
f = e+b

6. fázis: Kódgenerálás

A kódgenerálás a fordító utolsó és utolsó fázisa. Bemeneteket kap a kódoptimalizálási fázisokból, és ennek eredményeként állítja elő az oldalkódot vagy az objektumkódot. Ennek a fázisnak a célja a tárhely lefoglalása és az áthelyezhető gépi kód generálása.
Ezenkívül memóriahelyeket foglal le a változó számára. A köztes kód utasításai gépi utasításokká alakulnak. Ez a fázis az optimalizáló vagy köztes kódot a célnyelvre takarja.
A célnyelv a gépi kód. Ezért ebben a fázisban az összes memóriahely és regiszter is kiválasztásra és kiosztásra kerül. Az ebben a fázisban generált kód a bemenetek fogadására és a várt kimenetek generálására kerül végrehajtásra.

Példa

a = b + 60.0
Esetleg regiszterekre fordítják.

MOVF a, R1
MULF #60.0, R2
ADDF R1, R2

Szimbólum táblázat kezelése

A szimbólumtábla minden azonosítóhoz tartalmaz egy rekordot az azonosító attribútumainak mezőivel. Ez az összetevő megkönnyíti a fordító számára az azonosító rekordban való keresést és annak gyors visszakeresését. A szimbólumtábla a hatókör kezelésében is segítséget nyújt. A szimbólumtábla és a hibakezelő kölcsönhatásba lép az összes fázissal, és ennek megfelelően frissíti a szimbólumtáblázatot.

Hibakezelési rutin

A fordító tervezési folyamatában hiba fordulhat elő az alábbiakban megadott valamennyi fázisban:

  • Lexikai elemző: Rosszul írt tokenek
  • Szintaxiselemző: Hiányzik a zárójel
  • Köztes kódgenerátor: Nem illeszkedő operandusok egy operátorhoz
  • Kódoptimalizáló: Ha az utasítás nem érhető el
  • Kód Generator: Ha a memória megtelt vagy a megfelelő regiszterek nincsenek lefoglalva
  • Szimbólumtáblák: Több deklarált azonosító hibája

A leggyakoribb hibák az érvénytelen karaktersorozatok a vizsgálat során, az érvénytelen token sorozatok típusában, a hatókör hiba és az elemzés a szemantikai elemzésben.
A hiba a fenti fázisok bármelyikében előfordulhat. A hibák megtalálása után a fázisnak foglalkoznia kell a hibákkal a fordítási folyamat folytatásához. Ezeket a hibákat jelenteni kell a hibakezelőnek, amely a hibát kezeli a fordítási folyamat végrehajtásához. Általában a hibákat üzenet formájában jelentik.

Összegzésként

  • A fordító több fázisban működik, minden fázis átalakítja a forrásprogramot egyik reprezentációból a másikba
  • Hat fázisa fordító tervezés 1) Lexikai elemzés 2) Szintaktikai elemzés 3) Szemantikai elemzés 4) Köztes kódgenerátor 5) Kódoptimalizáló 6) Kód Generator
  • A Lexical Analysis az első fázis, amikor a fordító beolvassa a forráskódot
  • A szintaktikai elemzés a szöveg szerkezetének felfedezéséről szól
  • A szemantikai elemzés ellenőrzi a kód szemantikai konzisztenciáját
  • Miután a szemantikai elemzési fázis véget ért a fordítón, generáljon köztes kódot a célgép számára
  • A kódoptimalizálási fázis eltávolítja a felesleges kódsorokat, és rendezi az utasítások sorrendjét
  • A kódgenerálási fázis bemeneteket kap a kódoptimalizálási fázisból, és ennek eredményeként előállítja az oldalkódot vagy az objektumkódot
  • A szimbólumtábla minden azonosítóhoz tartalmaz egy rekordot az azonosító attribútumainak mezőivel
  • A hibakezelési rutin számos fázisban kezeli a hibákat és a jelentéseket