1 / 29

Generalità

Generalità. Linguaggio e Macchina Astratta M.A.: struttura e stati dell’esecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore: il supporto RTS Compilatore: Macchine di sviluppo e Gerarchia Macchine Intermedie: costruzioni miste.

kyle
Télécharger la présentation

Generalità

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Generalità • Linguaggio e Macchina Astratta • M.A.: struttura e stati dell’esecutore • Costruire M.A.: Interprete, Compilatore • Interprete: dentro • Compilatore: il supporto RTS • Compilatore: Macchine di sviluppo e Gerarchia • Macchine Intermedie: costruzioni miste

  2. Linguaggi, Macchine Astratte, Interpreti & Compilatori

  3. Definizioni:linguaggio e formalismo linguaggio di (programmazione) = = formalismo per esprimere (applicazioni di funzioni calcolabili) formalismo= sintassi (forma delle costruzioni permesse) + semantica (significato loro associato)

  4. Esempio: Linguaggio di Programmazione L = <S, SEM> e’ un linguaggio di progr. 1) per ogni PS, SEM(P) {N N} 2) per ogni f {N  N}, esiste P S, tale che: per ogni n N, f(n) = SEM(P)(n) [dove: {N  N} = funzioni calcolabili]

  5. P EL(P) EL Control frame Data-Control Stack Heap Definizioni:Macchina Astratta Macchina astratta= Linguaggio (L=<S,SEM>) + Esecutore (EL) Per ogni PS, SEM(P) EL(P) Java Virtual Machine Landin’s SECD

  6. SEM(P)(n) P,n I O A A* P,n P,n [dove I,O funzioni iniettive su A e A* risp.] Esempio: Macchina Astratta, Linguaggio ed Esecutore • LM = <S, SEM> è un linguaggio di programmazione • EMè un esecutore di applicazioni di programmi • M = <LM,EM> EM: A  A* per ogni P S, n N Î Î SEM linguaggio Macchina Astratta EM

  7. Macchina Astratta: Struttura e Stati dell’Esecutore Interprete Ciclo di interpretazione Op1 … Opk Programma Dati Memoria Fetch istruzione Controllo sequenza Fetch operandi Controllo dati Gestione memoria Modello statico-dinamico controllo Macchina astratta - Esecutore

  8. Macchina Astratta: Memoria, Controllo • Memoria: strutturata secondo un modello che • dipende dal linguaggio della macchina • array di parole, registri, stack • heap - L. con allocazione dinamica (Pascal, C, C++, …,Java, • grafo - L. con condivisione di strutture(funzionali) • Controllo: gestisce lo stato della macchina • trova il successivo statement o espressione • trova i dati su cui tale stat. o espr. opera • gestisce la memoria

  9. start fetch statement decodifica fetch operandi seleziona Op1 Opn halt stop Macchina Astratta: Interprete - cliclo di interpretazione

  10. Costruire Macchine Astratte • Utiliziamo macchine astratte gia definite • Sia L0=(S0,SEM0) il nostro linguaggio • Sia M1= (L1=<S1,SEM1>,EL1) una macchina • inteprete • definiamo l’esecutore EL0 come programma di L1. • compilatore • trasformiamo ogni struttura (programma) di L0 • in una equivalente struttura (programma) di L1.

  11. Î S0 SEM(P)(n) P,n E L O Î S1 E ( E ,(P,n)) E ,(P,n) L L L 1 O O E L 1 Eseguire una APPLICAZIONE ( P,n) di L , consiste: 0 nell'eseguire l'applicazione E ,(P,n) di L L 1 0 Interprete

  12. Interprete: dentro EL0 • Una collezione di procedure che realizzano: • i passi (decodifica) del ciclo di interpretazione per L0 • il modello di memoria di dati e programmi di L0 • l’unità di controllo per fetch di codice e di dati di L0 • un implementazione delle primitive di L0

  13. P Î S0 CL0(P) Î S1 E CL0,P L EL1(CL0,P) O E L 1 Il compilatore non opera su applicazioni bensì su strutture (programmi: P) C preserva la semantica: L O SEM (P) = SEM (C (P)) L O 1 O Compilatore C011

  14. Compilatore: Il Run Time Support • Non dipende dallo specifico programma compilato • Utilizzabile dall’oggetto di ogni sorgente • Una collezione di procedure che realizzano: • il modello di memoria di dati e programmi di L0 • strutture per trasferimento controllo • un’implementazione delle primitive di L0

  15. Compilatore: La Macchina Sottostante EL0(P,n) PS0 CL0(P)S1 CL0(P),n EL1(CL0(P),n) RTS EL1 CL0 EL0

  16. Compilatore: La Macchina di Sviluppo PS0 CL0(P)S1 CL0(P),n EL1(CL0(P),n) sorgente di L0 oggetto per L1 Linguaggio target (object language) EL1 RTS metalinguaggio EL2 CL0 Macchina Host Macchina Target EL0 C012

  17. Gerarchia di Macchinenello sviluppo • Gerarchia di Macchine • riduce ad ogni livello l’espressivitá • semplifica la costruzione della macchina di un linguaggio • molto espressivo Linguaggio meno espressivo ha: - molti costrutti ma elementari - un esecutore piú semplice • Quando la macchina target è concreta • nessuna differenza concettuale tra astratta e concreta • abbiamo però un esecutore effettivo per ogni macchina della • gerarchia

  18. Gerarchia di Macchine nella struttura Linguaggi di Rete Macchina Rete Linguaggi di Browser Macchina WEB Java Macchina Java Scala Macchina Scala Java Bytecode Macchina Intermedia Linguaggio di Sistema SistemaOperativo LinguaggioMicroporgrammazione Firmware Linguaggio Macchina Hardware

  19. Classi di Macchine Concrete • In corrispondenza alle molte classi di linguaggi • Imperativi • Applicativi • Object oriented • Differiscono per il linguaggio e di conseguenza per: • struttura dello stato, ovvero: • modello di memoria • metodi di fetch e di decodifica • - operazioni primitive

  20. Macchina Intermedia: Costruzioni Miste L0:Linguaggio sorgente Macchina di L0 compilatore LI:Ling. Intermedio Macchina di LI interprete L1:Linguaggio target Macchina di L1 • Vantaggi: • sviluppo ridotto • portabilità aumentata • dimensione c. oggetto: • occ. memoria • tempo esecuzione

  21. Compilatore, Interprete:contesto, struttura componenti • contesto operativo: preprocessing e loading • Compilatore: Struttura, fasi e passi • Interprete: Struttura standard • Visitiamo le fasi: un esempio • Compiler-Compiler: semplifichiamo la stesura • Bootstrapping

  22. Compilatore, Interprete:contesto, struttura componenti • contesto operativo: preprocessing e loading • Compilatore: Struttura, fasi e passi • Interprete: Struttura standard • Visitiamo le fasi: un esempio • Compiler-Compiler: semplifichiamo la stesura • Bootstrapping

  23. Struttura dei moduli Preprocessor Link e macros Contesto del Compilatore: Font-end Back-end Source program Compiler Object program Assembler Codice rilocabile Librerie rts Link-Loader Assoluto eseguibile

  24. Analisi Lessicale Analisi Sintattica Analisi Statica Tabella Simboli Errori Codice Intermedio Ottimizzazione Fasi e Passi: 6 fasi k(≥1) passi Codice target Compilatore: struttura, fasi e passi

  25. Analisi Lessicale Analisi Sintattica Analisi Statica Tabella Simboli Errori Emulatore su Codice target Interprete: La struttura standard Fasi e Passi: 4 fasi k(≥1) passi

  26. Analisi Lessicale Analisi Sintattica Analisi Statica Tabella Simboli Errori Codice Intermedio Correttezza Terminazione - proprieta’ varie Codice Intermedio Fasi e Passi: 8 fasi k(≥1) passi Ottimizzazione Codice target Compilatore: Una struttura per analisi di correttezza avanzate

  27. Compiler-Compiler: ridurre i metalinguaggi e semplificare la stesura di un compilatore Lo sviluppo di un compilatore (interprete), da un linguaggio L0 a Lt, coinvolge altri linguaggi Lm. I metalinguaggi sono utilizzati per esprimere le procedure di analisi e traduzione, e condizionano il compilatore che può essere eseguito solo sul meta scelto Distinguere tra: C0tme C0tn Combiniamo interprete e compilatore

  28. Bootstrapping • costruiamo un interprete E0m(che valuta programmi di L0 • su una macchina Mm): strumento di sviluppo • costruiamo compilatore C0t0: Il compilatore è scritto nel • linguaggio L0 stesso. • eseguiamo: E0m(C0t0)(C0t0)otteniamo C0tt Bootstrapping (m ≤ t) Il prodotto è ora indipendente dal meta

  29. In questo corsoSemantica formale e RTS • Linguaggi studiati da 2 punti di vista: • Semantica formale • RTS: supporto a run time • Semantica Formale • sempre in forma eseguibile, (i.e. un interprete formalmente derivato) • implementata ad altissimo livello (i.e. con il massimo di astrazioni possibili) • definizione rigorosa (precisa, non ambigua) indipendente dall’implementazione: • Progettista: la definisce • Implementatore: la usa come specifica del linguaggio da implementare • Programmatore: la usa come documentazione indipendente dall’implementazione • scrivere programmi corretti e • provare proprietà del programma, semplificazioni e modifiche • RTS • focalizza le caratteristiche essenziali del linguaggio e della sua M.A. • Progettista: sono le strutture semantiche con cui dare significato ai programmi del linguaggio • Implementatore: le strutture base da realizzare • Programmatore: le strutture da conoscere per usare bene il linguaggio

More Related