Commenti

  • Troppo ampio, almeno " Come funziona " parte. Ci sono interi libri scritti su questo argomento.
  • en.wikipedia.org/wiki/Compiler sarebbe il link di Wikipedia che è banale trovare, cosa ti stai chiedendo nello specifico? La domanda è abbastanza ampia che ' sarei tentato di dare la risposta intelligente alec di " I compilatori traducono il codice da una lingua allaltra , " poiché questa è lidea generale che ha molte sfumature allinterno di quella una volta che si inizia a guardare a cosa significa veramente.
  • Sì e penso è stato risposto abbastanza bene.
  • Qualsiasi spiegazione di come funziona un compilatore sarà o troppo ampia o troppo complicata. È ' un argomento complicato e le lezioni di compilatori sono stati i corsi di computer più difficili che abbia mai seguito.
  • @David Ovviamente i compilatori sono complicati e non puoi spiegare tutti i dettagli di come funzionano qui. Tuttavia, sono sicuro che avevi una conoscenza di base di alto livello di cosa sia un compilatore o di come funziona prima di seguire il corso sul compilatore.

Risposta

Un compilatore è un programma che traduce il codice sorgente di un altro programma da un linguaggio di programmazione in codice eseguibile.

Il codice sorgente è tipicamente in un linguaggio di programmazione di alto livello (ad esempio Pascal, C, C ++, Java, Perl, C #, ecc.). Il codice eseguibile può essere una sequenza di istruzioni della macchina che possono essere eseguite direttamente dalla CPU, oppure può essere una rappresentazione intermedia che viene interpretata da una macchina virtuale (es. Codice byte Java).

In breve, un compilatore converte un programma da un formato leggibile dalluomo in un formato leggibile dalla macchina.

Quanto al funzionamento di un compilatore, è davvero complicato. Ci sono libri e corsi universitari sullargomento. Cercherò di delineare brevemente le fasi principali del processo, ma questa sarà una panoramica molto superficiale.

  1. Lexing – suddividi il testo del programma in “token”. I token sono le “parole” del linguaggio di programmazione, come gli identificatori (parole chiave, nomi di variabili, nomi di funzioni, ecc.) O operatori (=, *, &, ecc.) .
  2. Parsing – converte la sequenza di token in un albero di analisi, che è una struttura di dati che rappresenta vari costrutti del linguaggio: dichiarazioni di tipo, dichiarazioni di variabili, definizioni di funzioni, cicli, condizionali, espressioni, ecc.
  3. Ottimizzazione: valuta le espressioni costanti, ottimizza le variabili inutilizzate o il codice non raggiungibile, srotola i loop se possibile, ecc.
  4. Traduci lalbero di analisi in istruzioni macchina (o codice byte JVM).

Ancora una volta, sottolineo che questa è una descrizione molto breve. I compilatori moderni sono molto intelligenti e, di conseguenza, molto complicati.

Commenti

  • In realtà, trasforma una lingua in unaltra. Il primo compilatore C ++ si compilava in C. Lo stesso vale per il compilatore Vala. Il compilatore Java viene compilato in un bytecode che non è ' t eseguibile senza un compilatore JIT JVM '.
  • @deadalnix IMHO , il punto è che si passa da codice non eseguibile a codice eseguibile. Direi che C-front non era un compilatore ma un front-end per il compilatore C. O una fase del processo di compilazione, se vuoi. Le macchine virtuali sfocano il confine tra " eseguibile " e " non eseguibile ", ovviamente. Qui vorrei semplicemente considerare il codice eseguibile come qualsiasi cosa accada nella macchina virtuale, come il codice byte, e astrarre via tutto ciò che accade allinterno della VM, come JIT.
  • @Dima, non ' non deve essere da codice non eseguibile a codice eseguibile. Ad esempio, non è possibile eseguire il codice byte JVM direttamente su macchine Windows.
  • @Thorbj ø rn Ravn Andersen: ma il codice byte è eseguibile dalla JVM. ' non è lo scopo di una " macchina virtuale " sembrare una vera macchina al programmatore?
  • Direi che tradizionalmente un compilatore converte un programma da un formato leggibile dalluomo in un formato leggibile dalla macchina, proprio come ha detto Dima. Variazioni come Cfront che converte C ++ in C o javac che converte Java in bytecode sono argomenti più avanzati che probabilmente dovrebbero essere lasciati fino a dopo aver spiegato il concetto tradizionale di base a qualcuno che non lo conosce.

Risposta

Un compilatore è un programma per computer (o un insieme di istruzioni) che trasforma il codice sorgente scritto in un linguaggio di programmazione (il linguaggio di origine) in un altro linguaggio per computer (il lingua di destinazione, spesso con una forma binaria nota come codice oggetto). Il motivo più comune per voler trasformare il codice sorgente è creare un programma eseguibile.

I compilatori collegano i programmi sorgente in linguaggi di alto livello con lhardware sottostante. Un compilatore richiede:

  1. Determinazione della correttezza della sintassi dei programmi
  2. Generazione di codice oggetto corretto ed efficiente
  3. Organizzazione run-time
  4. Formattazione delloutput secondo le convenzioni dellassembler e / o del linker.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *