Oversætter

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 24. oktober 2017; checks kræver 44 redigeringer .

Oversætter  - et program eller teknisk værktøj, der udfører oversættelsen af ​​programmet [1] [2] .

Oversættelse af et program  er transformationen af ​​et program præsenteret på et af programmeringssprogene til et program skrevet på et andet sprog. Oversætteren udfører normalt også fejldiagnostik, genererer ordbøger over identifikatorer, udskriver programteksten osv. [1]

Det sprog, som inputprogrammet præsenteres på, kaldes kildesproget , og selve programmet kaldes kildekoden . Outputsproget kaldes målsproget .

I det generelle tilfælde gælder begrebet oversættelse ikke kun for programmeringssprog, men også for andre sprog - både formelle computersprog (som HTML markup- sprog ) og naturlige sprog ( russisk , engelsk osv.) [ 3] [4] .

Typer af oversættere

Der findes flere typer oversættere [2] .

Implementeringer

Formålet med oversættelse er at konvertere tekst fra ét sprog til et sprog, der er forståeligt for adressaten. Ved udsendelse af et computerprogram kan adressaten være:

Udsendelsestyper:

Kompilering

Processorens sprog (enhed, maskine) kaldes maskinsprog, maskinkode . Maskinsprogkoden udføres af processoren. Normalt er maskinsprog et sprog på lavt niveau , men der er processorer, der bruger sprog på højt niveau (for eksempel iAPX-432 [5] ). Sådanne processorer har imidlertid ikke opnået distribution på grund af deres kompleksitet og høje omkostninger.

En compiler  er en slags oversætter, der konverterer kildekode fra et programmeringssprog til maskinsprog [6] .

Kompileringsprocessen består normalt af flere trin:

Programmet kan bruge tjenester leveret af operativsystemet og tredjepartsbiblioteker (for eksempel biblioteker til at arbejde med filer og biblioteker til at skabe en grafisk grænseflade) . Linking eller linking udføres for at tilføje maskinkode fra andre objektfiler (kode for statiske biblioteker ) og information om dynamiske biblioteker til en objektfil . Linking eller linking udføres af linkeren eller linkeren . Linkeren kan være et selvstændigt program eller en del af en compiler . Linkeren opretter en eksekverbar . Den eksekverbare fil (program) startes som følger:  

Kompileringsfordele:

Kompileringsulemper:

En assembler  er en compiler, der konverterer tekst fra assemblersprog til maskinsprog . Forsamlingssprog  er et sprog tæt på maskinsprog , et sprog på lavt niveau .

Fortolkning

Fortolkning er processen med at læse og udføre kildekode . Implementeret af et tolkeprogram .

Tolken kan arbejde på to måder:

  1. læs kode og udfør den med det samme ( ren fortolkning [6] );
  2. læs koden, opret en mellemrepræsentation af koden i hukommelsen ( bytecode eller p-code ), udfør den mellemliggende repræsentation af koden ( blandet implementering [6] ).

I det første tilfælde bruges oversættelse ikke, og i det andet tilfælde anvendes oversættelse af kildekoden til mellemkoden.

Stadier af tolken:

  1. leksikalsk analyse ;
  2. parsing ;
  3. semantisk analyse ;
  4. oprettelse af en mellemrepræsentation af koden (ikke udført med ren fortolkning);
  5. udførelse.

Fortolkeren modellerer en maskine ( virtuel maskine ), implementerer en cyklus med hente-udførelse af maskinkommandoer. Maskinkommandoer er ikke skrevet i maskinsprog, men i et sprog på højt niveau . En fortolker kan kaldes en virtuel maskine sprog executor .

Ren fortolkning anvendes normalt på sprog med en enkel struktur, såsom scriptsprog , APL og Lisp .

Eksempler på tolke, der producerer bytekode : Perl , PHP , Python , Erlang .

Fordele ved tolke frem for compilere:

Ulemper ved tolke sammenlignet med compilere:

Sammenligning mellem en ren fortolker og en bytekode- genererende fortolker :

Dynamisk kompilering

