Oversætter

(eller: compiler, translator). Et program vil have forskellige fremtrædelsesformer, når det først foreligger på maskinlæsbar form: Som kildeprogram, skrevet i et menneskelæsbart programmeringssprog, eller som én ud af mange maskinorienterede former, f.eks. på relokerbar form, som objektkode eller som boot image. En oversætter er et program, der er beregnet på at omforme (dvs. oversætte) et kildeprogram, skrevet i et højniveausprog (3GL) eller i symbolsk maskinsprog, til maskinsprog, dvs. til en af de maskinorienterede former. En forskel mellem en oversætter (compiler) til højniveausprog og en oversætter (assembler) til symbolsk maskinkode er, at ved den sidstnævnte er der ofte direkte korrespondance mellem en linie kildetekst og en (eller flere) maskininstruktioner. AUTOCODER fra 1952 var sandsynligvis den første primitive oversætter.

En oversætter foretager mere end blot omformningen, idet den først kontrollerer, at reglerne for det pågældende programmeringssprog er overholdt - i modsat fald vil der kun være ringe fornuft i at levere et resultat. Oversætteren foretager derfor en detaljeret kontrol af syntaks og struktur, herunder om reglerne for brug af datatyper og operatorer er overholdt (se også parser). Er der tale om separat oversættelse af et modul, må oversætteren konsultere en database for at konstatere, om dette modul er i overensstemmelse med resten af programmellet.

Under denne proces udskrives løbende meddelelser om fundne fejl; en god oversætter vil for det første finde mange fejl ad gangen, for det andet begrænse følgerne af én fejl, så der ikke udskrives lange "smørrebrødssedler" for hver fejl, og for det tredje tydeligt markere stedet og arten af fejl, så programmøren ikke skal sidde og gætte sig frem. I visse systemer er oversætter og redigeringsprogram sammenkoblet, så en fejl vil bevirke skift fra oversætter til redigeringsprogram med markøren placeret det fejlramte sted. Efter at rettelser er foretaget, genoptages oversættelsen.

Kun programmer, som oversætteren accepterer, kan oversættes fuldstændigt og resultere i et objektprogram, som lagres i en fil. Denne fil kan så hentes frem og udføres til enhver tid, hvilket sparer oversættelsestiden. Moduler vil normalt blive lagret, indtil alle moduler er oversat, og vil dernæst blive sammenkædet af en linker til et udførbart program.

Et programmeringssprog er defineret i en beskrivelse eller rapport, og ved opslag i denne kan man konstatere, om et bestemt programtekst er et korrekt program i det pågældende sprog. På grund af, at oversættelsesprocessen har en så central rolle, er det nok så væsentligt, hvad oversætteren til sproget accepterer. I forbindelse med sproget ADA findes der derfor en samling på mange hundrede programmer; disse skal ved oversættelse give et forud defineret resultat, for at oversætteren må kaldes en ADA-oversætter.

Ethvert kildeprogram skal igennem en oversættelsesproces. Ofte er det ikke praktisk at oversætte "til bunds" til et maskinprogram. Resultatet af oversættelsen er da "pseudo-kode", som skal fortolkes, enten af et såkaldt "run-time system (en anden betegnelse er "standardbibliotek"), eller af en egentlig fortolker. I forbindelse med Java anvendes betegnelsen bytecode for denne pseudo-kode, i andre sammenhænge bruges betegnelsen mellemkode. Da fortolkningen indebærer en kontrol af programmets struktur - og dette gøres, hver eneste gang en sætning skal udføres - vil et oversat program gerne køre hurtigere, end hvis det fortolkes (oversætteren klarer kontrollen én gang for alle). Fortolkning vil derfor blive brugt, når et program kun skal køre sjældent eller få gange; oversættelse, når et program skal køre mange gange i uændret skikkelse.

Forfattere: 
Klaus Hansen
Casper Thomsen