Vilka är faserna i Compiler Design?
Kompilatorn arbetar i olika faser varje fas omvandlar källprogrammet från en representation till en annan. Varje fas tar ingångar från sitt tidigare steg och matar utgången till nästa fas i kompilatorn.
Det finns sex faser i en kompilator. Var och en av denna fas hjälper till att konvertera maskinkoden på hög nivå. Faserna i en kompilator är:
- Lexikalisk analys
- Syntaxanalys
- Semantisk analys
- Mellankodgenerator
- Kodoptimerare
- Kod generator

Alla dessa faser konverterar källkoden genom att dela upp i tokens, skapa parse-träd och optimera källkoden i olika faser.
I den här handledningen lär du dig:
- Vilka är faserna i Compiler Design?
- Fas 1: Lexikalisk analys
- Fas 2: Syntaxanalys
- Fas 3: semantisk analys
- Fas 4: Generering av mellanliggande kod
- Fas 5: Kodoptimering
- Fas 6: Kodgenerering
- Symbolbordhantering
- Felhanteringsrutin:
Fas 1: Lexikalisk analys
Lexikalisk analys är den första fasen när kompilatorn skannar källkoden. Denna process kan lämnas åt höger, karaktär för karaktär, och gruppera dessa karaktärer i tokens.
Här grupperas karaktärsströmmen från källprogrammet i meningsfulla sekvenser genom att identifiera tokens. Det gör inmatningen av motsvarande biljetter i symboltabellen och skickar den token till nästa fas.
De primära funktionerna i denna fas är:
- Identifiera de lexikala enheterna i en källkod
- Klassificera lexikala enheter i klasser som konstanter, reserverade ord och ange dem i olika tabeller. Det ignorerar kommentarer i källprogrammet
- Identifiera token som inte är en del av språket
Exempel :
x = y + 10
Tokens
X | identifierare |
= | Uppdragsoperatör |
Y | identifierare |
+ | Tilläggsoperatör |
10 | siffra |
Fas 2: Syntaxanalys
Syntaxanalys handlar om att upptäcka struktur i kod. Den avgör om en text följer det förväntade formatet eller inte. Huvudsyftet med denna fas är att se till att källkoden skrevs av programmeraren är korrekt eller inte.
Syntaxanalys baseras på reglerna baserat på det specifika programmeringsspråket genom att konstruera parsträdet med hjälp av tokens. Det bestämmer också strukturen för källspråk och språkets grammatik eller syntax.
Här är en lista över uppgifter som utförts i denna fas:
- Skaffa tokens från lexical analyzer
- Kontrollerar om uttrycket är syntaktiskt korrekt eller inte
- Rapportera alla syntaxfel
- Konstruera en hierarkisk struktur som är känd som ett parse-träd
Exempel
Varje identifierare / nummer är ett uttryck
Om x är en identifierare och y + 10 är ett uttryck, är x = y + 10 ett uttalande.
Tänk på parse-trädet för följande exempel
(a+b)*c
I Parse Tree
- Inre nod: post med en arkiverad operatör och två filer för barn
- Blad: poster med 2 / fler fält; en för token och annan information om token
- Se till att programmets komponenter passar ihop meningsfullt
- Samlar typinformation och kontrollerar typkompatibilitet
- Kontrolloperander är tillåtna enligt källspråket
Fas 3: semantisk analys
Semantisk analys kontrollerar kodens semantiska konsistens. Den använder syntaxträdet i föregående fas tillsammans med symboltabellen för att verifiera att den angivna källkoden är semantiskt konsekvent. Den kontrollerar också om koden förmedlar en lämplig betydelse.
Semantic Analyzer söker efter typavvikelser, inkompatibla operander, en funktion som kallas med felaktiga argument, en odeklarerad variabel, etc.
Funktionerna i semantisk analysfas är:
- Hjälper dig att lagra insamlad typinformation och spara den i symboltabell eller syntaxträd
- Låter dig utföra typkontroll
- Vid typavvikelse, där det inte finns några exakta typkorrigeringsregler som uppfyller den önskade operationen, visas ett semantiskt fel
- Samlar in typinformation och kontrollerar typkompatibilitet
- Kontrollerar om källspråket tillåter operander eller inte
Exempel
float x = 20.2;float y = x*30;
I ovanstående kod kommer den semantiska analysatorn att testa heltalet 30 för att flyta 30,0 före multiplikation
Fas 4: Generering av mellanliggande kod
När den semantiska analysfasen är över kompilatorn genererar mellanliggande kod för målmaskinen. Det representerar ett program för någon abstrakt maskin.
Mellankod är mellan språket på hög nivå och på maskinnivå. Denna mellanliggande kod måste genereras på ett sådant sätt som gör det enkelt att översätta den till målmaskinkoden.
Funktioner för mellanliggande kodgenerering:
- Det bör genereras från den semantiska representationen av källprogrammet
- Håller värdena som beräknats under översättningen
- Hjälper dig att översätta mellanliggande koden till målspråket
- Låter dig behålla prioritetsordning för källspråket
- Den innehåller rätt antal operander i instruktionen
Exempel
Till exempel,
total = count + rate * 5
Mellankod med hjälp av adresskodmetoden är:
t1 := int_to_float(5)t2 := rate * t1t3 := count + t2total := t3
Fas 5: Kodoptimering
Nästa fas av är kodoptimering eller mellanliggande kod. Denna fas tar bort onödig kodrad och ordnar sekvensen av uttalanden för att påskynda genomförandet av programmet utan att slösa bort resurser. Huvudmålet för denna fas är att förbättra den mellanliggande koden för att generera en kod som går snabbare och tar mindre plats.
De primära funktionerna i denna fas är:
- Det hjälper dig att skapa en avvägning mellan körning och sammanställningshastighet
- Förbättrar körningstiden för målprogrammet
- Genererar strömlinjeformad kod fortfarande i mellanrepresentation
- Ta bort oåtkomlig kod och bli av med oanvända variabler
- Ta bort uttalanden som inte ändras från slingan
Exempel:
Tänk på följande kod
a = intofloat(10)b = c * ad = e + bf = d
Kan bli
b =c * 10.0f = e+b
Fas 6: Kodgenerering
Kodgenerering är den sista och sista fasen av en kompilator. Det får inmatningar från kodoptimeringsfaser och producerar sidkoden eller objektkoden som ett resultat. Målet med denna fas är att allokera lagring och generera flyttbar maskinkod.
Det tilldelar också minnesplatser för variabeln. Instruktionerna i mellankoden omvandlas till maskininstruktioner. Denna fas täcker optimeringskoden eller mellanliggande koden till målspråket.
Målspråket är maskinkoden. Därför väljs och tilldelas alla minnesplatser och register under denna fas. Koden som genereras av denna fas körs för att ta ingångar och generera förväntade utgångar.
Exempel:
a = b + 60,0
Skulle eventuellt översättas till register.
MOVF a, R1MULF #60.0, R2ADDF R1, R2
Symbolbordhantering
En symboltabell innehåller en post för varje identifierare med fält för attributen för identifieraren. Denna komponent gör det lättare för kompilatorn att söka i identifieringsposten och hämta den snabbt. Symboltabellen hjälper dig också för omfattningshantering. Symboltabellen och felhanteraren interagerar med alla faser och uppdaterar symboltabellen på motsvarande sätt.
Felhanteringsrutin:
I kompileringsdesignprocessen kan fel uppstå i alla nedan angivna faser:
- Lexikalisk analysator: Felstavade tokens
- Syntaxanalysator: parentes saknas
- Mellankodgenerator: Felaktiga operander för en operatör
- Code Optimizer: När uttalandet inte kan nås
- Kodgenerator: Oåtkomliga uttalanden
- Symboltabeller: Fel i flera deklarerade identifierare
De vanligaste felen är ogiltig teckensekvens vid skanning, ogiltiga tokensekvenser i typ, omfångsfel och tolkning i semantisk analys.
Felet kan uppstå i någon av ovanstående faser. Efter att ha hittat fel måste fasen hantera felen för att fortsätta med kompileringsprocessen. Dessa fel måste rapporteras till felhanteraren som hanterar felet för att utföra kompileringsprocessen. I allmänhet rapporteras felen i form av meddelande.
Sammanfattning
- Kompilatorn arbetar i olika faser varje fas omvandlar källprogrammet från en representation till en annan
- Sex faser av kompilerdesign är 1) Lexikalisk analys 2) Syntaxanalys 3) Semantisk analys 4) Mellankodgenerator 5) Kodoptimering 6) Kodgenerator
- Lexikalisk analys är den första fasen när kompilatorn skannar källkoden
- Syntaxanalys handlar om att upptäcka struktur i text
- Semantisk analys kontrollerar kodens semantiska konsistens
- När den semantiska analysfasen är över kompilatorn genererar du mellanliggande kod för målmaskinen
- Kodoptimeringsfasen tar bort onödig kodrad och ordnar sekvensen av uttalanden
- Kodgenereringsfasen får inmatningar från kodoptimeringsfasen och producerar sidkoden eller objektkoden som ett resultat
- En symboltabell innehåller en post för varje identifierare med fält för attributen för identifieraren
- Felhanteringsrutin hanterar fel och rapporter under många faser