Dynamisk eller JIT-kompilering - oversættelse, hvor kilde- eller mellemkoden konverteres (kompileres) til maskinkode direkte ved kørsel, "on the fly" ( engelsk  just in time , JIT ). Hvert stykke kode kompileres kun én gang; kompileret kode cachelagres og genbruges efter behov.

Fordele ved dynamisk kompilering sammenlignet med kompilering:

Ulemper ved dynamisk kompilering sammenlignet med kompilering og ren fortolkning:

Dynamisk kompilering er velegnet til webapplikationer .

Dynamisk kompilering dukkede op og understøttes til en vis grad i implementeringer af Java , .NET Framework , Perl , Python .

Forvirring af oversættelse og tolkning

Begreberne "oversættelse" og "fortolkning" er forskellige. Under oversættelsen konverteres programkoden fra et sprog til et andet. Under tolkning udføres programmet.

Da formålet med oversættelse normalt er at forberede fortolkning, betragtes disse processer under ét. For eksempel karakteriseres programmeringssprog ofte som "kompileret" eller "fortolket", afhængigt af om sproget bruges på en overvejende måde: kompilering eller fortolkning. Desuden er næsten alle lavniveau- og tredjegenerationssprog , såsom assembler , C eller Modula-2 , kompileret, og højere niveau-sprog , som Python eller SQL  , fortolkes.

På den anden side er der en gensidig gennemtrængning af oversættelses- og tolkningsprocesser: tolke kan kompilere (herunder dynamisk kompilering), og oversættere kan kræve tolkning for at implementere metaprogrammering (for eksempel for makroer i assemblersprog , betinget kompilering i C eller skabeloner i C++ ).

Desuden kan det samme programmeringssprog både oversættes og fortolkes, og i begge tilfælde skal der være fælles stadier af analyse og genkendelse af konstruktioner og direktiver for kildesproget. Dette gælder både software- og hardwareimplementeringer - for eksempel x86 - familieprocessorer , før de udfører maskinsprogsinstruktioner , afkoder dem, fremhæver operandfelter i opkoder (angiver registre , hukommelsesadresser , konstanter ), bitdybde osv., og i In Pentium processorer med NetBurst - arkitekturen oversættes den samme maskinkode yderligere til en sekvens af mikrooperationer, før den gemmes i den interne cache .

Noter

  1. 1 2 GOST 19781-83 // Datalogi. Terminologi: Referencemanual. Nummer 1 / Anmelder Ph.D. tech. Videnskaber Yu. P. Selivanov. - M . : Forlag for standarder, 1989. - 168 s. - 55.000 eksemplarer.  — ISBN 5-7050-0155-X .
  2. 1 2 Pershikov V.I., Savinkov V.M. Explanatory Dictionary of Informatics / Reviewers: Ph.D. Fysisk.-Matematik. Sci. A. S. Markov og Dr. Phys.-Math. Videnskaber I. V. Pottosin. - M. : Finans og statistik, 1991. - 543 s. — 50.000 eksemplarer.  - ISBN 5-279-00367-0 .
  3. ST ISO 2382/7-77 // Datalogi. Terminologi. Dekret. op.
  4. Dictionary of Computing Systems = Dictionary of Computing / Ed. V. Illingworth m.fl.: Pr. fra engelsk. A. K. Belotsky og andre; Ed. E. K. Maslovsky. - M . : Mashinostroenie, 1990. - 560 s. - 70.000 (yderligere) eksemplarer.  - ISBN 5-217-00617-X (USSR), ISBN 0-19-853913-4 (UK).
  5. Organik E. Organisering af Intel 432-systemet = En programmørs syn på Intel 432-systemet / Pr. fra engelsk. - M . : Mir, 1987. - S. 20, 31. - 446 s. - 59.000 eksemplarer.
  6. 1 2 3 Robert W. Sebesta. 1.7. Implementeringsmetoder // Grundlæggende begreber for programmeringssprog \u003d Begreber for programmeringssprog / Pr. fra engelsk. - 5. udg. — M .: Williams , 2001. — S. 45-52. — 672 s. - 5000 eksemplarer.  — ISBN 5-8459-0192-8 (russisk), ISBN 0-201-75295-6 (engelsk).

Litteratur