Komentáře

  • Příliš široké, alespoň " Jak to funguje " část. Na toto téma jsou napsány celé knihy.
  • en.wikipedia.org/wiki/Compiler by byl odkaz na Wikipedii, který je triviální najít, co konkrétně vás zajímá? Otázka je dostatečně široká na to, abych byl ' pokoušen dát chytrou odpověď alec, " překladačů překládat kód z jednoho jazyka do druhého , " protože to je obecná myšlenka, která má v sobě spoustu nuancí, jakmile se člověk začne dívat na to, co to opravdu zahrnuje.
  • Ano a myslím bylo na ni zodpovězeno docela dobře.
  • Jakékoli vysvětlení toho, jak překladač funguje, bude buď příliš široké, nebo příliš komplikované. Je to ' komplikovaný předmět a kurzy kompilátorů byly nejtěžší kurzy související s počítačem, jaké jsem kdy absolvoval.
  • @David Překladače jsou samozřejmě komplikované a vy nemůžete vysvětlete všechny podrobnosti o tom, jak zde pracují. Jsem si však jistý, že jste na základní úrovni porozuměli tomu, co je kompilátor nebo jak funguje, než jste absolvovali kurz kompilátoru.

Odpovědět

Kompilátor je program, který převádí zdrojový kód jiného programu z programovacího jazyka do spustitelného kódu.

Zdrojový kód je obvykle v programovacím jazyce vysoké úrovně. (např. Pascal, C, C ++, Java, Perl, C # atd.). Spustitelným kódem může být posloupnost strojových instrukcí, které lze provést přímo CPU, nebo to může být mezilehlá reprezentace, která je interpretována virtuálním strojem (např. Bajtový kód Java).

Stručně řečeno, překladač převádí program z formátu čitelného na člověka do formátu čitelného strojem.

To, jak překladač funguje, je skutečně komplikované. Na toto téma existují knihy a univerzitní kurzy. Pokusím se stručně nastínit hlavní fáze procesu, ale bude to velmi povrchní přehled.

  1. Lexing – rozdělte text programu na „tokeny“. Tokeny jsou „slova“ programovacího jazyka, například identifikátory (klíčová slova, názvy proměnných, názvy funkcí atd.) Nebo operátory (=, *, & atd.) .
  2. Analýza – převede sekvenci tokenů na analyzovaný strom, což je datová struktura představující různé jazykové konstrukce: deklarace typů, deklarace proměnných, definice funkcí, smyčky, podmíněné výrazy, výrazy atd.
  3. Optimalizace – vyhodnoťte konstantní výrazy, optimalizujte nepoužívané proměnné nebo nedosažitelný kód, rozviňte smyčky, pokud je to možné atd.
  4. Přeložte syntaktický strom do instrukcí stroje (nebo bajtového kódu JVM).

Znovu zdůrazňuji, že se jedná o velmi krátký popis. Moderní překladače jsou velmi chytré a v důsledku toho velmi komplikované.

Komentáře

  • Ve skutečnosti transformuje jazyk na jiný. Raný překladač C ++ přeložil do C. Totéž platí pro překladač Vala. Kompilátor Java kompiluje do bytecode, který není ' t spustitelný bez kompilátoru JVM ' s JIT.
  • @deadalnix IMHO , jde o to, že přejdete z nespustitelného kódu na spustitelný kód. Tvrdil bych, že C-front nebyl kompilátor, ale front-end kompilátoru C. Nebo fázi procesu kompilace, pokud chcete. Virtuální stroje stírají hranici mezi " spustitelným " a " nespustitelným " samozřejmě. Zde bych jednoduše považoval spustitelný kód za cokoli, co jde do virtuálního stroje, jako je bajtový kód, a abstraktní pryč, co se děje uvnitř VM, jako je JIT.
  • @Dima, nedělá to ' nemusí být z nespustitelného kódu do spustitelného kódu. Například nemůžete spustit bajtový kód JVM přímo na počítačích se systémem Windows.
  • @Thorbj ø rn Ravn Andersen: ale bajtový kód je spustitelný JVM. Není ' t celý bod " virtuálního stroje " vypadat jako skutečný stroj programátorovi?
  • Tvrdil bych, že překladač tradičně převáděl program z formátu čitelného člověkem do formátu strojově čitelného, jak řekl Dima. Varianty jako Cfront převádějící C ++ na C nebo javac převádějící Javu na bytecode jsou pokročilejší témata, která by pravděpodobně měla zůstat, dokud nevysvětlíte základní tradiční koncept někomu, kdo s ním není obeznámen. h2> Odpověď

    Kompilátor je počítačový program (nebo sada pokynů), který transformuje zdrojový kód napsaný v programovacím jazyce (zdrojový jazyk) do jiného počítačového jazyka ( cílový jazyk, často s binární formou známou jako objektový kód). Nejběžnějším důvodem, proč chcete transformovat zdrojový kód, je vytvořit spustitelný program.

    Překladače překlenují zdrojové programy v jazycích vysoké úrovně se základním hardwarem. Kompilátor vyžaduje:

    1. Určení správnosti syntaxe programů
    2. Generování správného a efektivního objektového kódu
    3. Organizace za běhu
    4. Formátování výstupu podle konvencí assembleru nebo linkeru.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *