Kääntäjä - ohjelma tai tekninen työkalu, joka suorittaa ohjelman kääntämisen [1] [2] .
Ohjelman kääntäminen on jollain ohjelmointikielellä esitetyn ohjelman muuntamista toisella kielellä kirjoitetuksi ohjelmaksi. Kääntäjä tekee yleensä myös virhediagnostiikkaa, luo tunnistesanakirjoja, tulostaa ohjelmatekstin jne. [1]
Kieltä, jolla syöttöohjelma esitetään, kutsutaan lähdekieleksi ja itse ohjelmaa lähdekoodiksi . Tulostuskieltä kutsutaan kohdekieleksi .
Yleisesti ottaen käännöksen käsite ei koske vain ohjelmointikieliä, vaan myös muita kieliä - sekä virallisia tietokonekieliä (kuten HTML -kuvauskielet ) että luonnollisia kieliä ( venäjä , englanti jne.) [ 3] [4] .
Kääntäjiä on useita tyyppejä [2] .
Käännöksen tarkoituksena on muuntaa tekstiä yhdeltä kieleltä vastaanottajan ymmärtämälle kielelle. Lähetettäessä tietokoneohjelmaa, vastaanottaja voi olla:
Lähetystyypit:
Prosessorin (laitteen, koneen ) kieltä kutsutaan konekieleksi, konekoodiksi . Prosessori suorittaa konekielikoodin. Yleensä konekieli on matalan tason kieli , mutta on prosessoreita, jotka käyttävät korkean tason kieliä (esimerkiksi iAPX-432 [5] ). Tällaiset prosessorit eivät kuitenkaan ole levinneet monimutkaisuuden ja korkeiden kustannustensa vuoksi.
Kääntäjä on eräänlainen kääntäjä, joka muuntaa ohjelmointikielen lähdekoodin konekieleksi [ 6 ] .
Kokoonpanoprosessi koostuu yleensä useista vaiheista:
Ohjelma voi käyttää käyttöjärjestelmän ja kolmansien osapuolien kirjastojen tarjoamia palveluita (esimerkiksi kirjastoja tiedostojen käsittelyyn ja kirjastoja graafisen käyttöliittymän luomiseen). Linkittäminen tai linkittäminen suoritetaan konekoodin lisäämiseksi muista objektitiedostoista ( staattisten kirjastojen koodi ) ja tietoa dynaamisista kirjastoista objektitiedostoon . Linkittäjä tai linkittäjä tekee linkityksen tai linkittäjän . Linkki voi olla erillinen ohjelma tai osa kääntäjää . Linkkeri luo suoritettavan tiedoston . Suoritettava tiedosto (ohjelma) käynnistetään seuraavasti:
Kokoonpanon edut:
Kokoonpanon haitat:
Assembler on kääntäjä, joka muuntaa tekstin kokoonpanokielestä konekieleksi . Kokoonpanokieli on konekieltä lähellä oleva kieli , matalan tason kieli .
Tulkinta on prosessi, jossa luetaan ja suoritetaan lähdekoodia . Toteutettu tulkkiohjelmalla .
Tulkki voi työskennellä kahdella tavalla:
Ensimmäisessä tapauksessa käännöstä ei käytetä, ja toisessa tapauksessa käytetään lähdekoodin käännöstä välikoodiksi.
Tulkin vaiheet:
Tulkki mallintaa koneen ( virtuaalikone ), toteuttaa konekäskyjen haku-suoritussyklin. Konekomentoja ei kirjoiteta konekielellä, vaan korkean tason kielellä . Tulkkia voidaan kutsua virtuaalikoneen kielen suorittajaksi .
Puhdasta tulkintaa sovelletaan yleensä kieliin, joilla on yksinkertainen rakenne, kuten komentosarjakielet , APL ja Lisp .
Esimerkkejä tavukoodia tuottavista tulkeista : Perl , PHP , Python , Erlang .
Tulkkien edut kääntäjiin verrattuna:
Tulkkien haitat kääntäjiin verrattuna:
Vertailu puhtaan tulkin ja tavukoodia tuottavan tulkin välillä :
Dynaaminen tai JIT-käännös - käännös, jossa lähde- tai välikoodi muunnetaan (käännetään) konekoodiksi suoraan ajon aikana, "lennossa" ( englanniksi just in time , JIT ). Jokainen koodinpala käännetään vain kerran; käännetty koodi tallennetaan välimuistiin ja käytetään tarvittaessa uudelleen.
Dynaamisen kokoamisen edut kääntämiseen verrattuna:
Dynaamisen kokoamisen haitat kääntämiseen ja puhtaaseen tulkintaan verrattuna:
Dynaaminen käännös sopii hyvin web - sovelluksiin .
Dynaaminen käännös ilmestyi ja sitä tuetaan jossain määrin Java , .NET Framework , Perl , Python toteutuksissa .
Käsitteet "käännös" ja "tulkkaus" ovat erilaisia. Käännöksen aikana ohjelmakoodi muunnetaan kielestä toiselle. Tulkinnan aikana ohjelma suoritetaan.
Koska kääntämisen tarkoituksena on yleensä valmistautua tulkkaukseen, näitä prosesseja tarkastellaan yhdessä. Esimerkiksi ohjelmointikieliä luonnehditaan usein "käännetyiksi" tai "tulkituiksi" riippuen siitä, käytetäänkö kieltä vallitsevalla tavalla: käännös vai tulkinta. Lisäksi lähes kaikki matalan tason ja kolmannen sukupolven kielet , kuten assembler , C tai Modula-2 , käännetään ja ylemmän tason kieliä , kuten Python tai SQL , tulkitaan.
Toisaalta käännös- ja tulkkausprosessit tunkeutuvat toisiinsa: tulkit voivat kääntää (mukaan lukien dynaaminen käännös), ja kääntäjät voivat vaatia tulkintaa metaohjelmoinnin toteuttamiseksi (esimerkiksi kokoonpanokielen makroille , ehdolliseen kääntämiseen C - kielellä tai malleihin C++ : ssa ).
Lisäksi samaa ohjelmointikieltä voidaan sekä kääntää että tulkita, ja molemmissa tapauksissa tulee olla yhteiset lähdekielen konstruktien ja direktiivien analysointi- ja tunnistamisvaiheet. Tämä koskee sekä ohjelmisto- että laitteistototeutuksia - esimerkiksi x86 -perheen prosessorit, purkaa ne ennen konekielisten käskyjen suorittamista , korostamalla operandikenttiä opkoodeissa (osoittavat rekisterit , muistiosoitteet , vakiot ), bittisyvyyden jne. ja In Pentiumissa prosessorit NetBurst - arkkitehtuurilla , sama konekoodi käännetään lisäksi sarjaksi mikrotoimintoja ennen kuin se tallennetaan sisäiseen välimuistiin .
![]() |
---|