Faze sastavljača s primjerom

Sadržaj:

Anonim

Koje su faze dizajna sastavljača?

Prevoditelj djeluje u različitim fazama, a svaka faza pretvara izvorni program iz jednog u drugi prikaz. Svaka faza uzima ulaze iz svoje prethodne faze i svoje izlaze hrani u sljedeću fazu prevoditelja.

U kompajleru postoji 6 faza. Svaka od ovih faza pomaže u pretvaranju visokog stupnja jezika strojnog koda. Faze kompajlera su:

  1. Leksička analiza
  2. Analiza sintakse
  3. Semantička analiza
  4. Srednji generator koda
  5. Alat za optimizaciju koda
  6. Generator koda
Faze sastavljača

Sve ove faze pretvaraju izvorni kod dijeljenjem u tokene, stvaranjem stabala za raščlanjivanje i optimiziranjem izvornog koda po različitim fazama.

U ovom vodiču naučit ćete:

  • Koje su faze dizajna sastavljača?
  • Faza 1: Leksička analiza
  • Faza 2: Analiza sintakse
  • Faza 3: Semantička analiza
  • Faza 4: Međufazna generacija koda
  • Faza 5: Optimizacija koda
  • Faza 6: Generiranje koda
  • Upravljanje tablicama simbola
  • Pogreška pri rukovanju rutinom:

Faza 1: Leksička analiza

Leksička analiza prva je faza kada kompajler skenira izvorni kod. Taj se postupak može slijeva nadesno, znak po znak, i grupirati te znakove u žetone.

Ovdje se tok znakova iz izvornog programa grupira u značajne sekvence identificiranjem tokena. Omogućuje unos odgovarajućih ulaznica u tablicu simbola i prosljeđuje taj token u sljedeću fazu.

Primarne funkcije ove faze su:

  • Prepoznajte leksičke jedinice u izvornom kodu
  • Leksičke jedinice razvrstajte u razrede poput konstanti, rezerviranih riječi i unesite ih u različite tablice. Zanemarit će komentare u izvornom programu
  • Utvrdite token koji nije dio jezika

Primjer :

x = y + 10

Žetoni

x identifikator
= Operator dodjele
Y identifikator
+ Operator sabiranja
10 Broj

Faza 2: Analiza sintakse

Analiza sintakse sastoji se od otkrivanja strukture u kodu. Određuje slijedi li tekst očekivani format. Glavni cilj ove faze je osigurati da je izvorni kod napisao programer, je li točan ili nije.

Analiza sintakse temelji se na pravilima koja se temelje na određenom programskom jeziku konstrukcijom stabla raščlanjivanja uz pomoć tokena. Također određuje strukturu izvornog jezika i gramatiku ili sintaksu jezika.

Evo popisa zadataka izvršenih u ovoj fazi:

  • Nabavite žetone iz leksičkog analizatora
  • Provjerava je li izraz sintaktički ispravan ili nije
  • Prijavi sve sintaksne pogreške
  • Izgradite hijerarhijsku strukturu koja je poznata kao stablo raščlanjivanja

Primjer

Bilo koji identifikator / broj je izraz

Ako je x identifikator, a y + 10 izraz, tada je x = y + 10 iskaz.

Razmotrite stablo raščlanjivanja za sljedeći primjer

(a+b)*c

U Parse Tree

  • Unutarnji čvor: zapis s arhivom operatora i dvije datoteke za djecu
  • List: zapisi s 2 / više polja; jedan za žeton i ostale informacije o žetonu
  • Osigurajte da se komponente programa smisleno uklapaju
  • Prikuplja informacije o tipu i provjerava kompatibilnost tipa
  • Izvorni jezik dopušta provjeru operanda

Faza 3: Semantička analiza

Semantička analiza provjerava semantičku dosljednost koda. Koristi stablo sintakse prethodne faze zajedno s tablicom simbola da provjeri je li zadani izvorni kôd semantički dosljedan. Također provjerava daje li kod odgovarajuće značenje.

Semantički analizator provjerit će nepodudaranja tipova, nekompatibilne operande, funkciju pozvanu s nepravilnim argumentima, neprijavljenu varijablu itd.

Funkcije faze semantičkih analiza su:

  • Pomaže vam da pohranite prikupljene informacije o tipu i spremite ih u tablicu simbola ili stablo sintakse
  • Omogućuje vam provjeru tipa
  • U slučaju neusklađenosti tipa, gdje ne postoje točna pravila za korekciju tipa koja zadovoljavaju željenu operaciju, prikazuje se semantička pogreška
  • Prikuplja informacije o tipu i provjerava kompatibilnost tipa
  • Provjerava dopušta li izvorni jezik operande ili ne

Primjer

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

U gore navedenom kodu, semantički analizator će otkucati cijeli broj 30 kako bi plutao 30,0 prije množenja

Faza 4: Međufazna generacija koda

Jednom kada faza semantičke analize završi preko kompajlera, generira srednji kôd za ciljni stroj. Predstavlja program za neki apstraktni stroj.

