Semantisk analyse

Når den leksikalske og den syntaktiske analyse har parset koden igennem, mangler der stadig at blive lavet forskellige checks. Det gælder bl.a., om de typer man har erklæret bliver brugt lovligt; om man fx erklærer variabler før man bruger dem. Denne sematiske analyse bliver ofte skrevet sammen med den syntaktiske analyse, da de to ligger forholdsvis tæt op af hinanden. Den semantiske analyse udgør den sidste del af compilerens front-end.


Type-check

Det skal undersøges, om variablerne bliver brugt i overensstemmelse med type-reglerne. Det kan fx være om man forsøger, at tildele en tekst-streng til en heltalsvariabel, hvilket ikke er lovligt.

Under type-check kunne man også have deklarationscheck, hvilket skal forhindre at man får lov til at bruge en variabel, før man erklærer den.

I mange sprog er det muligt at lave type-konvertering, fx kunne det være funktioner, der konverterede en type til integer. Det kan også være automatisk konvertering, som når resultatet af et heltal divideret med et decimaltal bliver et decimaltal. I Svendsk er dette egentlig ikke inkluderet, men Java compileren sørger for det, hvorfor vi ikke vil beskæftige os mere med det.


Implementering

Når man implementerer typecheck er der to måder at gøre dette på, nemlig statisk og dynamisk. Hvis det er statisk, foregår checket under kompilerings-tidspunktet, mens dynamisk type-check foregår under runtime (mens programmet kører). Eftersom vores Svendsk-compiler ikke genererer eksekverbar kode, er dette ikke aktuelt.

Udover det ovenstående, er der i den semantiske analyse også flow of control check. Det er her det undersøges, om forskellige elementer i koden er i den rette kontekst. Fx må en afbryd() eller ITERATION ikke stå andre steder end i en løkke.