Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.:...

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

Transcript of Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.:...

Page 1: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

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

Page 2: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

Linguaggi, Macchine Astratte, Linguaggi, Macchine Astratte, Interpreti & CompilatoriInterpreti & Compilatori

Page 3: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

linguaggiolinguaggio di (programmazione) =

= formalismo per esprimere (applicazioni di funzioni calcolabili)

formalismoformalismo = sintassisintassi (forma delle costruzioni permesse)+

semanticasemantica (significato loro associato)

Definizioni:Definizioni: linguaggio e formalismolinguaggio e formalismo

Page 4: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

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)

Esempio: Linguaggio di Esempio: Linguaggio di ProgrammazioneProgrammazione

L = <S, SEM><S, SEM> e’ un linguaggio di progr.

[dove: {N N} = funzioni calcolabili]

Page 5: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

Macchina astrattaMacchina astratta = Linguaggio (L=<S,SEM>)

+Esecutore (EL)

Java Virtual MachineLandin’s SECD

EL

Control frame Data-Control Stack

Heap

P EL(P)

Definizioni:Definizioni: Macchina AstrattaMacchina Astratta

Per ogni PS, SEM(P) EL(P)

Page 6: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

P,n SEM(P)(n)

I O

P,n P,n

[dove I,O funzioni iniettive su A e A* risp.]

• LLMM = <S, SEM> è un linguaggio di programmazione• EEMM è un esecutore di applicazioni di programmi• MM = <LMM,EMM>

EMM: A A* per ogni P S, n N

MacchinaMacchina AstrattaAstratta

linguaggiolinguaggioSEM

EEMM

Esempio: Macchina Astratta, Esempio: Macchina Astratta, Linguaggio ed EsecutoreLinguaggio ed Esecutore

Page 7: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

Macchina astratta - EsecutoreMacchina astratta - Esecutore

ProgrammaDati

Memoria

InterpreteCiclo di interpretazione

Op1

Opk

Fetch istruzioneControllo sequenza

Fetch operandiControllo dati

Gestione memoriaModello statico-dinamico

controllo

Macchina Astratta: Struttura e Stati Macchina Astratta: Struttura e Stati dell’Esecutoredell’Esecutore

Page 8: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

Macchina Astratta: Macchina Astratta: Memoria, ControlloMemoria, Controllo

Memoria: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: 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

Page 9: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

start

fetch statement

decodifica

fetch operandi

seleziona

Op1 Opn halt

stop

Macchina Astratta: Macchina Astratta: Interprete - cliclo di interpretazioneInterprete - cliclo di interpretazione

Page 10: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

Utiliziamo macchine astratte gia definite

• Sia L0=(S0,SEM0) il nostro linguaggio• Sia M1= (L1=<S1,SEM1>,EL1

) una macchina

intepreteintepretedefiniamo l’esecutore EL0 come programma di L1.

compilatorecompilatoretrasformiamo ogni struttura (programma) di L0 in una equivalente struttura (programma) di L1.

Costruire Macchine AstratteCostruire Macchine Astratte

Page 11: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

Eseguire una APPLICAZIONE (P,n) di L0, consiste:

nell'eseguire l'applicazione L0 ,(P,n) di L1

L1

P,n SEM(P)(n)

LLOO,(P,n) L1(LO,(P,n))LO

S0

S1

InterpreteInterprete

Page 12: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

Interprete: dentro EInterprete: dentro EL0L0

Una collezione di procedure che realizzano:

• i passi (decodifica) del ciclo di interpretazioneinterpretazione per L0• il modello di memoriamemoria di dati e programmi di L0• l’unità di controllo controllo per fetch di codice e di dati di L0• un implementazione delle primitiveprimitive di L0

Page 13: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

L1

CL0(P)

LO

S0 S1

EL1(CL0,P)CCL0L0,P

P

Il compilatore non opera su applicazioni bensìsu strutture (programmi: P)

CLO preserva la semantica: SEMO(P) = SEM1(CLO(P))

C011

CompilatoreCompilatore

Page 14: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

Compilatore: Compilatore: Il Il Run Time SupportRun Time Support

Una collezione di procedure che realizzano:

• il modello di memoriamemoria di dati e programmi di L0• strutture per trasferimento controllotrasferimento controllo• un’implementazione delle primitiveprimitive di L0

• Non dipende dallo specifico programma compilato• Utilizzabile dall’oggetto di ogni sorgente

Page 15: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

EL1

CLCL00

EL0

EL1(CL0(P),n)CL0(P),nCL0(P)S1

EL0(P,n)

PS0

Compilatore: Compilatore: La Macchina SottostanteLa Macchina Sottostante

RTS

Page 16: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

metalinguaggio

EL2

EL0

Linguaggio target(object language)

EL1

CL0

PS0 CL0(P)S1oggetto per L1sorgente di

L0

Macchina HostMacchina Host

CL0(P),n EL1(CL0(P),n)

