Fázy prekladača s príkladom

Obsah:

Anonim

Aké sú fázy návrhu kompilátora?

Kompilátor pracuje v rôznych fázach, pričom každá fáza transformuje zdrojový program z jednej reprezentácie na druhú. Každá fáza berie vstupy zo svojej predchádzajúcej fázy a napája svoj výstup do ďalšej fázy kompilátora.

V kompilátore je 6 fáz. Každá z týchto fáz pomáha pri konverzii strojového kódu na vysokej úrovni. Fázy prekladača sú:

  1. Lexikálna analýza
  2. Syntaxová analýza
  3. Sémantická analýza
  4. Generátor prechodného kódu
  5. Optimalizátor kódu
  6. Generátor kódu
Fázy prekladača

Všetky tieto fázy prevádzajú zdrojový kód rozdelením na tokeny, vytváraním syntaktických stromov a optimalizáciou zdrojového kódu podľa rôznych fáz.

V tomto návode sa dozviete:

  • Aké sú fázy návrhu kompilátora?
  • Fáza 1: Lexikálna analýza
  • Fáza 2: Analýza syntaxe
  • Fáza 3: Sémantická analýza
  • Fáza 4: Generovanie prechodného kódu
  • Fáza 5: Optimalizácia kódu
  • Fáza 6: Generovanie kódu
  • Správa tabuľky symbolov
  • Rutina spracovania chýb:

Fáza 1: Lexikálna analýza

Lexikálna analýza je prvou fázou, keď kompilátor skenuje zdrojový kód. Tento proces je možné zľava doprava, znak po znaku, a zoskupiť tieto znaky do tokenov.

Prúd znakov zo zdrojového programu je tu zoskupený do zmysluplných sekvencií identifikáciou tokenov. Vykoná zápis zodpovedajúcich tiketov do tabuľky symbolov a odovzdá tento token do ďalšej fázy.

Primárne funkcie tejto fázy sú:

  • Identifikujte lexikálne jednotky v zdrojovom kóde
  • Klasifikujte lexikálne jednotky do tried, ako sú konštanty, vyhradené slová, a zadajte ich do rôznych tabuliek. Bude ignorovať komentáre v zdrojovom programe
  • Identifikujte token, ktorý nie je súčasťou jazyka

Príklad :

x = y + 10

Žetóny

X identifikátor
= Operátor zadania
Y identifikátor
+ Operátor sčítania
10 Číslo

Fáza 2: Analýza syntaxe

Analýza syntaxe spočíva v objavovaní štruktúry v kóde. Určuje, či má text očakávaný formát alebo nie. Hlavným cieľom tejto fázy je zabezpečiť, aby zdrojový kód napísaný programátorom bol správny alebo nesprávny.

Analýza syntaxe je založená na pravidlách založených na konkrétnom programovacom jazyku tak, že sa pomocou tokenov vytvorí syntaktický strom. Určuje tiež štruktúru zdrojového jazyka a gramatiku alebo syntax jazyka.

Tu je zoznam úloh vykonaných v tejto fáze:

  • Získajte žetóny z lexikálneho analyzátora
  • Skontroluje, či je výraz syntakticky správny alebo nie
  • Nahlásiť všetky syntaktické chyby
  • Vytvorte hierarchickú štruktúru, ktorá je známa ako syntaktický strom

Príklad

Akýkoľvek identifikátor / číslo je výraz

Ak x je identifikátor a y + 10 je výraz, potom x = y + 10 je príkaz.

Zvážte syntaktický strom pre nasledujúci príklad

(a+b)*c

In Parse Tree

  • Uzol interiéru: záznam s operátorom a dva súbory pre deti
  • List: záznamy s 2 / viacerými poľami; jeden pre token a ďalšie informácie o tokene
  • Zaistite, aby komponenty programu do seba zapadali zmysluplne
  • Zhromažďuje informácie o typoch a kontroluje kompatibilitu typov
  • Kontroly operandov povoľuje zdrojový jazyk

Fáza 3: Sémantická analýza

Sémantická analýza kontroluje sémantickú konzistenciu kódu. Používa syntaxový strom predchádzajúcej fázy spolu s tabuľkou symbolov na overenie, či je daný zdrojový kód sémanticky konzistentný. Tiež kontroluje, či kód vyjadruje vhodný význam.

Sémantický analyzátor skontroluje nezhody typov, nekompatibilné operandy, funkciu vyvolanú nesprávnymi argumentmi, nedeklarovanú premennú atď.

Funkcie fázy sémantických analýz sú:

  • Pomáha vám ukladať zhromaždené informácie o typoch a ukladať ich do tabuľky symbolov alebo stromu syntaxe
  • Umožňuje vám vykonať kontrolu typu
  • V prípade nesúladu typov, kde neexistujú presné pravidlá úpravy typu, ktoré vyhovujú požadovanej operácii, sa zobrazí sémantická chyba
  • Zhromažďuje informácie o typoch a kontroluje kompatibilitu typov
  • Skontroluje, či zdrojový jazyk operandom umožňuje alebo nie

Príklad

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

Vo vyššie uvedenom kóde sémantický analyzátor pred vynásobením obsadí celé číslo 30 floatom 30.0

Fáza 4: Generovanie prechodného kódu

Keď je fáza sémantickej analýzy nad kompilátorom, vygeneruje sa pre cieľový stroj prechodný kód. Predstavuje program pre nejaký abstraktný stroj.

