A fordító fázisai a példával

Tartalomjegyzék:

Anonim

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

A fordító különféle fázisokban működik, mindegyik fázis átalakítja a forrásprogramot egyik ábrázolásból a másikba. Minden fázis az előző fázisból veszi a bemeneteket, és a kimenetét a fordító következő fázisába továbbítja.

A fordítóban 6 fázis van. Ezen fázisok mindegyike segít a gépi kód magas szintű nyelvének konvertálásában. A fordító fázisai a következők:

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

Mindezek a fázisok konvertálják a forráskódot tokenekre osztással, elemző fák létrehozásával és a fázisok optimalizálásával különböző fázisokkal.

Ebben az oktatóanyagban megtudhatja:

  • Melyek a fordító tervezésének fázisai?
  • 1. fázis: Lexikai elemzés
  • 2. fázis: Szintaxiselemzés
  • 3. fázis: Szemantikus elemzés
  • 4. fázis: Közbenső kódgenerálás
  • 5. fázis: Kódoptimalizálás
  • 6. szakasz: Kódgenerálás
  • Szimbólumtábla kezelése
  • Hiba a rutin kezelésében:

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 balról jobbra, karakterenként, és csoportosíthatja ezeket a karaktereket tokenekbe.

Itt a forrásprogramból érkező karakterfolyam értelmes sorrendbe van csoportosítva a tokenek azonosításával. Beírja a megfelelő jegyeket a szimbólumtáblába, és továbbítja a jelet a következő fázisba.

Ennek a fázisnak az elsődleges funkciói a következők:

  • Azonosítsa a lexikai egységeket egy forráskódban
  • Osztályozza a lexikai egységeket olyan osztályokba, mint konstansok, fenntartott szavak, és írja be őket különböző táblázatokba. A program figyelmen kívül hagyja a forrásprogramban található megjegyzéseket
  • 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: Szintaxiselemzés

A szintaktikai elemzés lényege a struktúra felfedezése a kódban. Meghatározza, hogy egy szöveg követi-e a várt formátumot. Ennek a fázisnak a fő célja annak biztosítása, hogy a forrás kódot a programozó írta, vagy sem.

A szintaktikai elemzés az adott programozási nyelvre épülő szabályokon alapul, és az elemző fát tokenek segítségével állítja össze. Meghatározza a forrásnyelv és a nyelvtan vagy a szintaxis szerkezetét is.

Itt található az ebben a szakaszban elvégzett feladatok listája:

  • Jelszavakat szerezzen be a lexikális elemzőből
  • Ellenőrzi, hogy a kifejezés szintaktikailag helyes-e vagy sem
  • Jelentse az összes szintaktikai hibát
  • Készítsen hierarchikus struktúrát, amelyet elemző fának neveznek

Példa

Bármely azonosító / szám kifejezés

Ha x azonosító és y + 10 kifejezés, akkor x = y + 10 utasítás.

Vegye figyelembe az elemzési fát a következő példában

(a+b)*c

Az elemzési fában

  • Belső csomópont: nyilvántartás operátorral és két fájl gyerekeknek
  • Levél: 2 / több mezővel rendelkező rekordok; egyet a tokenhez és a tokennel kapcsolatos 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ípusok kompatibilitását
  • Az operandusokat a forrásnyelv engedélyezi

3. fázis: Szemantikus 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át 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 Semantic Analyzer ellenőrizni fogja a típus eltéréseit, az inkompatibilis operandusokat, a nem megfelelő argumentumokkal meghívott függvényeket, egy nem bejelentett változót stb.

A szemantikai elemzések szakaszának funkciói a következők:

  • Segít az összegyűjtött típusú információk tárolásában és mentésében a szimbólumtáblába vagy a szintaxisfába
  • Lehetővé teszi a típusellenőrzés elvégzését
  • Típus-eltérés esetén, ahol nincsenek pontos típusú korrekciós 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ípusok kompatibilitását
  • Ellenőrzi, hogy a forrásnyelv megengedi-e az operandusokat

Példa

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

A fenti kódban a szemantikai elemző a 30 egész számot írja be, hogy a szorzás előtt 30,0 legyen

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

Miután a szemantikai elemzési szakasz befejeződött a fordítón, generál köztes kódot a célgép számára. Valamilyen absztrakt gép programját képviseli.

A köztes kód a magas szintű és a gépi nyelv között van. Ezt a köztes kódot úgy kell előállítani, hogy megkönnyítse annak lefordítását a célgép kódjává.

