Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
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 PS, 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
Definizioni: Macchina Astratta
Linguaggio (L=<S,SEM>) + Esecutore (EL) EL Control frame Data-Control Stack Heap P EL(P) Per ogni PS, SEM(P) EL(P) Java Virtual Machine Landin’s SECD
6
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 P,n SEM(P)(n) I O A A* [dove I,O funzioni iniettive su A e A* risp.] linguaggio Macchina Astratta EM
7
Macchina Astratta: Struttura e Stati dell’Esecutore
Programma Dati Memoria Interprete Ciclo di interpretazione Op1 … Opk 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
Macchina Astratta: Interprete - cliclo di interpretazione
start fetch statement decodifica fetch operandi seleziona Op1 Opn halt stop
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
Interprete Eseguire una APPLICAZIONE ( P,n) di L , consiste:
, consiste: nell'eseguire l'applicazione E L ,(P,n) di L 1 P,n SEM(P)(n) O ,(P,n) ( ,(P,n)) Î S0 Î S1
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
Compilatore CL0(P) EL1(CL0,P) CL0,P P C011 E L Î S0 Î S1
Il compilatore non opera su applicazioni bensì su strutture (programmi: P) C preserva la semantica: SEM (P) = SEM (C (P)) C011
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) PS0 CL0(P)S1 CL0(P),n EL1(CL0(P),n) EL1 RTS CL0 EL0
16
Compilatore: La Macchina di Sviluppo
PS0 CL0(P)S1 CL0(P),n EL1(CL0(P),n) sorgente di L0 oggetto per L1 metalinguaggio EL2 Linguaggio target (object language) EL1 RTS CL0 Macchina Host Macchina Target EL0 C012
17
Gerarchia di Macchine nello sviluppo
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 Sistema Operativo Linguaggio Microporgrammazione 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 19
20
Macchina Intermedia: Costruzioni Miste
L1:Linguaggio target Macchina di L1 interprete compilatore L0:Linguaggio sorgente Macchina di L0 LI:Ling. Intermedio Macchina di LI 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
Contesto del Compilatore: Font-end Back-end Preprocessor Compiler
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
Compilatore: struttura, fasi e passi
Analisi Lessicale Analisi Sintattica Analisi Statica Codice Intermedio Ottimizzazione Codice target Tabella Simboli Errori Fasi e Passi: 6 fasi k(≥1) passi
25
Interprete: La struttura standard
Analisi Lessicale Analisi Sintattica Analisi Statica Emulatore su Codice target Tabella Simboli Errori Fasi e Passi: 4 fasi k(≥1) passi
26
Compilatore: Una struttura per analisi di correttezza avanzate
Analisi Lessicale Analisi Sintattica Analisi Statica Codice Intermedio Ottimizzazione Codice target Tabella Simboli Errori Fasi e Passi: 8 fasi k(≥1) passi Correttezza Terminazione - proprieta’ varie
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: C0tm e C0tn Combiniamo interprete e compilatore
28
Bootstrapping costruiamo un interprete E0m (che valuta programmi di L0 su una macchina Mm): strumento di sviluppo costruiamo compilatore C0t0 : Il compilatore è scritto nel linguaggio L0 stesso. eseguiamo: E0m(C0t0)(C0t0) otteniamo C0tt Bootstrapping (m ≤ t) Il prodotto è ora indipendente dal meta
29
In questo corso Semantica 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
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.