Generalità Linguaggio e Macchina Astratta

Slides:



Advertisements
Presentazioni simili
Linguaggio C e C++.
Advertisements

I Linguaggi di programmazione
Traduzione ed Interpretazione
Macchine Astratte (anche dette Macchine Virtuali)
Software di base: Linguaggi di Programmazione
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità A1 Introduzione a Java.
Classe III A A.s – 2011 Sistemi di Elaborazione e Trasmissione dell’Informazione 4 ore settimanali (2 laboratorio) Docenti Prof. Alberto Ferrari.
Dalla scrittura all’esecuzione
Evoluzione dei linguaggi di programmazione
I linguaggi di programmazione
Sintassi (prima parte)
Definizione e tipi di implementazione
Linguaggi di programmazione
Programmazione e Laboratorio di Programmazione – Luca Tesei1 La Programmazione Cosè la programmazione? Concetti preliminari.
Type Checking (1° parte)
Algoritmi e Programmazione
Massa Laura Mela Enrica
Programmazione II Docente: Francesca Levi
1 Strutture dati nel supporto a run time. 2 Entità presenti quando un programma va in esecuzione §programmi dutente (compilati) §routines del supporto.
1 Metodologie di Programmazione. 2 Contenuto generale §tecniche per la programmazione orientata ad oggetti (in piccolo) §esemplificate utilizzando il.
Dr. Francesco Fabozzi Corso di Informatica
Programmazione Procedurale in Linguaggio C++
Semantiche dei linguaggi di programmazione
TRADUZIONE DEL PROGRAMMA Una volta che un programma sia stato scritto in C, esso non può essere eseguito senza unulteriore traduzione. Ciò perché qualsiasi.
Reti Logiche e Architettura dei Calcolatori Luciano Gualà home page
Informatica di base A.A. 2003/2004 Algoritmi e programmi
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
Introduzione al linguaggio Java
Eliana minicozzi linguaggi L1 Lezione3.
Programmazione Un programma descrive al computer, in estremo dettaglio, la sequenza di passi necessari a svolgere un particolare compito L’attività di.
Struttura dei sistemi operativi (panoramica)
I linguaggi di alto livello
CAPITOLO 2 INTRODUZIONE AL LINGUAGGIO JAVA E ALL'AMBIENTE HOTJAVA.
Unità Didattica 2 I Linguaggi di Programmazione
memoria gestita staticamente:
Fondamenti di Informatica1 Software di base Tra il linguaggio macchina (basso livello) e i linguaggi evoluti (alto livello) esiste uno strato di software.
1 Programmazione = decomposizione basata su astrazioni (con riferimento a Java)
Java Contardi Carlo A.S. 2008/09.
Lezione 1 Linguaggi di programmazione – Algoritmi –Istruzioni
Lo sviluppo del software e i linguaggi di programmazione
Macchine astratte, linguaggi, interpretazione, compilazione
Implementazione di un linguaggio ad alto livello (con riferimento a Java)
Si dica in quale modo la trasformazione di Thompson, TF, può essere considerata come definente un compilatore. In particolare, si dica: –a) chi sono il.
la traduzione dei programmi
Calcolatori Elettronici Il Processore
1 Osservazioni Generali Struttura di programma Gerarchia di classi: overloading, overriding, e dispatching Analisi ed esecuzione Modificabilità e condivisione.
Informatica Lezione 5 Scienze e tecniche psicologiche dello sviluppo e dell'educazione (laurea triennale) Anno accademico:
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
TW Asp - Active Server Pages Nicola Gessa. TW Nicola Gessa Introduzione n Con l’acronimo ASP (Active Server Pages) si identifica NON un linguaggio di.
Scrivere e compilare programmi
Linguaggi di Programmazione
Programmazione Attività di progettazione ed implementazione di programmi I programmi permettono di realizzare funzioni complesse su un hardware in grado.
Elementi di semantica denotazionale ed operazionale
Concetti Fondamentali sulla Programmazione
1 Macchine astratte, linguaggi, interpretazione, compilazione.
1 Linguaggi: guardando la semantica §esistono un insieme di concetti semantici e di strutture di implementazione in termini dei quali si descrivono in.
1 Metodologie di Programmazione = decomposizione basata su astrazioni.
Classi ed Oggetti in Java (Cenni). Richiami Cenni sull’ Implementazione, Macchine Astratte, Compilatore, Interprete Ruolo delle Classi in Java Oggetti.
1 Informatica Generale Marzia Buscemi Ricevimento: Giovedì ore , Dipartimento di Informatica, stanza 306-PS o per posta.
Il software Claudia Raibulet
I linguaggi di alto livello
Programmazione orientata agli Oggetti Introduzione a Java.
Parsing ricorsivo discendente Il parsing ricorsivo discendente (recursive descent parsing) è un metodo di tipo top-down che può essere facilmente codificato.
Unità di apprendimento 6
ALGORITMI, LINGUAGGI E PROGRAMMI Facoltà di Lingue e Letterature Straniere Corso di laurea in Relazioni Pubbliche.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

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

Linguaggi, Macchine Astratte, Interpreti & Compilatori

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

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]

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

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

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

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

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

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.

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

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

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

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

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

Compilatore: La Macchina di Sviluppo PS0 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 C012

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

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

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

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

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

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

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

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

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

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

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m e C0tn Combiniamo interprete e compilatore

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

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