Macchina TargetMacchina Target

C012

Compilatore: Compilatore: La La Macchina di SviluppoMacchina di Sviluppo

RTS

Page 17: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

Linguaggio meno espressivo ha: - molti costrutti ma elementari

- un esecutore piú semplice

Quando la macchina target è concretaQuando la macchina target è concreta• nessuna differenza concettuale tra astratta e concreta• abbiamo però un esecutore effettivo per ogni macchina della gerarchia

Gerarchia di MacchineGerarchia di Macchine • riduce ad ogni livello l’espressivitá • semplifica la costruzione della macchina di un linguaggio

molto espressivo

Gerarchia di MacchineGerarchia di Macchinenello svilupponello sviluppo

Page 18: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

Linguaggi di ReteMacchina Rete

Gerarchia di Macchine Gerarchia di Macchine nella strutturanella struttura

Linguaggi di Browser

Macchina WEB

Java BytecodeMacchina Intermedia

Java BytecodeMacchina Intermedia

Linguaggio di SistemaSistema Operativo

Linguaggio di SistemaSistema Operativo

Linguaggio MicroporgrammazioneFirmware

Linguaggio MicroporgrammazioneFirmware

Linguaggio MacchinaHardware

Linguaggio MacchinaHardware

JavaMacchina Java

ScalaMacchina Scala

Page 19: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

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

Classi di Macchine ConcreteClassi di Macchine Concrete

Page 20: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

Macchina Intermedia: Macchina Intermedia: Costruzioni MisteCostruzioni Miste

L1:Linguaggio targetMacchina di L1

interprete

compilatore

L0:Linguaggio sorgenteMacchina di L0

LI:Ling. IntermedioMacchina di LI

Vantaggi:• sviluppo ridotto• portabilità aumentata• dimensione c. oggetto:

• occ. memoria• tempo esecuzione

Page 21: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

Compilatore, Interprete:Compilatore, Interprete:contesto, struttura componenticontesto, 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

Page 22: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

Compilatore, Interprete:Compilatore, Interprete:contesto, struttura componenticontesto, 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

Page 23: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

Preprocessor

Compiler

Assembler

Link-Loader

Source program

Object program

Codice rilocabile

Assoluto eseguibile

Link e macros

Librerierts

Struttura dei moduli

Contesto delCompilatore:Font-endBack-end

Page 24: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

Analisi Lessicale

Analisi Sintattica

Analisi Statica

Codice Intermedio

Ottimizzazione

Codice target

Tabella Simboli

Errori

Fasi e Passi: 6 fasi k(≥1) passi

Compilatore: struttura, fasi e passiCompilatore: struttura, fasi e passi

Page 25: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

Analisi Lessicale

Analisi Sintattica

Analisi Statica

Emulatore su Codice target

Tabella Simboli

Errori

Fasi e Passi: 4 fasi k(≥1) passi

Interprete: La struttura standardInterprete: La struttura standard

Page 26: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

Analisi Lessicale

Analisi Sintattica

Analisi Statica

Codice Intermedio

Ottimizzazione

Codice target

Tabella Simboli

Errori

Fasi e Passi: 8 fasi k(≥1) passi

Codice Intermedio

CorrettezzaTerminazione - proprieta’ varie

Compilatore: Una struttura per Compilatore: Una struttura per analisi di correttezza avanzateanalisi di correttezza avanzate

Page 27: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

Lo sviluppo di un compilatore (interprete), da un linguaggio L0 a Lt, coinvolge altri linguaggi Lm.

Distinguere tra: C0tm e C0tn

I metalinguaggi sono utilizzati per esprimere le procedure di analisi e traduzione, e condizionano il compilatore che può essere eseguito solo sul meta scelto

Combiniamo interprete e compilatore

Compiler-Compiler: ridurre i Compiler-Compiler: ridurre i metalinguaggi e semplificare la metalinguaggi e semplificare la

stesura di un compilatorestesura di un compilatore

Page 28: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

• costruiamo un interprete EE00mm (che valuta programmi di L0

su una macchina Mm): strumento di sviluppo

• costruiamo compilatore CC00tt00 : Il compilatore è scritto nel linguaggio L0 stesso.

• eseguiamo: EE00mm(C(C00tt00)(C)(C00tt00)) otteniamo CC00tttt

Il prodotto è ora indipendente dal meta

Bootstrapping (m ≤ t)

BootstrappingBootstrapping

Page 29: Generalità Linguaggio e Macchina Astratta M.A.: struttura e stati dellesecutore Costruire M.A.: Interprete, Compilatore Interprete: dentro Compilatore:

In questo corsoIn questo corso

Semantica formale e RTSSemantica formale e RTS• Linguaggi studiati da 2 punti di vista:

• Semantica formaleSemantica formale• RTS: supporto a run timeRTS: supporto a run time

• Semantica FormaleSemantica 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

• RTSRTS• 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