Megjegyzések

  • Túl tág, legalábbis a " Hogyan működik " rész. Egész könyvek íródtak erről a témáról.
  • hu.wikipedia.org/wiki/Compiler a Wikipedia linkje lenne triviális találd meg, konkrétan mire kíváncsi? A kérdés elég tág ahhoz, hogy ' megkísértem, hogy megadjam az intelligens alec választ, " A fordítók lefordítják a kódokat egyik nyelvről a másikra , ", mivel ez az az általános gondolat, amelynek sok árnyalata van ezen belül, ha egyszer elkezdi vizsgálni, mit is jelent ez valójában.
  • Igen és azt hiszem elég jól megválaszolták.
  • A fordító működésének bármilyen magyarázata túl tág vagy túl bonyolult lesz. ' bonyolult tantárgy, és a fordítói osztályok voltak a legnehezebb számítógéppel kapcsolatos tanfolyamok, amelyeket valaha vettem.
  • @David A fordítók természetesen bonyolultak, és nem lehet magyarázza el itt a működésük minden részletét. Abban azonban biztos vagyok, hogy a fordítói tanfolyam elvégzése előtt alaposan megértette, mi is az a fordító, vagy hogyan működik.

Válasz

A fordító egy olyan program, amely egy másik program forráskódját lefordítja egy programozási nyelvből futtatható kódra.

A forráskód általában magas szintű programozási nyelven található. (pl. Pascal, C, C ++, Java, Perl, C # stb.). A futtatható kód lehet olyan gépi utasítások sorozata, amelyet a CPU közvetlenül végrehajthat, vagy lehet köztes reprezentáció, amelyet egy virtuális gép értelmez (pl. Java bájtkód).

Röviden, egy fordító átalakítja a programot egy ember által olvasható formátumból géppel olvasható formátumba.

A fordító működését illetően ez valóban bonyolult. Vannak könyvek és egyetemi tanfolyamok a témáról. Megpróbálom röviden felvázolni a folyamat főbb szakaszait, de ez egy nagyon áttekintő áttekintés lesz.

  1. Lexing – bontsa a program szövegét “tokenekre”. A tokenek a programozási nyelv “szavai”, például azonosítók (kulcsszavak, változónevek, függvénynevek stb.) Vagy operátorok (=, *, & stb.) .
  2. Feldolgozás – a tokenek sorozatának átalakítása elemző fává, amely egy adatstruktúra, amely különféle nyelvi konstrukciókat képvisel: típusdeklarációk, változódeklarációk, függvénydefiníciók, ciklusok, feltételek, kifejezések stb.
  3. Optimalizálás – értékelje az állandó kifejezéseket, optimalizálja a fel nem használt változókat vagy az elérhetetlen kódot, ha lehetséges, bontsa ki a ciklusokat stb.
  4. Fordítsa le az elemző fát gépi utasításokra (vagy JVM bájtkódra).

Ismét hangsúlyozom, hogy ez egy nagyon rövid leírás. A modern fordítók nagyon okosak, következésképpen nagyon bonyolultak.

Megjegyzések

  • Valójában egy nyelvet átalakít egy másikba. A C ++ korai fordító fordított C-re. Ugyanez vonatkozik a Vala fordítóra is. A Java fordító olyan bájtkódokká fordít, amely nem ' t futtatható JVM ' s JIT fordító nélkül.
  • @deadalnix IMHO , a lényeg az, hogy a nem futtatható kódról a futtatható kódra vált. Azt állítom, hogy a C-front nem fordító, hanem a C fordító front-endje volt. Vagy az összeállítási folyamat egy szakasza, ha akarja. A virtuális gépek elhomályosítják a " végrehajtható " és a " nem futtatható ", természetesen. Itt egyszerűen a futtatható kódnak tekinteném azt, ami a virtuális gépbe kerül, például a bájtkódot, és elválasztanám a virtuális gép belsejében zajló dolgokat, például a JIT-et.
  • @Dima, ez nem ' t nem a futtatható kódtól a futtatható kódig kell megadni. Például nem hajthatja végre a JVM bájtkódot közvetlenül a Windows gépeken.
  • @Thorbj ø rn Ravn Andersen: de a bájtkódot a JVM futtathatja. Nem ' t egy " virtuális gép " teljes pontja úgy néz ki, mint egy igazi gépet a programozónak?
  • Azt állítom, hogy hagyományosan egy fordító programot alakított át egy ember által olvasható formátumból géppel olvasható formátumra, ahogy Dima mondta. Az olyan változatok, mint a Cfront, a C ++ konvertálása C-re vagy a javac, a Java bájtkódokká konvertálása, fejlettebb témák, amelyeket valószínűleg addig kell hagyni, hogy elmagyarázzuk az alapvető, hagyományos koncepciót annak, aki nem ismeri ezt. h2> Válasz

    A fordító olyan számítógépes program (vagy utasításkészlet), amely egy programozási nyelven (a forrásnyelven) írt forráskódot átalakít egy másik számítógépes nyelvre (a célnyelv, gyakran bináris formában, objektumkódként ismert). A forráskód átalakításának leggyakoribb oka egy futtatható program létrehozása.

    A fordítók magas szintű nyelveken kapcsolják össze a forrásprogramokat az alapul szolgáló hardverrel. A fordítónak a következőkre van szüksége:

    1. A programok szintaxisának helyességének meghatározása
    2. Helyes és hatékony objektumkód létrehozása
    3. Futásidejű szervezet
    4. A kimenet formázása az assembler és / vagy linker konvenciói szerint.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük