Kommentit

  • Liian laaja, ainakin " Kuinka se toimii " osa. Aiheesta on kirjoitettu kokonaisia kirjoja.
  • fi.wikipedia.org/wiki/Compiler olisi Wikipedia-linkki, joka on triviaali löytää, mitä erityisesti ihmettelet? Kysymys on riittävän laaja, jotta minulla olisi ' kiusaus antaa älykäs alec-vastaus, " kääntäjät kääntävät koodin kieleltä toiselle , ", koska se on yleinen ajatus, jolla on paljon vivahteita, kun alkaa tarkastella, mihin se todella liittyy.
  • Kyllä ja mielestäni siihen on vastattu melko hyvin.
  • Kaikki selitykset kääntäjän toiminnasta ovat joko liian laajoja tai liian monimutkaisia. Se ' oli monimutkainen aihe, ja kääntäjäluokat olivat vaikeimpia tietokoneisiin liittyviä kursseja, joita olen koskaan käynyt.
  • @David Tietenkin kääntäjät ovat monimutkaisia, etkä voi selitä kaikki yksityiskohdat siitä, miten he työskentelevät täällä. Olen kuitenkin varma, että sinulla oli korkeatasoinen ymmärrys kääntäjän toiminnasta tai toiminnasta, ennen kuin aloitit kääntäjäkurssin.

Vastaa

Kääntäjä on ohjelma, joka kääntää toisen ohjelman lähdekoodin ohjelmointikielestä suoritettavaksi koodiksi.

Lähdekoodi on tyypillisesti korkean tason ohjelmointikielellä (esim. Pascal, C, C ++, Java, Perl, C # jne.). Suoritettava koodi voi olla sarja koneohjeita, jotka keskusyksikkö voi suorittaa suoraan, tai se voi olla väliesitys, jonka virtuaalikone tulkitsee (esim. Java-tavukoodi).

Lyhyesti sanottuna kääntäjä muuntaa ohjelman ihmisen luettavasta muodosta koneellisesti luettavaan muotoon.

Kääntäjän toiminnasta on todellakin monimutkaista. Aiheesta on kirjoja ja yliopistokursseja. Yritän hahmotella lyhyesti prosessin päävaiheet, mutta tämä on erittäin pintakuvaus.

  1. Lexing – hajota ohjelman teksti ”tokeneiksi”. Tunnukset ovat ohjelmointikielen ”sanoja”, kuten tunnisteet (avainsanat, muuttujien nimet, funktioiden nimet jne.) Tai operaattorit (=, *, & jne.) .
  2. Jäsennys – muuntaa tunnussekvenssi jäsentelypuuksi, joka on tietorakenne, joka edustaa erilaisia kielirakenteita: tyyppideklaraatioita, muuttujailmoituksia, funktiomääritelmiä, silmukoita, ehdollisia, lausekkeita jne. >
  3. Optimointi – arvioi vakiolausekkeet, optimoi käyttämättömät muuttujat tai tavoittamaton koodi, pura silmukat mahdollisuuksien mukaan jne.
  4. Käännä jäsennyspuu koneohjeiksi (tai JVM-tavukoodeiksi).

Korostan jälleen kerran, että tämä on hyvin lyhyt kuvaus. Nykyaikaiset kääntäjät ovat erittäin älykkäitä ja siten erittäin monimutkaisia.

Kommentit

  • Itse asiassa se muuttaa kielen toiseen. Varhainen C ++ -kääntäjä käänsi C: hen. Sama pätee Vala-kääntäjään. Java-kääntäjä kääntyy tavukoodiksi, joka ei ole ' t suoritettava ilman JVM: ää ' s JIT-kääntäjä.
  • @deadalnix IMHO , asia on, että siirryt suorittamattomasta koodista suoritettavaan koodiin. Väitän, että C-front ei ollut kääntäjä vaan C-kääntäjän etupää. Tai vaihe kokoamisprosessissa, jos haluat. Virtuaalikoneet hämärtävät " suoritettavan " ja " ei-suoritettava ", tietysti. Pidän tässä yksinkertaisesti suoritettavaa koodia mitä tahansa virtuaalikoneeseen menevää, kuten tavukoodia, ja abstraktin pois kaiken virtuaalikoneen sisällä tapahtuvasta, kuten JIT.
  • @Dima, se ei ' ei tarvitse olla suoritettavasta koodista suoritettavaan koodiin. Et voi esimerkiksi suorittaa JVM-tavukoodia suoraan Windows-koneilla.
  • @Thorbj ø rn Ravn Andersen: mutta tavutunnuksen suorittaa JVM. Eikö ' t ole " virtuaalikoneen " koko piste näyttämään todelliselta kone ohjelmoijalle?
  • Väitän, että perinteisesti kääntäjä muunsi ohjelman ihmisen luettavasta muodosta koneellisesti luettavaan muotoon, aivan kuten Dima sanoi. Muunnelmat, kuten Cfront-muunnos C ++: sta C-muotoon tai javac-muunnos Java: sta tavukoodiksi, ovat edistyneempiä aiheita, jotka tulisi todennäköisesti jättää vasta sen jälkeen, kun olet selittänyt perinteisen peruskäsitteen muille, jotka eivät tunne sitä. h2> Vastaa

    Kääntäjä on tietokoneohjelma (tai ohjejoukko), joka muuntaa ohjelmointikielellä (lähdekielellä) kirjoitetun lähdekoodin toiselle tietokoneelle ( kohdekieli, jolla on usein binäärimuoto, joka tunnetaan kohdekoodina) Yleisin syy lähdekoodin muuntamiseen on suoritettavan ohjelman luominen.

    Kääntäjät yhdistävät lähdeohjelmat korkean tason kielillä taustalla olevalla laitteistolla. Kääntäjä vaatii:

    1. ohjelmien syntaksin oikeellisuuden määrittämistä
    2. oikean ja tehokkaan objektikoodin luomista
    3. ajonaikaisia organisaatioita
    4. Lähdön muotoilu kokoonpanon ja / tai linkin käytäntöjen mukaisesti.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *