Hva er fasene i Compiler Design?
Compiler opererer i forskjellige faser hver fase forvandler kildeprogrammet fra en representasjon til en annen. Hver fase tar innspill fra forrige trinn og mater utdataene til neste fase av kompilatoren.
Det er 6 faser i en kompilator. Hver av denne fasen hjelper til med å konvertere maskinkoden på høyt nivå. Fasene til en kompilator er:
- Leksisk analyse
- Syntaksanalyse
- Semantisk analyse
- Mellomliggende kodegenerator
- Kodeoptimerer
- Kode generator

Alle disse fasene konverterer kildekoden ved å dele den i tokens, lage parse trær og optimalisere kildekoden i forskjellige faser.
I denne opplæringen lærer du:
- Hva er fasene i Compiler Design?
- Fase 1: Leksikalanalyse
- Fase 2: Syntaksanalyse
- Fase 3: semantisk analyse
- Fase 4: Generering av mellomliggende koder
- Fase 5: Kodeoptimalisering
- Fase 6: Kodegenerering
- Symboltabelladministrasjon
- Feilhåndteringsrutine:
Fase 1: Leksikalanalyse
Lexical Analysis er den første fasen når kompilatoren skanner kildekoden. Denne prosessen kan være fra venstre til høyre, karakter for karakter, og gruppere disse tegnene i tokens.
Her er karakterstrømmen fra kildeprogrammet gruppert i meningsfulle sekvenser ved å identifisere tokens. Det gjør innføringen av de tilsvarende billettene i symboltabellen og sender symbolet til neste fase.
De primære funksjonene i denne fasen er:
- Identifiser de leksikale enhetene i en kildekode
- Klassifiser leksikale 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 | Nummer |
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 ble skrevet av programmereren er riktig eller ikke.
Syntaksanalyse er basert på reglene basert på det spesifikke programmeringsspråket ved å konstruere parse-treet ved hjelp av tokens. Den bestemmer også strukturen til kildespråket og grammatikken eller syntaksen til språket.
Her er en liste over oppgaver utført i denne fasen:
- Få poletter fra den leksikale analysatoren
- Sjekker om uttrykket er syntaktisk korrekt eller ikke
- Rapporter alle syntaksfeil
- Konstruer en hierarkisk struktur som er kjent som et parse-tre
Eksempel
Enhver identifikator / nummer er et uttrykk
Hvis x er en identifikator og y + 10 er et uttrykk, er x = y + 10 en setning.
Tenk på parse-treet for følgende eksempel
(a+b)*c
I Parse Tree
- Interiørnode: post 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 sammen meningsfullt
- Samler typeinformasjon og sjekker for typekompatibilitet
- Kontroller operander er tillatt av kildespråket
Fase 3: semantisk analyse
Semantisk analyse sjekker den semantiske konsistensen av koden. Den bruker syntakstreet fra forrige fase sammen med symboltabellen for å verifisere at den gitte kildekoden er semantisk konsistent. Den sjekker også om koden formidler en passende betydning.
Semantic Analyzer vil sjekke for typeforskjeller, inkompatible operander, en funksjon som kalles med upassende argumenter, en sortvariabel osv.
Funksjonene til semantisk analysefase er:
- Hjelper deg med å lagre samlet informasjon som er samlet, og lagre den i symboltabell eller syntaks-tre
- Lar deg utføre typekontroll
- I tilfelle av type uoverensstemmelse, der det ikke er noen eksakte typekorrigeringsregler som tilfredsstiller den ønskede operasjonen, vises en semantisk feil.
- Samler inn typeinformasjon og sjekker for typekompatibilitet
- Sjekker om kildespråket tillater operandene eller ikke
Eksempel
float x = 20.2;float y = x*30;
I den ovennevnte koden vil den semantiske analysatoren skrive heltalet 30 for å flyte 30,0 før multiplikasjon
Fase 4: Generering av mellomliggende koder
Når semantisk analysefase er over kompilatoren, genererer det mellomliggende kode for målmaskinen. Det representerer et program for en eller annen abstrakt maskin.
Mellomliggende kode er mellom språket på høyt nivå og maskinnivå. Denne mellomkoden må genereres på en slik måte som gjør det enkelt å oversette den til målmaskinkoden.
Funksjoner for generering av mellomliggende koder:
- Den skal genereres fra den semantiske representasjonen av kildeprogrammet
- Har verdiene beregnet under prosessen med oversettelse
- Hjelper deg med å oversette mellomkoden til målspråket
- Lar deg opprettholde prioritetsrekkefølgen for kildespråket
- Den inneholder riktig antall operander av instruksjonen
Eksempel
For eksempel,
total = count + rate * 5
Mellomliggende kode ved hjelp av adressekodemetoden er:
t1 := int_to_float(5)t2 := rate * t1t3 := count + t2total := t3
Fase 5: Kodeoptimalisering
Den neste fasen av er kodeoptimalisering eller mellomkode. Denne fasen fjerner unødvendig kodelinje og ordner sekvensen av utsagn for å påskynde gjennomføringen av programmet uten å kaste bort ressurser. Hovedmålet med denne fasen er å forbedre den mellomliggende koden for å generere en kode som går raskere og opptar mindre plass.
De primære funksjonene i denne fasen er:
- Det hjelper deg å etablere en avveining mellom utførelse og kompileringshastighet
- Forbedrer kjøretidens måltid
- Genererer strømlinjeformet kode fremdeles i mellomrepresentasjon
- Fjerner ikke tilgjengelig kode og blir kvitt ubrukte variabler
- Fjerne utsagn som ikke er endret fra sløyfen
Eksempel:
Vurder følgende kode
a = intofloat(10)b = c * ad = e + bf = d
Kan bli
b =c * 10.0f = e+b
Fase 6: Kodegenerering
Kodegenerering er den siste og siste fasen av en kompilator. Det får innganger fra kodeoptimaliseringsfaser og produserer sidekoden eller objektkoden som et resultat. Målet med denne fasen er å tildele lagring og generere flyttbar maskinkode.
Den tildeler også minneplasser for variabelen. Instruksjonene i mellomkoden konverteres til maskininstruksjoner. Denne fasen dekker optimaliserings- eller mellomkoden til målspråket.
Målet språk er maskinkoden. Derfor blir alle minneplasseringer og registre også valgt og tildelt i løpet av denne fasen. Koden generert av denne fasen blir utført for å ta innganger og generere forventede utganger.
Eksempel:
a = b + 60,0
Ville muligens bli oversatt til registre.
MOVF a, R1MULF #60.0, R2ADDF R1, R2
Symboltabelladministrasjon
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 identifikasjonsposten og hente den raskt. Symboltabellen hjelper deg også med omfangsstyring. Symboltabellen og feilbehandleren samhandler med alle fasene og oppdatering av symboltabellen tilsvarende.
Feilhåndteringsrutine:
I kompileringsdesignprosessen kan det oppstå feil i alle nedenstående faser:
- Leksikal analysator: Feilstavede tokens
- Syntaksanalysator: Mangler parentes
- Mellomkodegenerator: Feil samsvarende operander for en operatør
- Code Optimizer: Når uttalelsen ikke kan nås
- Kodegenerator: Uoppnåelige uttalelser
- Symboltabeller: Feil i flere deklarerte identifikatorer
De vanligste feilene er ugyldig tegnsekvens ved skanning, ugyldige tokensekvenser i type, omfangsfeil og parsing i semantisk analyse.
Feilen kan oppstå i noen av de ovennevnte fasene. 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 melding.
Sammendrag
- Compiler opererer i forskjellige faser hver fase forvandler kildeprogrammet fra en representasjon til en annen
- Seks faser av kompilatordesign er 1) Leksikalanalyse 2) Syntaksanalyse 3) Semantisk analyse 4) Mellomliggende kodegenerator 5) Kodeoptimerer 6) Kodegenerator
- Lexical Analysis er den første fasen når kompilatoren skanner kildekoden
- Syntaksanalyse handler om å oppdage struktur i tekst
- Semantisk analyse kontrollerer kodens semantiske konsistens
- Når semantisk analysefase er over kompilatoren, genererer du mellomkode for målmaskinen
- Kodeoptimaliseringsfase fjerner unødvendig kodelinje og ordner sekvensen av utsagn
- Kodegenereringsfasen får innganger fra kodeoptimaliseringsfasen 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