Come può un interprete produrre l'output di qualche codice, senza avere i componenti di calcolo come l'ALU di un processore?

1

Ho passato molte spiegazioni su un compilatore e un interprete. Penso di aver capito chiaramente la differenza tra compilatore e interprete. Spiegherò il mio apprendimento attraverso il seguente esempio. Diciamo che abbiamo le tre linee di codice in un file.

a=3;
b=4;
a=a+b;
  1. Un compilatore converte queste tre linee in codice macchina (o in una lingua che è inferiore alla lingua corrente) e il processore (se si tratta di codice macchina) lo esegue per produrre l'output.
  2. Un interprete passa attraverso ogni riga, poiché al suo interno elabora a = 3 e produce l'output in base alle specifiche del linguaggio. Quindi, passa alla riga successiva e fa lo stesso.

Quello che non capisco è " come può un interprete produrre l'output di qualche codice, senza avere i componenti di calcolo come l'ALU di un processore? "

La mia comprensione è che qualsiasi programma dovrebbe essere eseguito da un processore in codice macchina come il processore capisce solo questo.

Oppure un interprete memorizza le istruzioni a livello macchina che dovrebbero essere eseguite per una funzione in un linguaggio di alto livello e chiede al processore di eseguire quelle istruzioni macchina ogni volta che quella specifica funzione arriva nel codice di quel linguaggio di alto livello?

    
posta AV94 08.09.2016 - 21:44
fonte

2 risposte

2

Un interprete, nella sua forma più semplice, legge prima una riga di istruzioni, la analizza per creare qualcosa come un albero di sintassi astratto (come descritto qui ), che può essere elaborato più facilmente. Quindi avviene l'elaborazione, in cui le espressioni e le sottoespressioni dell'AST vengono valutate in un ordine specifico.

Durante la valutazione, ciascuna espressione terminale verrà mappata su una funzione predefinita all'interno del programma interprete stesso e l'interprete chiamerà quella funzione predefinita. E se si assume che il programma interprete stesso sia un programma compilato , quella funzione predefinita esiste sotto forma di codice macchina, che può essere eseguito direttamente dalla CPU.

Quindi un interprete non memorizza le istruzioni a livello macchina che dovrebbero essere eseguite per una funzione. Ma contiene funzioni per le espressioni di base, che erano già state compilate in precedenza.

    
risposta data 08.09.2016 - 22:15
fonte
2

Or does an interpreter store the machine level instructions that should be run for a function in a high level language and asks the processor to run those machine instructions...

Quello. Più o meno.

"how can an interpreter produce output of some code, without having the computing components like ALU of a processor?"

Utilizzando un set predefinito di istruzioni della macchina eseguibile definite all'interno della CPU e utilizzate dal compilatore del compilatore per produrre istruzioni eseguibili. L'ALU interpreta queste istruzioni; un programma non manipola direttamente l'ALU.

Ecco un esempio. Quando si esegue un compilatore C, il programma C

int main() {
  printf("Hello World!");
  return 0;
}

viene tradotto nelle istruzioni della macchina:

LC0:
        .string "Hello World!"
        .text
.globl main
        .type   main, @function
main:
        push    ebp
        mov     ebp, esp
        and     esp, -16
        sub     esp, 16
        mov     eax, OFFSET FLAT:.LC0
        mov     DWORD PTR [esp], eax
        call    printf
        mov     eax, 0
        leave
        ret

La funzione printf , a sua volta, compila il proprio set di istruzioni.

Ora, il modo che fa questo è specifico per un determinato compilatore. Le tecniche coinvolte nella creazione di un compilatore o di un interprete sono molto varie e coinvolgono molte discipline, i cui argomenti riempiono numerosi libri di testo. Ma il principio di base è lo stesso: si inizia con un linguaggio leggibile dall'uomo, si attraversano diversi passaggi e alla fine si arriva al codice eseguibile dalla macchina.

    
risposta data 08.09.2016 - 22:13
fonte

Leggi altre domande sui tag