Srednji kôd je između jezika visoke razine i jezika stroja. Ovaj međukôd treba generirati na takav način da ga je lako prevesti u ciljani strojni kôd.

Funkcije na generiranju srednjeg koda:

  • Trebao bi biti generiran iz semantičkog prikaza izvornog programa
  • Sadrži vrijednosti izračunate tijekom procesa prevođenja
  • Pomaže vam u prevođenju srednjeg koda na ciljni jezik
  • Omogućuje vam održavanje redoslijeda prioriteta izvornog jezika
  • Sadrži točan broj operanda instrukcije

Primjer

Na primjer,

total = count + rate * 5

Intermedijarni kod uz pomoć metode adresnog koda je:

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

Faza 5: Optimizacija koda

Sljedeća faza je optimizacija koda ili srednji kôd. Ova faza uklanja nepotrebnu liniju koda i uređuje slijed izjava kako bi se ubrzalo izvršavanje programa bez gubljenja resursa. Glavni cilj ove faze je poboljšati srednji kôd kako bi se generirao kôd koji radi brže i zauzima manje prostora.

Primarne funkcije ove faze su:

  • Pomaže vam da uspostavite kompromis između izvršavanja i brzine sastavljanja
  • Poboljšava vrijeme izvođenja ciljanog programa
  • Generira pojednostavljeni kôd i dalje u srednjem predstavljanju
  • Uklanjanje nedostižnog koda i rješavanje neiskorištenih varijabli
  • Uklanjanje izjava koje nisu izmijenjene iz petlje

Primjer:

Razmotrite sljedeći kod

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

Može postati

b =c * 10.0f = e+b

Faza 6: Generiranje koda

Generiranje koda posljednja je i zadnja faza kompajlera. Dobija ulaze iz faza optimizacije koda i kao rezultat stvara kôd stranice ili objektni kôd. Cilj ove faze je dodijeliti pohranu i generirati strojni kod koji se može premjestiti.

Također dodjeljuje memorijska mjesta za varijablu. Upute u srednjem kodu pretvaraju se u strojne upute. Ova faza pokriva optimizacijski ili srednji kôd na ciljnom jeziku.

Ciljni jezik je strojni kôd. Stoga su sva memorijska mjesta i registri također odabrani i dodijeljeni tijekom ove faze. Kôd generiran u ovoj fazi izvršava se da bi uzeo ulaze i generirao očekivane izlaze.

Primjer:

a = b + 60,0

Bilo bi moguće prevesti u registre.

MOVF a, R1MULF #60.0, R2ADDF R1, R2

Upravljanje tablicama simbola

Tablica simbola sadrži zapis za svaki identifikator s poljima za atribute identifikatora. Ova komponenta olakšava prevoditelju pretragu zapisa identifikatora i njegovo brzo dohvaćanje. Tablica simbola također vam pomaže u upravljanju opsegom. Tablica simbola i obrađivač pogrešaka odgovarajuće komuniciraju sa svim fazama i tablicama simbola.

Pogreška pri rukovanju rutinom:

U procesu dizajniranja kompajlera može doći do pogreške u svim dolje navedenim fazama:

  • Leksički analizator: Pogrešno napisani znakovi
  • Sintaksni analizator: Nedostaju zagrade
  • Intermedijarni generator koda: Neusklađeni operandi za operatora
  • Code Optimizer: Kada izjava nije dostupna
  • Generator koda: nedostižni iskazi
  • Tablice simbola: Pogreška više deklariranih identifikatora

Najčešće pogreške su nevaljani redoslijed znakova u skeniranju, nevaljani nizovi tokena u tipu, pogreška opsega i raščlanjivanje u semantičkoj analizi.

Pogreška se može susresti u bilo kojoj od gore navedenih faza. Nakon pronalaska pogrešaka, faza se mora nositi s pogreškama da bi nastavila s postupkom sastavljanja. Te pogreške treba prijaviti obrađivaču pogrešaka koji obrađuje pogrešku kako bi izveo postupak kompilacije. Općenito se pogreške prijavljuju u obliku poruke.

Sažetak

  • Prevoditelj djeluje u različitim fazama, a svaka faza pretvara izvorni program iz jednog u drugi prikaz
  • Šest faza dizajna kompajlera su 1) Leksička analiza 2) Analiza sintakse 3) Semantička analiza 4) Intermedijarni generator koda 5) Optimizator koda 6) Generator koda
  • Leksička analiza prva je faza kada kompajler skenira izvorni kod
  • Analiza sintakse sastoji se od otkrivanja strukture u tekstu
  • Semantička analiza provjerava semantičku dosljednost koda
  • Jednom kada faza semantičke analize završi preko kompajlera, generirajte međukôd za ciljni stroj
  • Faza optimizacije koda uklanja nepotrebnu liniju koda i uređuje slijed izjava
  • Faza generiranja koda dobiva ulaze iz faze optimizacije koda i kao rezultat stvara kôd stranice ili objektni kôd
  • Tablica simbola sadrži zapis za svaki identifikator s poljima za atribute identifikatora
  • Pogreška pri rukovanju rutinom rukuje pogreškama i izvješćima tijekom mnogih faza