Funkciók a köztes kód létrehozásában:

  • A forrásprogram szemantikus ábrázolásából kell előállítani
  • A fordítás során kiszámított értékeket tárolja
  • Segít lefordítani a köztes kódot célnyelven
  • 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 * t1t3 := count + t2total := t3

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

A következő szakasz a kódoptimalizálás vagy a köztes kód. Ez a szakasz eltávolítja a felesleges kódsorokat, és az utasítások sorrendjét úgy rendezi, hogy az 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öztes kód fejlesztése, hogy gyorsabban futó és kevesebb helyet elfoglaló kódot hozzon létre.

Ennek a fázisnak az elsődleges funkciói a következők:

  • Segít kompromisszumot kötni a végrehajtás és az összeállítási sebesség között
  • Javítja a célprogram futási idejét
  • Korszerűsített kódot generál, még mindig köztes ábrázolásban
  • Elérhetetlen kód eltávolítása és a fel nem használt változók megszabadí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 * ad = e + bf = d

Válhat

b =c * 10.0f = e+b

6. szakasz: Kódgenerálás

A kódgenerálás a fordító utolsó és utolsó fázisa. Bevitelt kap a kódoptimalizálási fázisokból, és ennek eredményeként előállítja az oldalkódot vagy az objektumkódot. Ennek a szakasznak a célja a tárhely kiosztása és az áthelyezhető gépi kód előállítása.

Emellett memóriahelyeket is kioszt a változóhoz. A köztes kód utasításait gépi utasításokká alakítják át. Ez a szakasz lefedi az optimalizáló vagy a köztes kódot a célnyelvre.

A célnyelv a gépi kód. Ezért ebben a fázisban az összes memóriahelyet és regisztert is kiválasztják és kiosztják. Az ebben a fázisban generált kód végrehajtása a bemenetek felvételére és a várható kimenetek generálására szolgál.

Példa:

a = b + 60,0

Lehetséges, hogy regiszterekre fordítják.

MOVF a, R1MULF #60.0, R2ADDF R1, R2

Szimbólumtábla kezelése

A szimbólumtábla tartalmazza az egyes azonosítók rekordját, és mezőket tartalmaz az azonosító attribútumai számára. Ez a komponens megkönnyíti a fordító számára az azonosító rekord keresését és gyors visszakeresését. A szimbólumtábla segít a hatókör kezelésében is. A szimbólumtábla és a hibakezelő az összes fázissal és a szimbólumtáblázat-frissítéssel ennek megfelelően lépnek kapcsolatba.

Hiba a rutin kezelésében:

A fordító tervezésében hiba léphet fel az alább megadott fázisokban:

  • Lexikai elemző: Rosszul írt jelzők
  • Szintaxis analizátor: hiányzó zárójel
  • Közbenső kódgenerátor: Nem egyező operandusok egy operátor számára
  • Kódoptimalizáló: Ha az utasítás nem érhető el
  • Kódgenerátor: Elérhetetlen utasítások
  • Szimbólumtáblák: Több deklarált azonosító hibája

A leggyakoribb hibák az érvénytelen karaktersorozatok a szkennelésben, az érvénytelen token szekvenciák típusa, a hatókör hibája és az elemzés a szemantikai elemzés során.

A hiba a fenti fázisok bármelyikében felléphet. A hibák megtalálása után a fázisnak kezelnie kell a hibákat, hogy folytassa a fordítási folyamatot. Ezeket a hibákat be kell jelenteni a hibakezelőnek, amely kezeli a hibát a fordítási folyamat végrehajtásához. A hibákat általában üzenet formájában jelentik.

Összegzés

  • A fordító különféle fázisokban működik, mindegyik fázis átalakítja a forrásprogramot egyik ábrázolásból a másikba
  • A fordító tervezésének hat fázisa: 1) Lexikai elemzés 2) Szintaxis elemzés 3) Szemantikus elemzés 4) Közbenső kódgenerátor 5) Kódoptimalizáló 6) Kódgenerátor
  • A Lexical Analysis az első fázis, amikor a fordító beolvassa a forráskódot
  • A szintaktikai elemzés a struktúra 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 szakasz befejeződött a fordítón, generáljon köztes kódot a célgéphez
  • A kódoptimalizálási szakasz eltávolítja a felesleges kódsorokat és rendezi az utasítások sorrendjét
  • A kódgenerálási fázis a kódoptimalizálási fázistól kap bemeneteket, és ennek eredményeként előállítja az oldalkódot vagy az objektumkódot
  • A szimbólumtábla tartalmazza az egyes azonosítók rekordját, és mezőket tartalmaz az azonosító attribútumai számára
  • A rutinhiba-kezelés sok szakaszban kezeli a hibákat és jelentéseket