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:
- Lexikai elemzés
- Szintaxis elemzés
- Szemantikus elemzés
- Közbenső kódgenerátor
- Kódoptimalizáló
- Kódgenerátor
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