Medzikód je medzi jazykom na vysokej a strojovej úrovni. Tento prechodný kód je potrebné vygenerovať takým spôsobom, ktorý uľahčuje jeho preloženie do cieľového strojového kódu.

Funkcie generovania prechodného kódu:

  • Mal by byť generovaný zo sémantickej reprezentácie zdrojového programu
  • Zachováva hodnoty vypočítané počas procesu prekladu
  • Pomáha vám preložiť prechodný kód do cieľového jazyka
  • Umožňuje vám zachovať poradie priorít zdrojového jazyka
  • Drží správny počet operandov inštrukcie

Príklad

Napríklad,

total = count + rate * 5

Sprostredkový kód pomocou metódy kódu adresy je:

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

Fáza 5: Optimalizácia kódu

Ďalšou fázou je optimalizácia kódu alebo prechodný kód. Táto fáza odstráni nepotrebný riadok kódu a usporiada postupnosť príkazov na urýchlenie vykonania programu bez plytvania prostriedkami. Hlavným cieľom tejto fázy je vylepšiť prechodný kód na vygenerovanie kódu, ktorý beží rýchlejšie a zaberá menej miesta.

Primárne funkcie tejto fázy sú:

  • Pomáha vám vytvoriť kompromis medzi rýchlosťou vykonávania a kompilácie
  • Zlepšuje čas trvania cieľového programu
  • Generuje efektívny kód, ktorý je stále v strednom zastúpení
  • Odstránenie nedostupného kódu a zbavenie sa nepoužívaných premenných
  • Odstraňujú sa príkazy, ktoré sa zo slučky nezmenia

Príklad:

Zvážte nasledujúci kód

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

Môže sa stať

b =c * 10.0f = e+b

Fáza 6: Generovanie kódu

Generovanie kódu je posledná a posledná fáza kompilátora. Získava vstupy z fáz optimalizácie kódu a vo výsledku produkuje kód stránky alebo objektový kód. Cieľom tejto fázy je prideliť úložisko a vygenerovať premiestniteľný strojový kód.

Taktiež alokuje pamäťové miesta pre premennú. Pokyny v prechodnom kóde sa prevedú do pokynov pre stroj. Táto fáza pokrýva optimalizačný alebo prechodný kód do cieľového jazyka.

Cieľovým jazykom je strojový kód. Preto sú počas tejto fázy tiež vybrané a pridelené všetky pamäťové miesta a registre. Kód vygenerovaný touto fázou sa vykoná s cieľom prijať vstupy a vygenerovať očakávané výstupy.

Príklad:

a = b + 60,0

Možno by bol preložený do registrov.

MOVF a, R1MULF #60.0, R2ADDF R1, R2

Správa tabuľky symbolov

Tabuľka symbolov obsahuje záznam pre každý identifikátor s poľami pre atribúty identifikátora. Tento komponent uľahčuje kompilátoru prehľadať záznam identifikátora a rýchlo ho načítať. Tabuľka so symbolmi vám tiež pomôže pri správe rozsahu. Tabuľka symbolov a obslužná rutina chýb zodpovedajúcim spôsobom interagujú so všetkými fázami a aktualizáciou tabuľky symbolov.

Rutina spracovania chýb:

V procese návrhu kompilátora sa môže vyskytnúť chyba vo všetkých nižšie uvedených fázach:

  • Lexikálny analyzátor: nesprávne napísané tokeny
  • Analyzátor syntaxe: chýbajúca zátvorka
  • Generátor prechodného kódu: Nesprávne priradené operandy pre operátora
  • Optimalizátor kódu: Keď príkaz nie je dosiahnuteľný
  • Generátor kódu: nedosiahnuteľné vyhlásenia
  • Tabuľky symbolov: Chyba viacerých deklarovaných identifikátorov

Najbežnejšie chyby sú neplatná postupnosť znakov pri skenovaní, neplatné postupnosti tokenov, typ, chyba rozsahu a analýza pri sémantickej analýze.

K chybe môže dôjsť v ktorejkoľvek z vyššie uvedených fáz. Po nájdení chýb musí fáza pracovať s chybami, aby mohla pokračovať v procese kompilácie. Tieto chyby je potrebné nahlásiť obslužnému programu chýb, ktorý chybu spracováva, aby vykonal proces kompilácie. Chyby sa spravidla hlásia vo forme správy.

Zhrnutie

  • Kompilátor pracuje v rôznych fázach, pričom každá fáza transformuje zdrojový program z jednej reprezentácie na druhú
  • Šesť fáz návrhu kompilátora je 1) Lexikálna analýza 2) Analýza syntaxe 3) Sémantická analýza 4) Generátor prechodného kódu 5) Optimalizátor kódu 6) Generátor kódu
  • Lexikálna analýza je prvou fázou, keď kompilátor skenuje zdrojový kód
  • Syntaxová analýza spočíva v objavovaní štruktúry v texte
  • Sémantická analýza kontroluje sémantickú konzistenciu kódu
  • Keď je fáza sémantickej analýzy nad kompilátorom, vygenerujte pre cieľový stroj prechodný kód
  • Fáza optimalizácie kódu odstráni nepotrebný riadok kódu a usporiada postupnosť príkazov
  • Fáza generovania kódu získava vstupy z fázy optimalizácie kódu a vo výsledku produkuje kód stránky alebo objektový kód
  • Tabuľka symbolov obsahuje záznam pre každý identifikátor s poľami pre atribúty identifikátora
  • Rutina spracovania chýb spracováva chyby a správy počas mnohých fáz