Faze prevajalnika s primerom

Kazalo:

Anonim

Katere so faze oblikovanja prevajalnika?

Prevajalnik deluje v različnih fazah, pri čemer faza pretvori izvorni program iz ene predstavitve v drugo. Vsaka faza prevzame vhodne podatke iz prejšnje faze in poda svoje izhode v naslednjo fazo prevajalnika.

V prevajalniku je 6 faz. Vsaka od teh faz pomaga pri pretvorbi strojne kode na visoki ravni. Faze prevajalnika so:

  1. Leksikalna analiza
  2. Analiza skladnje
  3. Semantična analiza
  4. Vmesni generator kode
  5. Optimizator kode
  6. Generator kod
Faze prevajalnika

Vse te faze pretvorijo izvorno kodo z delitvijo na žetone, ustvarjanjem razčlenjenih dreves in optimizacijo izvorne kode po različnih fazah.

V tej vadnici boste izvedeli:

  • Katere so faze oblikovanja prevajalnika?
  • Faza 1: Leksikalna analiza
  • 2. faza: Analiza sintakse
  • 3. faza: Semantična analiza
  • Faza 4: Vmesna generacija kode
  • 5. faza: Optimizacija kode
  • 6. faza: generiranje kode
  • Upravljanje tabele s simboli
  • Redna obravnava napak:

Faza 1: Leksikalna analiza

Leksikalna analiza je prva faza, ko prevajalnik pregleda izvorno kodo. Ta postopek je lahko od leve proti desni, znak za znakom, in te znake združite v žetone.

Tu je tok znakov iz izvornega programa razvrščen v pomembna zaporedja z identifikacijo žetonov. Omogoči vnos ustreznih vstopnic v tabelo simbolov in ta žeton prenese v naslednjo fazo.

Primarne funkcije te faze so:

  • Določite leksikalne enote v izvorni kodi
  • Leksikalne enote razvrstite v razrede, kot so konstante, rezervirane besede in jih vnesite v različne tabele. Pripombe v izvornem programu bodo prezrte
  • Določite žeton, ki ni del jezika

Primer :

x = y + 10

Žetoni

X identifikator
= Operator dodelitve
Y. identifikator
+ Operater seštevanja
10. Številka

2. faza: Analiza sintakse

Analiza sintakse je namenjena odkrivanju strukture v kodi. Določa, ali besedilo ustreza pričakovani obliki. Glavni cilj te faze je zagotoviti, da je izvorno kodo napisal programer, ali je pravilna ali ne.

Sintaksna analiza temelji na pravilih, ki temeljijo na določenem programskem jeziku, tako da se s pomočjo žetonov izdela drevo za razčlenitev. Določa tudi strukturo izvornega jezika in slovnico ali sintakso jezika.

Tu je seznam nalog, opravljenih v tej fazi:

  • Pridobite žetone iz leksikalnega analizatorja
  • Preveri, ali je izraz skladen pravilno ali ne
  • Prijavi vse sintaksne napake
  • Izdelajte hierarhično strukturo, ki je znana kot razčlenjevalno drevo

Primer

Vsak identifikator / številka je izraz

Če je x identifikator in y + 10 je izraz, potem je x = y + 10 stavek.

Razmislite o razčlenitvi drevesa za naslednji primer

(a+b)*c

V Parse Tree

  • Notranje vozlišče: zapis z vloženim operatorjem in dvema datotekama za otroke
  • List: zapisi z 2 / več polji; ena za žeton in druge informacije o žetonu
  • Poskrbite, da se komponente programa smiselno prilegajo
  • Zbira informacije o tipih in preverja združljivost tipa
  • Preverjanje operandov je dovoljeno v izvornem jeziku

3. faza: Semantična analiza

Semantična analiza preverja pomensko skladnost kode. Uporablja sintaksno drevo prejšnje faze skupaj s tabelo simbolov, da preveri, ali je podana izvorna koda pomensko skladna. Preveri tudi, ali koda daje ustrezen pomen.

Semantic Analyzer bo preveril neusklajenosti tipov, nezdružljive operande, funkcijo, poklicano z neustreznimi argumenti, neprijavljeno spremenljivko itd.

Funkcije faze semantičnih analiz so:

  • Pomaga vam shraniti zbrane informacije o tipu in jih shraniti v tabelo simbolov ali sintaksno drevo
  • Omogoča preverjanje vrste
  • V primeru neusklajenosti tipa, kjer ni natančnih pravil za popravek tipa, ki izpolnjujejo želeno operacijo, se prikaže pomenska napaka
  • Zbira informacije o tipu in preverja združljivost tipa
  • Preveri, ali izvorni jezik dovoljuje operande ali ne

Primer

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

V zgornji kodi bo semantični analizator vtipkal celo število 30, da pred množenjem plava 30,0

Faza 4: Vmesna generacija kode

Ko faza semantične analize konča prevajalnik, ustvari vmesno kodo za ciljni stroj. Predstavlja program za neke abstraktne stroje.

Vmesna koda je med jezikom na visoki in strojni ravni. To vmesno kodo je treba ustvariti tako, da jo je enostavno prevesti v ciljno strojno kodo.

