Faser af Compiler med eksempel

Indholdsfortegnelse:

Anonim

Hvad er faserne i Compiler Design?

Compiler fungerer i forskellige faser, hver fase transformerer kildeprogrammet fra en repræsentation til en anden. Hver fase tager input fra sin forrige fase og fører dens output til den næste fase af compileren.

Der er 6 faser i en kompilator. Hver af denne fase hjælper med at konvertere maskinkoden på højt niveau. Faserne i en kompilator er:

  1. Lexikal analyse
  2. Syntaksanalyse
  3. Semantisk analyse
  4. Mellemliggende kodegenerator
  5. Kodeoptimering
  6. Kode generator
Faser af Compiler

Alle disse faser konverterer kildekoden ved at opdele i tokens, skabe parse-træer og optimere kildekoden i forskellige faser.

I denne vejledning lærer du:

  • Hvad er faserne i Compiler Design?
  • Fase 1: Lexikalisk analyse
  • Fase 2: Syntaksanalyse
  • Fase 3: Semantisk analyse
  • Fase 4: Generering af mellemliggende koder
  • Fase 5: Optimering af kode
  • Fase 6: Kodegenerering
  • Symboltabeladministration
  • Fejlhåndteringsrutine:

Fase 1: Lexikalisk analyse

Lexikalisk analyse er den første fase, når kompilator scanner kildekoden. Denne proces kan være fra venstre mod højre, karakter for karakter, og gruppere disse tegn i tokens.

Her er karakterstrømmen fra kildeprogrammet grupperet i meningsfulde sekvenser ved at identificere tokens. Det gør indtastningen af ​​de tilsvarende billetter i symboltabellen og sender dette token til næste fase.

De primære funktioner i denne fase er:

  • Identificer de leksikale enheder i en kildekode
  • Klassificer leksikale enheder i klasser som konstanter, reserverede ord, og indtast dem i forskellige tabeller. Det ignorerer kommentarer i kildeprogrammet
  • Identificer token, som ikke er en del af sproget

Eksempel :

x = y + 10

Poletter

x identifikator
= Opdragsoperatør
Y identifikator
+ Tilføjelsesoperatør
10 Nummer

Fase 2: Syntaksanalyse

Syntaksanalyse handler om at opdage struktur i kode. Det bestemmer, om en tekst følger det forventede format eller ej. Hovedformålet med denne fase er at sikre, at kildekoden blev skrevet af programmøren er korrekt eller ej.

Syntaksanalyse er baseret på reglerne baseret på det specifikke programmeringssprog ved at konstruere parse-træet ved hjælp af tokens. Det bestemmer også strukturen for kildesprog og sprogets grammatik eller syntaks.

Her er en liste over opgaver udført i denne fase:

  • Få tokens fra den leksikale analysator
  • Kontrollerer, om udtrykket er syntaktisk korrekt eller ej
  • Rapporter alle syntaksfejl
  • Konstruer en hierarkisk struktur, der er kendt som et parse-træ

Eksempel

Enhver identifikator / nummer er et udtryk

Hvis x er en identifikator og y + 10 er et udtryk, er x = y + 10 en sætning.

Overvej parse-træet for det følgende eksempel

(a+b)*c

I Parse Tree

  • Indvendig knude: registrering med en arkiveret operatør og to filer til børn
  • Blad: poster med 2 / flere felter; en til token og anden information om token
  • Sørg for, at programmets komponenter passer sammen meningsfuldt
  • Indsamler typeoplysninger og tjekker for typekompatibilitet
  • Kontroloperander er tilladt af kildesproget

Fase 3: Semantisk analyse

Semantisk analyse kontrollerer kodens semantiske konsistens. Det bruger syntaks-træet fra den foregående fase sammen med symboltabellen for at kontrollere, at den givne kildekode er semantisk konsistent. Den kontrollerer også, om koden formidler en passende betydning.

Semantic Analyzer vil kontrollere for typefejl, uforenelige operander, en funktion kaldet med ukorrekte argumenter, en sort, variabel osv.

Funktionerne i semantisk analysefase er:

  • Hjælper dig med at gemme typeoplysninger, der er indsamlet, og gemme dem i symboltabel eller syntaks-træ
  • Giver dig mulighed for at udføre typekontrol
  • I tilfælde af type mismatch, hvor der ikke er nogen nøjagtige typekorrektionsregler, der tilfredsstiller den ønskede operation, vises en semantisk fejl
  • Indsamler typeoplysninger og tjekker for typekompatibilitet
  • Kontrollerer, om kildesproget tillader operander eller ej

Eksempel

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

I ovenstående kode vil den semantiske analysator typestille heltal 30 for at flyde 30,0 før multiplikation

Fase 4: Generering af mellemliggende koder

Når den semantiske analysefase er over compileren, genereres mellemkode til målmaskinen. Det repræsenterer et program til en eller anden abstrakt maskine.

