Kompilering er prosessen med å konvertere kildekode skrevet i et programmerings- eller markupspråk til kjørbar kode. Den inkluderer forskjellige stadier, som hver transformerer koden til en form på lavere nivå til den endelige kjørbare koden er produsert. Her er en generell oversikt over kompileringsprosessen:
1. Forbehandling:
– Dette er et valgfritt stadium som skjer før selve kompileringen.
- Forbehandleren behandler makroer, betingede setninger og inkluderer direktiver for å forberede kildekoden for videre kompilering.
2. Leksikalanalyse (skanning):
- Kildekoden er delt inn i individuelle tokens, for eksempel nøkkelord, identifikatorer, operatorer og tegnsetting.
- Den leksikalske analysatoren, også kjent som skanneren, identifiserer disse tokenene og konverterer dem til en sekvens av meningsfulle symboler.
3. Syntaksanalyse (parsing):
- Syntaksanalysatoren eller parseren sjekker om sekvensen av tokens følger grammatikkreglene for programmerings- eller markup-språket.
- Den konstruerer en hierarkisk struktur som representerer programmets syntaks og sjekker for syntaksfeil.
4. Semantisk analyse:
- Kompilatoren utfører semantisk analyse for å sikre at programmet er semantisk korrekt.
- Den sjekker for datatypers kompatibilitet, variabeldeklarasjoner og referanser, samt for logiske feil eller inkonsekvenser i koden.
5. Generasjon av mellomrepresentasjon (IR):
- Kompilatoren oversetter kildekoden til en mellomrepresentasjon (IR) som abstrakte syntakstreer (AST) eller treadressekode.
– IR er en språkuavhengig representasjon av programmets struktur og semantikk.
6. Optimalisering:
- Kompilatoroptimaliseringer brukes på IR for å forbedre effektiviteten til den genererte koden.
- Optimaliseringer kan inkludere konstant forplantning, sløyfeutrulling, registerallokering og eliminering av død kode.
7. Kodegenerering:
- Den optimaliserte IR-en konverteres til monteringsspråk, som er en symbolsk representasjon på lavt nivå av maskininstruksjonene.
- Monteringskode er spesifikk for målprosessorarkitekturen.
8. Kobling:
- For større programmer kombinerer koblingsstadiet objektfiler generert fra forskjellige kildefiler og eksterne biblioteker.
- Linking løser symbolreferanser mellom moduler og sikrer at alle avhengigheter tilfredsstilles.
9. Montering:
- Assembleren konverterer assemblerspråkkoden til maskinkode, som er binære instruksjoner som datamaskinen kan utføre direkte.
10. Utførelse:
- Den endelige maskinkoden lastes inn i datamaskinens minne og kjøres av CPU.
Kompileringsprosessen er en serie transformasjoner som gjør at et språkprogram på høyt nivå skrevet av mennesker kan oversettes til en form som kan forstås direkte av datamaskinen. Hvert trinn i prosessen bringer koden nærmere maskinens morsmål samtidig som den sikrer korrekthet og effektivitet.