Come funziona un compilatore? [chiuso]

16

Nota: sono sorpreso che questo non sia stato chiesto prima, e se è stato impossibile trovarlo in una ricerca.

Sono stato su un sacco di siti web, ho letto un sacco di articoli e ho sentito un sacco di spiegazioni. La maggior parte di loro erano buoni, ma erano tutti o troppo ampi o troppo complicati o semplicemente brutti. Quindi la mia domanda è, come funziona un compilatore?

Se questa è una domanda complessa e difficile, ti prego di dirmelo. In caso contrario, rispondi alla domanda.

    
posta Dynamic 08.11.2011 - 18:44
fonte

2 risposte

22

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

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

In breve, un compilatore converte un programma da un formato leggibile dall'uomo in un formato leggibile dalla macchina.

Per quanto riguarda il funzionamento di un compilatore, è davvero complicato. Ci sono libri e corsi universitari sull'argomento. 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 identificatori (parole chiave, nomi di variabili, nomi di funzioni, ecc.) O operatori (=, *, & amp ;, ecc.).
  2. Analisi - converte la sequenza di token in un albero di analisi, che è una struttura dati che rappresenta vari costrutti di 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, srotoli i loop se possibile, ecc.
  4. Traduci l'albero 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.

    
risposta data 08.11.2011 - 18:47
fonte
5

Un compilatore è un programma per computer (o una serie di istruzioni) che trasforma il codice sorgente scritto in un linguaggio di programmazione (la lingua di partenza) in un altro linguaggio del computer (la 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 compilano programmi sorgente in lingue di alto livello con l'hardware 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 dell'output in base alle convenzioni assembler e / o linker.
risposta data 08.11.2011 - 18:49
fonte

Leggi altre domande sui tag