Oversætter er inden for datalogien et program, der kan omforme et andet program (kildeprogrammet), skrevet i et højere programmeringssprog, til maskinsprog (objektprogrammet).

Faktaboks

Også kendt som

compiler

kompiler

fortolker

I computerens barndom programmerede man direkte i maskinsprog, dvs. binært. Den tanke, at man ikke behøvede at arbejde slavisk på maskinens betingelser, opstod i begyndelsen af 1950'erne. Den amerikanske datalog og matematiker Grace Hopper (1906-92) fik den idé, at man kunne bruge en anden slags kode til sine programmer end den rå maskinkode; hun kaldte det pseudokode. Den kunne indrettes på menneskets betingelser i stedet for på maskinens. Man skulle herefter kun skrive ét program i binær maskinkode: Det, der kunne transformere fra pseudosproget til maskinsprog. Resten af programmerne kunne nu skrives i pseudokode. Bæredygtigheden af denne idé viste sig i 1957 ved fremkomsten af en oversætter til Fortran og ca. 1960 med en oversætter til Cobol. Den måde, man laver oversættere på i dag, er inspireret af de tanker, der fulgte med udviklingen af Algol, hvor bl.a. en gruppe på Regnecentralen i Danmark under ledelse af Peter Naur spillede en fremtrædende rolle.

En oversættelse og udførelse kan ske på to måder: Man kan oversætte hele kildeprogrammet under ét, hvorefter objektprogrammet udføres (kompilering), eller man kan oversætte en sætning i kildeprogrammet ad gangen og udføre den med det samme (fortolkning). Kompilering er mere effektiv end fortolkning, bl.a. fordi man kompilerer én gang, men kan udføre mange gange, mens oversættelsestiden indgår i hver udførelse ved fortolkning, hvilket imidlertid er velegnet til programmer, der ændres hyppigt, og hvor man hurtigt vil se virkningen af ændringerne (fx i programmeringsundervisning). Den moderne computers struktur har medført, at grænsen mellem kompilering og fortolkning er flydende (1999).

At komme fra start til slut i en oversættelse kan involvere et eller flere mellemstadier med hvert sit kodesprog (mellemsprog). Startprocessen udfører en leksikalsk og grammatisk analyse og kontrol af kildeprogrammet, baseret på en beskrivelse af programmeringssprogets syntaks, jf. backus-naur-form (se J.W. Backus). Eventuelle fejl rapporteres og skal rettes, før man kan fortsætte. Slutprocessen genererer de endelige maskininstruktioner. Der udføres evt. en optimering, hvor oversætteren søger at forbedre maskinkoden for hver sætning i kildeprogrammet, baseret på viden om, hvilke sætninger der står før og efter.

Almindeligvis opdeler man et stort program i moduler, der oversættes hver for sig. Mange programmører kan så arbejde på samme tid med et program, og en ændring i et modul kræver kun oversættelse af dette og ikke af hele programmet. En anden grund til opdelingen i moduler er, at oversættelse af et program ofte bruger flere maskinresurser end udførelse af det samme program. Hvis man skulle oversætte hele programmet under ét, ville det betyde, at det største oversættelige program på en given computer ville være mindre end det største udførbare program på samme computer, hvilket er uhensigtsmæssigt. Et modul kan indeholde uløste referencer, som opstår, når modulet henviser til et andet modul, der endnu ikke er oversat. Slutfasen må derfor også tage sig af sammensætning af modulerne til et samlet program.

Tidligere havde hver computertype sin egen oversætter for hvert programmeringssprog, men moderne oversættere producerer et mellemsprog, som kan kompileres eller fortolkes på alle computertyper, der kender det højere sprog. En Java-oversætter producerer fx såkaldt bytecode, der kan fortolkes af alle computere på Internettet, der kører Java.

Kommentarer

Kommentarer til artiklen bliver synlige for alle. Undlad at skrive følsomme oplysninger, for eksempel sundhedsoplysninger. Fagansvarlig eller redaktør svarer, når de kan.

Du skal være logget ind for at kommentere.

eller registrer dig