Faser av kompilator med eksempel: kompileringsprosess og trinn

Hva er fasene av kompilatordesign?

kompilatoren opererer i ulike faser hver fase transformerer kildeprogrammet fra en representasjon til en annen. Hver fase tar innganger fra forrige trinn og mater utdata til neste fase av kompilatoren.
Det er 6 faser i en kompilator. Hver av disse fasene hjelper til med å konvertere høynivåspråket til maskinkoden. Fasene til en kompilator er:

  1. Leksikalsk analyse
  2. Syntaksanalyse
  3. Semantisk analyse
  4. Mellomkodegenerator
  5. Kodeoptimerer
  6. Kode generator
Faser av kompilator
Faser av kompilator

Alle disse fasene konverterer kildekoden ved å dele inn i tokens, lage parse-trær og optimalisere kildekoden etter forskjellige faser.

Fase 1: Leksikalsk analyse

Leksikalsk analyse er den første fasen når kompilatoren skanner kildekoden. Denne prosessen kan venstre til høyre, tegn for tegn, og gruppere disse tegnene i tokens.
Her er tegnstrømmen fra kildeprogrammet gruppert i meningsfulle sekvenser ved å identifisere tokens. Den legger inn de korresponderende billettene i symboltabellen og sender den token til neste fase.
Hovedfunksjonene til denne fasen er:

  • Identifiser de leksikale enhetene i en kildekode
  • Klassifiser leksikalske enheter i klasser som konstanter, reserverte ord, og skriv dem inn i forskjellige tabeller. Det vil ignorere kommentarer i kildeprogrammet
  • Identifiser token som ikke er en del av språket

Eksempel:
x = y + 10

tokens

X identifikator
= Oppdragsoperatør
Y identifikator
+ Tilleggsoperatør
10 Nr

Fase 2: Syntaksanalyse

Syntaksanalyse handler om å oppdage struktur i kode. Den avgjør om en tekst følger det forventede formatet eller ikke. Hovedmålet med denne fasen er å sørge for at kildekoden som er skrevet av programmereren er riktig eller ikke.
Syntaksanalyse er basert på reglene basert på det spesifikke programmeringsspråket ved å konstruere parsetreet ved hjelp av tokens. Det bestemmer også strukturen til kildespråket og språkets grammatikk eller syntaks.
Her er en liste over oppgaver utført i denne fasen:

  • Skaff tokens fra den leksikalske analysatoren
  • Sjekker om uttrykket er syntaktisk korrekt eller ikke
  • Rapporter alle syntaksfeil
  • Konstruer en hierarkisk struktur som er kjent som et analysetre

Eksempel

Enhver identifikator/tall er et uttrykk
Hvis x er en identifikator og y+10 er et uttrykk, så er x= y+10 en setning.
Tenk på analysetre for følgende eksempel

(a+b)*c

Eksempel på syntaksanalyse

I Parse Tree

  • Innvendig node: ta opp med en operatør arkivert og to filer for barn
  • Blad: poster med 2/flere felt; en for token og annen informasjon om token
  • Sørg for at komponentene i programmet passer meningsfullt sammen
  • Samler typeinformasjon og sjekker typekompatibilitet
  • Kontrolloperander er tillatt av kildespråket

Fase 3: Semantisk analyse

Semantisk analyse sjekker den semantiske konsistensen til koden. Den bruker syntakstreet fra forrige fase sammen med symboltabellen for å bekrefte at den gitte kildekoden er semantisk konsistent. Den sjekker også om koden formidler en passende mening.
Semantic Analyzer vil se etter type-uoverensstemmelser, inkompatible operander, en funksjon kalt med uriktige argumenter, en ikke-deklarert variabel, etc.
Funksjoner av semantisk analysefase er:

  • Hjelper deg med å lagre innsamlet typeinformasjon og lagre den i symboltabell eller syntakstre
  • Lar deg utføre typekontroll
  • I tilfelle av typemismatch, hvor det ikke er noen eksakte typekorreksjonsregler som tilfredsstiller ønsket operasjon, vises en semantisk feil
  • Samler typeinformasjon og sjekker typekompatibilitet
  • Sjekker om kildespråket tillater operandene eller ikke

Eksempel

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

I koden ovenfor vil den semantiske analysatoren typecaste heltall 30 til å flyte 30.0 før multiplikasjon

Fase 4: Mellomkodegenerering

Når den semantiske analysefasen er over, genererer kompilatoren mellomkode for målmaskinen. Det representerer et program for en eller annen abstrakt maskin.
Mellomkode er mellom høynivå- og maskinnivåspråket. Denne mellomkoden må genereres på en slik måte at det er enkelt å oversette den til målmaskinkoden.
Funksjoner ved generering av mellomkode:

  • Den skal genereres fra den semantiske representasjonen av kildeprogrammet
  • Holder verdiene som er beregnet under oversettelsesprosessen
  • Hjelper deg med å oversette mellomkoden til målspråket
  • Lar deg opprettholde forrangsrekkefølge for kildespråket
  • Den inneholder riktig antall operander av instruksjonen

