On selvää, että ihmisten ja tietokoneen elektroninen laite on erilainen. Ihmiset voivat ymmärtää mitään luonnollisten kielten kautta, mutta tietokone ei. Tietokone tarvitsee kääntäjän kääntämään ihmisen luettavassa muodossa kirjoitetut kielet tietokoneella luettavaan muotoon.
Kääntäjä ja tulkki ovat kielen kääntäjän tyyppejä. Mikä on kielen kääntäjä? Tämä kysymys saattaa syntyä mielessäsi.
Kielikääntäjä on ohjelmisto, joka kääntää ohjelmat lähdekielestä, joka on ihmisen luettavissa olevassa muodossa, vastaavaksi ohjelmaksi objektikielellä. Lähdekieli on yleensä korkean tason ohjelmointikieli, ja objektikieli on tyypillisesti tietokoneen todellinen kieli.
Vertailukaavio
Vertailun perusteet | kääntäjä | Tulkki |
---|---|---|
panos | Se vie koko ohjelman kerrallaan. | Se vie yhden rivin koodia tai ohjetta kerrallaan. |
ulostulo | Se luo välituotekoodin. | Se ei tuota välituotekoodia. |
Työmekanismi | Kokoonpano suoritetaan ennen toteutusta. | Kokoonpano ja toteutus tapahtuu samanaikaisesti. |
Nopeus | Verrattain nopeammin | hitaampi |
Muisti | Muistivaatimus johtuu enemmän objektikoodin luomisesta. | Se vaatii vähemmän muistia, koska se ei luo välituotekoodia. |
virheet | Näytä kaikki virheet kokoamisen jälkeen, kaikki samanaikaisesti. | Näyttää kunkin rivin virheen yksitellen. |
Virheentunnistus | Vaikea | Helpompi verrata |
Ohjelmointikielet | C, C ++, C #, Scala, konekirjoitus käyttää kääntäjää. | Java, PHP, Perl, Python, Ruby käyttää tulkkia. |
Compilerin määritelmä
Kääntäjä on ohjelma, joka lukee korkean tason kielellä kirjoitetun ohjelman ja muuntaa sen koneeksi tai matalan tason kieleksi ja raportoi ohjelmassa esiintyvät virheet. Se muuntaa koko lähdekoodin yhdellä kertaa tai voi tehdä useita lähteitä, mutta lopulta käyttäjä saa valmiiksi suoritettavan valmis koodin.
Kääntäjä toimii vaiheissa; eri vaiheita voidaan ryhmitellä kahteen osaan, jotka ovat:
- Analyysiä Kääntäjän vaihetta kutsutaan myös etupääksi, jossa ohjelma on jaettu perustekijöihin ja tarkistaa kielioppi, semantti ja syntaksi, jonka jälkeen välikoodi luodaan. Analyysivaihe sisältää leksikaalisen analysaattorin, semanttisen analysaattorin ja syntaksi-analysaattorin.
- Kääntäjän synteesifaasi tunnetaan myös takapäähän, jossa välikoodi on optimoitu, ja kohdekoodia generoidaan. Synteesivaihe sisältää koodin optimoijan ja koodigeneraattorin.
VAIHTOJEN VAIHEET
Nyt ymmärrämme kunkin vaiheen toimintaa yksityiskohtaisesti.
- Lexical Analyzer : Se skannaa koodin merkkivirraksi, ryhmittelee merkkien sekvenssin lexemeiksi ja antaa merkkisarjan ohjelmointikielen perusteella.
- Syntaksi-analysaattori : Tässä vaiheessa edellisessä vaiheessa generoituja merkkejä tarkistetaan ohjelmointikielen kieliopin suhteen, ovatko lausekkeet syntaktisesti oikein vai ei. Se tekee puiden käsittelemiseksi.
- Semanttinen analysaattori : Se tarkistaa, ovatko edellisessä vaiheessa generoidut lausekkeet ja lausunnot noudattaneet ohjelmointikielen sääntöä vai eivät, ja se luo huomautettuja jäsentelypuita.
- Välikoodigeneraattori : Se tuottaa lähdekoodin vastaavan välikoodin. Välikoodia on useita, mutta TAC (Three Address Code) on yleisimmin käytetty.
- Code Optimizer : Se parantaa ohjelman aikaa ja tilaa. Tätä varten se poistaa ohjelmassa olevan redundantin koodin.
- Koodigeneraattori : Tämä on kääntäjän viimeinen vaihe, jossa tietyn koneen kohdekoodi luodaan. Se suorittaa toimintoja, kuten muistinhallintaa, rekisterin määritystä ja konekohtaista optimointia.
Symbolitaulukko on jonkin verran tietorakenne, joka hallitsee tunnisteita yhdessä sen tallentaman tietotyypin kanssa. Virheenkäsittelijä havaitsee, raportoi ja korjaa kääntäjän eri vaiheiden väliset virheet.
Tulkin määritelmä
Tulkki on vaihtoehto ohjelmointikielen toteuttamiselle ja tekee saman työn kuin kääntäjä. Tulkki suorittaa kääntäjää vastaavan lexing-, parsointi- ja tyyppitarkistuksen . Mutta tulkki käsittelee syntaksipuuta suoraan pääsyn ilmaisuihin ja suorittaakseen lausuman pikemminkin kuin koodin tuottamista syntaksipuusta.
Tulkki voi vaatia saman syntaksipuun käsittelyä useammin kuin kerran, mikä on syy siihen, miksi tulkinta on verrattain hitaampi kuin suoritetun ohjelman suorittaminen.
Kokoonpano ja tulkinta yhdistettiin todennäköisesti ohjelmointikielen toteuttamiseen. Missä kääntäjä luo keskitason koodin, koodia tulkitaan pikemminkin kuin konekoodiksi.
Tulkin käyttäminen on edullista ohjelmakehityksen aikana, jossa tärkein osa on pystyä testaamaan ohjelman muutoksia nopeasti sen sijaan, että ohjelma suoritetaan tehokkaasti.
Tärkeimmät erot kääntäjän ja tulkin välillä
Katsotaanpa suuria eroja kääntäjän ja tulkin välillä.
- Kääntäjä vie ohjelman kokonaisuutena ja kääntää sen, mutta tulkki kääntää ohjelman lausunnon lausumalla.
- Välikoodi tai kohdekoodi luodaan kääntäjän tapauksessa. Tulkkia vastaan ei luoda välikoodia.
- Kääntäjä on suhteellisen nopeampi kuin tulkki, koska kääntäjä vie koko ohjelman yhdellä kertaa, kun taas tulkit kääntävät kukin koodirivin toisensa jälkeen.
- Kääntäjä vaatii enemmän muistia kuin tulkki, koska se tuottaa objektikoodia.
- Kääntäjä esittää kaikki virheet samanaikaisesti, ja on vaikeaa havaita virheitä toisin kuin tulkki näyttää kunkin lausuman virheitä yksitellen, ja virheiden havaitseminen on helpompaa.
- Kääntäjässä, kun ohjelmassa esiintyy virhe, se pysäyttää käännöksen ja virheen poistamisen jälkeen koko ohjelma käännetään uudelleen. Päinvastoin, kun tulkissa tapahtuu virhe, se estää sen kääntämisen ja virheen poistamisen jälkeen käännös jatkuu.
- Kääntäjässä prosessi edellyttää kahta vaihetta, joissa ensimmäinen lähdekoodi käännetään kohdistetuksi ohjelmaksi ja suoritetaan sitten. Kun tulkki on yksi vaihe, jossa lähdekoodi kootaan ja suoritetaan samanaikaisesti.
- Kääntäjää käytetään ohjelmointikielissä, kuten C, C ++, C #, Scala jne. Toisessa tulkissa käytetään esimerkiksi Java, PHP, Ruby, Python jne. Kieliä.
johtopäätös
Kääntäjän ja tulkin on tarkoitus tehdä sama työ, mutta ne eroavat toisistaan toimintamenettelyssä. Compiler ottaa lähdekoodin yhteen, kun taas tulkki ottaa lähdekoodin osia eli lausuntoa.
Vaikka sekä kääntäjällä että tulkilla on tiettyjä etuja ja haittoja, kuten tulkittuja kieliä pidetään monitasoisina, eli koodi on kannettava. Sen ei myöskään tarvitse koota ohjetta, joka on aiemmin toisin kuin kääntäjä, joka on aikaa säästävä. Käännetyt kielet ovat nopeampia kokoamisprosessin suhteen.