Mellemliggende kode er mellem sprog på højt niveau og maskinniveau. Denne mellemliggende kode skal genereres på en sådan måde, at det er let at oversætte den til målmaskinkoden.

Funktioner til generering af mellemliggende kode:

  • Det skal genereres ud fra den semantiske repræsentation af kildeprogrammet
  • Indeholder de værdier, der er beregnet under oversættelsesprocessen
  • Hjælper dig med at oversætte den mellemliggende kode til målsproget
  • Giver dig mulighed for at opretholde rækkefølgen af ​​kildesproget
  • Den indeholder det korrekte antal operander i instruktionen

Eksempel

For eksempel,

total = count + rate * 5

Mellemliggende kode ved hjælp af adressekodemetoden er:

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

Fase 5: Optimering af kode

Den næste fase af er kodeoptimering eller mellemliggende kode. Denne fase fjerner unødvendig kodelinje og arrangerer rækkefølgen af ​​udsagn for at fremskynde udførelsen af ​​programmet uden at spilde ressourcer. Hovedmålet med denne fase er at forbedre den mellemliggende kode for at generere en kode, der kører hurtigere og optager mindre plads.

De primære funktioner i denne fase er:

  • Det hjælper dig med at etablere en afvejning mellem udførelse og kompileringshastighed
  • Forbedrer løbetid for målprogrammet
  • Genererer strømlinet kode stadig i mellemrepræsentation
  • Fjernelse af utilgængelig kode og fjernelse af ubrugte variabler
  • Fjernelse af udsagn, der ikke er ændret fra sløjfen

Eksempel:

Overvej følgende kode

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

Kan blive

b =c * 10.0f = e+b

Fase 6: Kodegenerering

Kodegenerering er den sidste og sidste fase af en kompilator. Det får input fra kodeoptimeringsfaser og producerer sidekoden eller objektkoden som et resultat. Målet med denne fase er at allokere lager og generere maskinkode, der kan flyttes.

Det tildeler også hukommelsesplaceringer til variablen. Instruktionerne i den mellemliggende kode konverteres til maskininstruktioner. Denne fase dækker optimerings- eller mellemkoden til målsproget.

Målsproget er maskinkoden. Derfor er alle hukommelsesplaceringer og -registre også valgt og tildelt i denne fase. Koden genereret af denne fase udføres for at tage input og generere forventede output.

Eksempel:

a = b + 60,0

Vil muligvis blive oversat til registre.

MOVF a, R1MULF #60.0, R2ADDF R1, R2

Symboltabeladministration

En symboltabel indeholder en registrering for hver identifikator med felter til identifikatorens attributter. Denne komponent gør det lettere for compileren at søge i identifikationsposten og hurtigt hente den. Symboltabellen hjælper dig også med omfangsstyring. Symboltabellen og fejlhåndtereren interagerer tilsvarende med alle faser og symboltabelopdateringen.

Fejlhåndteringsrutine:

I compiler-designprocessen kan der opstå fejl i alle nedenstående faser:

  • Lexikal analysator: forkert stavede tokens
  • Syntaksanalysator: Manglende parentes
  • Mellemkodegenerator: Uoverensstemmende operander for en operatør
  • Code Optimizer: Når udsagnet ikke kan nås
  • Kodegenerator: Uopnåelige udsagn
  • Symboltabeller: Fejl ved flere erklærede identifikatorer

De mest almindelige fejl er ugyldig tegnsekvens ved scanning, ugyldige tokensekvenser i type, omfangsfejl og parsing i semantisk analyse.

Fejlen kan forekomme i en af ​​ovenstående faser. Efter at have fundet fejl, skal fasen håndtere fejlene for at fortsætte med kompileringsprocessen. Disse fejl skal rapporteres til fejlhåndteringen, som håndterer fejlen for at udføre kompileringsprocessen. Generelt rapporteres fejlene i form af besked.

Resumé

  • Compiler fungerer i forskellige faser, hver fase transformerer kildeprogrammet fra en repræsentation til en anden
  • Seks faser af compiler-design er 1) Lexikalisk analyse 2) Syntaksanalyse 3) Semantisk analyse 4) Mellemliggende kodegenerator 5) Kodeoptimering 6) Kodegenerator
  • Lexikalisk analyse er den første fase, når kompilator scanner kildekoden
  • Syntaksanalyse handler om at opdage struktur i tekst
  • Semantisk analyse kontrollerer kodens semantiske konsistens
  • Når den semantiske analysefase er over compileren, skal du generere mellemkode til målmaskinen
  • Kodeoptimeringsfase fjerner unødvendig kodelinje og arrangerer rækkefølgen af ​​udsagn
  • Kodegenereringsfase får input fra kodeoptimeringsfasen og producerer sidekoden eller objektkoden som et resultat
  • En symboltabel indeholder en registrering for hver identifikator med felter til identifikatorens attributter
  • Fejlhåndteringsrutine håndterer fejl og rapporter i mange faser