Funkcije generiranja vmesne kode:

  • Ustvariti ga je treba iz semantične predstavitve izvornega programa
  • Vsebuje vrednosti, izračunane med prevajanjem
  • Pomaga vam pri prevajanju vmesne kode v ciljni jezik
  • Omogoča ohranjanje prednostnega vrstnega reda izvornega jezika
  • Vsebuje pravilno število operandov navodil

Primer

Na primer

total = count + rate * 5

Vmesna koda s pomočjo metode naslovne kode je:

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

5. faza: Optimizacija kode

Naslednja faza je optimizacija kode ali vmesna koda. Ta faza odstrani nepotrebno kodno vrstico in uredi zaporedje stavkov, da pospeši izvajanje programa brez zapravljanja virov. Glavni cilj te faze je izboljšati vmesno kodo, da se ustvari koda, ki deluje hitreje in zavzame manj prostora.

Primarne funkcije te faze so:

  • Pomaga vam vzpostaviti kompromis med hitrostjo izvajanja in prevajanjem
  • Izboljša čas izvajanja ciljnega programa
  • Ustvari poenostavljeno kodo, ki je še vedno v vmesni predstavitvi
  • Odstranjevanje nedosegljive kode in odstranjevanje neuporabljenih spremenljivk
  • Odstranjevanje stavkov, ki niso spremenjeni iz zanke

Primer:

Upoštevajte naslednjo kodo

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

Lahko postane

b =c * 10.0f = e+b

6. faza: generiranje kode

Ustvarjanje kode je zadnja in zadnja faza prevajalnika. Prejema vhodne podatke iz faz optimizacije kode in kot rezultat izdela kodo strani ali kodo predmeta. Cilj te faze je dodeliti pomnilnik in ustvariti premestljivo strojno kodo.

Za spremenljivko dodeli tudi pomnilniške lokacije. Navodila v vmesni kodi se pretvorijo v strojna navodila. Ta faza zajema optimizacijsko ali vmesno kodo v ciljni jezik.

Ciljni jezik je strojna koda. Zato so v tej fazi izbrana in dodeljena tudi vsa pomnilniška mesta in registri. Koda, ki jo ustvari ta faza, se izvede, da sprejme vhodne podatke in ustvari pričakovane izhode.

Primer:

a = b + 60,0

Bi bilo mogoče prevedeno v registre.

MOVF a, R1MULF #60.0, R2ADDF R1, R2

Upravljanje tabele s simboli

Tabela simbolov vsebuje zapis za vsak identifikator s polji za atribute identifikatorja. Ta komponenta prevajalniku olajša iskanje po zapisu identifikatorja in njegovo hitro pridobivanje. Tabela simbolov vam pomaga tudi pri upravljanju obsega. Tabela simbolov in obdelovalec napak ustrezno vplivata na vse faze in tabelo simbolov.

Redna obravnava napak:

V procesu načrtovanja prevajalnika se lahko pojavijo napake v vseh spodnjih fazah:

  • Leksikalni analizator: Napačno črkovani žetoni
  • Sintaksni analizator: Manjkajoči oklepaji
  • Vmesni generator kod: neusklajeni operandi za operaterja
  • Code Optimizer: Ko stavek ni dosegljiv
  • Generator kode: nedosegljivi stavki
  • Tabele simbolov: Napaka več deklariranih identifikatorjev

Najpogostejše napake so neveljavno zaporedje znakov pri skeniranju, neveljavna zaporedja žetonov v vrsti, napaka obsega in razčlenjevanje pri semantični analizi.

Napaka se lahko pojavi v kateri koli od zgornjih faz. Po iskanju napak se mora faza ukvarjati z napakami, da nadaljuje s postopkom prevajanja. Te napake je treba sporočiti upravljavcu napak, ki obravnava napako, da izvede postopek prevajanja. Na splošno se napake poročajo v obliki sporočila.

Povzetek

  • Prevajalnik deluje v različnih fazah, pri čemer faza pretvori izvorni program iz ene predstavitve v drugo
  • Šest faz oblikovanja prevajalnika je 1) Leksikalna analiza 2) Analiza sintakse 3) Semantična analiza 4) Vmesni generator kode 5) Optimizator kode 6) Generator kode
  • Leksikalna analiza je prva faza, ko prevajalnik pregleda izvorno kodo
  • Analiza sintakse je namenjena odkrivanju strukture v besedilu
  • Semantična analiza preverja pomensko skladnost kode
  • Ko je faza semantične analize končana s prevajalnikom, ustvarite vmesno kodo za ciljni stroj
  • Faza optimizacije kode odstrani nepotrebno vrstico kode in uredi zaporedje stavkov
  • Faza generiranja kode dobi vhodne podatke iz faze optimizacije kode in kot rezultat izdela kodo strani ali kodo predmeta
  • Tabela simbolov vsebuje zapis za vsak identifikator s polji za atribute identifikatorja
  • Napaka pri ravnanju z rutino obravnava napake in poročila v mnogih fazah