Paradigma Funzionale Paradigma Imperativo: Programma = transizione di stato Paradigma Funzionale: Programma = valutazione di unespressione La maggior parte.

Slides:



Advertisements
Presentazioni simili
Sintassi (prima parte)
Advertisements

Linguaggi di programmazione
Esercitazione guidata 1
Semantica di linguaggi di programmazione Ne esistono differenti stili a seconda di paradigma di programmazione uso (validazione, prototyping, verifica.
Type Checking (1° parte)
SOS a piccoli passi Invece di semplificare sempre in configurazioni finali, fattorizziamo in passi più piccoli (da cui il nome). In questo modo la non.
Paradigma Funzionale Paradigma Imperativo: Programma = transizione di stato Paradigma Funzionale: Programma = valutazione di un’espressione La maggior.
Linguaggi a memoria condivisa Lidea è di aggiungere ad un linguaggio imperativo dei costrutti per rappresentare lesecuzione parallela di statements. Supponiamo.
Algoritmi e Programmazione
1 Semantica Operazionale di un frammento di Java: lo stato.
Semantica operazionale
Semantica Operazionale di un frammento di Java: lo stato
Introduzione al linguaggio C
Lez. 41 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Programmazione.
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
1 Class Analyses as Abstract Interpretations of Trace Semantics Tratto da un testo di: Fausto Spoto & Thomas Jensen Brigo Matteo Vitturi Mattia.
Semantica Denotazionale
Semantica Denotazionale
Dispatch.
Laboratorio di Linguaggi lezione IV Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Fondamenti di Informatica I a.a Il linguaggio C Il controllo di flusso La selezione condizionale Listruzione switch I cicli Le istruzioni break,
Criteri di classificazione Filosofici: Empiriste (metafora della tavola di cera) Esperienza>mente>sistema di conoscenza>comportamento Razionaliste.
-calcolo Vogliamo studiare le problematiche relative al meccanismo di chiamata di funzione (eg differenze fra binding statico e dinamico) in isolamento.
Semantica denotazionale algebrica di LW Idea intuitiva: i valori che vogliamo denotare sono: gli statements sono funzioni di trasformazioni di stato (interno)
Semantica Operazionale Strutturata
Procedure e funzioni nei linguaggi di alto livello Lab Programmazione - turno /2006.
nome: sequenza di caratteri usata per denotare un oggetto
mosaic manipola oggetti primitivi (ruota e unisci) regole:
9) If e else. Lab.Calc.I AA2002/03 - cap.92 espressione.
Istruzioni di selezione (If/else/switch)
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Le funzioni.
Le funzioni a tempo di esecuzione
AN FI Un denominatoe comune Comandi u notazioni che esprimono azioni che, una volta eseguite, comportano una modifica permanente dello stato interno.
AN FI Un denominatoe comune Lo stile funzionale Concetti fondamentali.
Ereditarietà e Polimorfismo
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
Sintassi base e struttura di un programma
2000 Prentice Hall, Inc. All rights reserved. Attivazione di funzioni La chiamata/attivazione di funzione viene indicata citando il nome della funzione.
Attività progettuale in Linguaggi e Modelli Computazionali M
I metodi F. Bombi Campi e metodi Abbiamo visto che una classe può contenere – Campi – Metodi stato I campi sono utilizzati per memorizzare.
Astrazione procedurale ed eccezioni
Sintassi: Programma e classi Program::=prog {ClassDeclList {StatList}} ClassDeclList::=ClassDecl ClassDeclList |  ClassDecl::=class Ide c [StaticMetDefList]
1 Tecniche per il passaggio dei parametri. 2 Contenuti ¥la tecnica base (nei vari paradigmi) ¥ passaggio per costante, per riferimento, di funzioni, procedure.
1 Implementazione di (ambiente e) memoria nel linguaggio imperativo.
Un interprete astratto per l’inferenza dei tipi
Introduzione a Javascript
1 Blocchi e ambiente locale in linguaggi funzionali e imperativi.
Flusso Statico e Dinamico 20/03/2006. Codice da Interpretare int valore; valore = funz(); if( valore > 0 ) { [codice1] } else { [codice2] } return valore;
Variabili Numeriche –Interi (byte, short, int, long): complemento a 2 –A virgola mobile (float, double): IEEE 745 Alfanumeriche –Carattere (char): Unicode.
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
Classi: class Foo { public int x; public int y; public void swap (boolean z) { if (z) {int temp = x; x = y; y = temp;}; }; } Ambienti per le classi: Cenv.
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
1 Controllo di sequenza: espressioni e comandi. 2 Contenuti ¥espressioni pure (senza blocchi e funzioni) ¥ regola di valutazione, operazioni strette e.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Nucleo di Java: Struttura e Semantica Espressioni Assegnamento Controllo di sequenza Dichiarazioni.
1 Progettazione dettagliata di un Tipo di Dato Astratto: l’ambiente di metodi.
Semantica dinamica Vogliamo definire una funzione che associ ad ogni termine corretto del mio linguaggio di programmazione un valore. Questa associazione.
Lo stato  I domini della semantica restano invariati: Ide, Val (Int  { ,  }) Loc (locazioni di memoria), FunctDecl. ma definiamo 2 funzioni: Loc :
1 Semantica Operazionale di un frammento di Java: le regole di transizione estensione (con piccole varianti) di quella in Barbuti, Mancarella, Turini,
1 Semantica Operazionale di un frammento di Java: le regole di transizione estensione (con piccole varianti) di quella in Barbuti, Mancarella, Turini,
Elementi di semantica denotazionale ed operazionale
1 Programmazione Funzionale: ML 1 implementazione del -calcolo tipato l definizione di nuovi tipi ricorsivi l i valori dei nuovi tipi sono termini, che.
1 Tipi di dato modificabili §a livello semantico, riconduciamo la modificabilità alla nozione di variabile l lo stato “modificabile” corrispondente sarà.
Cloud informatica V anno. Introduzione a PHP Lo scripting PHP PHP è un linguaggio di scripting lato server. Le caratteristiche di un linguaggio di scripting.
Il C `e un linguaggio di programmazione di uso generale, originariamente sviluppato per la scrittura del sistema operativo Unix, ed oggi disponibile su.
13. Strutture dati dinamiche Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Semantica denotazionale algebrica di LW
Esercitazione guidata 1
Transcript della presentazione:

Paradigma Funzionale Paradigma Imperativo: Programma = transizione di stato Paradigma Funzionale: Programma = valutazione di unespressione La maggior parte dei linguaggi imperativi ha costrutti applicativi. Prog::=Decs eval Exp. Decs::=Dec | Dec Decs. Dec::=CDec | FDec. CDec::=Type Id = Exp;. FDec::=Type Id(PDecs) {Exp}. PDecs::=PDec | PDec PDecs. PDec::=Type Id; Type::=int | bool | Types Type Types::=Type | Type Types Exp::=Id | Id(Exps) | Exp + Exp | … if (Exp) {Exp} else {Exp}. Exps ::=Exp | Exp, Exps. Esempio: consideriamo la seguente grammatica LF

Confronto con LW I costrutti di LF sono in gran parte simili a quelli di LW. Rispetto a LW, una (grossa) differenza è che oltre ai tipi base, compaiono dei tipi funzionali o higher-order. Quindi LF è un linguaggio per manipolare valori che possono essere base ( [int] = Z, [bool] = B ) o funzionali (definiti induttivamente da [t 1... t n t] = [ [t 1 ]... [t n ] P [t] ] ). Nel seguito useremo Value = t L Type (LF) [t]. I tipi higher-order sono cittadini di prima classe, cioè possono comparire in tutti i contesti in cui può comparire un tipo base (eg come argomenti e risultati di funzioni). Principale differenza con linguaggi funzionali reali: manca il polimorfismo e i tipi sono dichiarati invece che dedotti. La semantica di LF sarà molto simile a quella di LW, ma, non essendo necessaria la nozione di stato, tutto si semplificherà.

Semantica Statica Env s = [L Id (LF) P L Type (LF) ] Fin Ignoriamo il trattamento di errore (cioè definiamo la semantica statica come funzione parziale) [_] s D :L Decs (LF) Env s Env s P Env s [_] s E :L Exps (LF) Env s P L Type (LF) + [_] s P :L Prog (LF) P L Type (LF) [dl eval e] s P = t [dl] s D ([],[]) = [e] s E ( ) = t [d dl] s D ( g, l ) = [d] s D ( g, l ) = l [dl] s D ( g, l ) = [t x = e;] s D ( g, l ) = l [t/x] x Dom( l ) [e] s E ( g [ l ]) = t [t f(pl){e}] s D ( g, l ) = l [lt t/f] f Dom( l ) lt = types(pl) [e] s E ( g [ l ][ l ]) = t[pl] s PD ( g [ l ],[lt t/f]) = l types(t x; pl)= t tl types(pl)= tl types(t x;)= t [t x;] s PD ( g, l ) = l [t/x] x Dom( l ) [_] s PD :L PDecs (LF) Env s Env s P Env s

Semantica Statica 2 [x] s E ( ) = t (x) = t [f(es)] s D ( ) = t [f] s E ( ) = lt t[es] s E ( ) = lt [if (b) {e} else {e}] s E ( ) = t [e] s E ( ) = t [b] s E ( ) = bool Esercizio proposto: aggiungere altri costrutti base al linguaggio, ad esempio costrutti per la funzione identica, composizione di funzioni, tipi prodotto, pairing (se f: A B e g: C D, allora (f,g): A C B D è definita da (f,g)(a,c) = (f(a),g(b)))... [e + e] s E ( ) = int [e] s E ( ) = int

Semantica Dinamica (Denotazionale) [dl eval e] P = v [dl] D ([]) = r[e] E (r) = v [d dl] D (r) = r [d] D (r) = r[dl] D (r) = r [t x = e;] D (r) = r[v/x] [e] E (r) = v Le dichiarazioni modificano lambiente: [_] Decs :L Decs (LF) Env Env dove Env = [L Id (LF) P Value] Fin Le espressioni producono un valore: [_] Exps :L Exps (LF) Env Value + [RT f(T x) {e}] D (r) = r[F/f] Dove F : [T] [RT] è definita induttivamente da tutte le regole della semantica più le seguenti due: [f(e)] (r[ /f]) = a F(v) = a[e](r[ /f]) = v Caso baseRegola ad hoc per la chiamata di f F(v) = a [e](r[ /f, v/x] ) = a Rispetto a LW è sparito lo stato Il valore del parametro attuale è associato direttamente al nome del parametro formale

Semantica Dinamica (2) [e es] E (r) = v lv [e] E (r) = v[es] E (r) = lv [x] E (r) = r(x) [f(es)] E (r) = r(f)(lv) [es] E (r) = lv v 1 + v 2 = a [e 1 + e 2 ] E (r) = a [e 1 ] E (r) = v 1 [e 2 ] E (r) = v 2