Eksempel

For eksempel,

total = count + rate * 5

Mellomkode ved hjelp av adressekodemetoden er:

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

Fase 5: Kodeoptimalisering

Den neste fasen av er kodeoptimalisering eller mellomkode. Denne fasen fjerner unødvendig kodelinje og ordner sekvensen av setninger for å fremskynde kjøringen av programmet uten å sløse med ressurser. Hovedmålet med denne fasen er å forbedre mellomkoden for å generere en kode som kjører raskere og tar mindre plass.
Hovedfunksjonene til denne fasen er:

  • Det hjelper deg å etablere en avveining mellom utførelse og kompileringshastighet
  • Forbedrer kjøretiden til målprogrammet
  • Genererer strømlinjeformet kode fortsatt i mellomrepresentasjon
  • Fjerne uoppnåelig kode og kvitte seg med ubrukte variabler
  • Fjerner utsagn som ikke er endret fra loopen

Eksempel:
Tenk på følgende kode

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

kan bli

b =c * 10.0
f = e+b

Fase 6: Kodegenerering

Kodegenerering er den siste og siste fasen av en kompilator. Den får input fra kodeoptimaliseringsfasene og produserer sidekoden eller objektkoden som et resultat. Målet med denne fasen er å allokere lagring og generere flyttbar maskinkode.
Den tildeler også minneplasseringer for variabelen. Instruksjonene i mellomkoden konverteres til maskininstruksjoner. Denne fasen skjuler optimaliserings- eller mellomkoden til målspråket.
Målspråket er maskinkoden. Derfor blir også alle minneplasseringer og registre valgt og tildelt i denne fasen. Koden som genereres av denne fasen, utføres for å ta innganger og generere forventede utganger.

Eksempel

a = b + 60.0
Vil muligens bli oversatt til registre.

MOVF a, R1
MULF #60.0, R2
ADDF R1, R2

Symboltabellbehandling

En symboltabell inneholder en post for hver identifikator med felt for attributtene til identifikatoren. Denne komponenten gjør det lettere for kompilatoren å søke i identifikatorposten og hente den raskt. Symboltabellen hjelper deg også for omfangsstyringen. Symboltabellen og feilbehandleren samhandler med alle fasene og symboltabelloppdateringen tilsvarende.

Feilhåndteringsrutine

I kompilatorens designprosess kan det oppstå feil i alle de nedenfor gitte fasene:

  • Leksikalsk analysator: Feilstavede tokens
  • Syntaksanalysator: Manglende parentes
  • Mellomkodegenerator: Mismatchede operander for en operatør
  • Code Optimizer: Når setningen ikke er tilgjengelig
  • Kode Generator: Når minnet er fullt eller riktige registre ikke tildeles
  • Symboltabeller: Feil ved flere deklarerte identifikatorer

De vanligste feilene er ugyldig tegnsekvens i skanning, ugyldige tokensekvenser i type, omfangsfeil og parsing i semantisk analyse.
Feilen kan oppstå i hvilken som helst av fasene ovenfor. Etter å ha funnet feil, må fasen håndtere feilene for å fortsette med kompileringsprosessen. Disse feilene må rapporteres til feilbehandleren som håndterer feilen for å utføre kompileringsprosessen. Vanligvis rapporteres feilene i form av meldinger.

Sammendrag

  • Kompileren opererer i forskjellige faser, hver fase transformerer kildeprogrammet fra en representasjon til en annen
  • Seks faser av kompilatordesign er 1) Leksikal analyse 2) Syntaksanalyse 3) Semantisk analyse 4) Mellomkodegenerator 5) Kodeoptimalisering 6) Kode Generator
  • Leksikalsk analyse er den første fasen når kompilatoren skanner kildekoden
  • Syntaksanalyse handler om å oppdage struktur i tekst
  • Semantisk analyse sjekker den semantiske konsistensen til koden
  • Når den semantiske analysefasen er over kompilatoren, generer mellomkode for målmaskinen
  • Kodeoptimaliseringsfasen fjerner unødvendig kodelinje og ordner sekvensen av utsagn
  • Kodegenereringsfasen får inndata fra kodeoptimeringsfasen og produserer sidekoden eller objektkoden som et resultat
  • En symboltabell inneholder en post for hver identifikator med felt for attributtene til identifikatoren
  • Feilhåndteringsrutine håndterer feil og rapporter i mange faser

Oppsummer dette innlegget med: