Paradigma Funzionale Paradigma Imperativo: Programma = transizione di stato Paradigma Funzionale: Programma = valutazione di un’espressione La maggior.

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.
Linguaggi a memoria condivisa Lidea è di aggiungere ad un linguaggio imperativo dei costrutti per rappresentare lesecuzione parallela di statements. Supponiamo.
Paradigma Funzionale Paradigma Imperativo: Programma = transizione di stato Paradigma Funzionale: Programma = valutazione di unespressione La maggior parte.
Algoritmi e Programmazione
Differenze nei vari linguaggi di Elisa Trifirò e Barbara Tacchino
1 Semantica Operazionale di un frammento di Java: lo stato.
Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione.
Semantica operazionale
Semantica Operazionale di un frammento di Java: lo stato
Introduzione al linguaggio C
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
Laboratorio di Linguaggi lezione IV Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Introduzione al linguaggio C++ 5 lezioni
-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.
mosaic manipola oggetti primitivi (ruota e unisci) regole:
9) If e else. Lab.Calc.I AA2002/03 - cap.92 espressione.
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.
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
1 Blocchi e ambiente locale in linguaggi funzionali e imperativi.
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.
1 Semantica Operazionale di un frammento di Java: le regole di transizione estensione (con piccole varianti) di quella in FONDAMENTI DI PROGRAMMAZIONE.
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 Progettare un Tipo di Dato Astratto. 2 Scelte di Progetto (astrazione) 4 Caratteristiche degli oggetti –Modificabilità 4 Scelta delle operazioni –Realizzare.
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
LIP: 22 Marzo 2005 Eccezioni. Eccezioni-Richiami Come si definiscono eccezioni Come si lanciano Come si gestiscono (gestione esplicita o di default)
1 Semantica Operazionale di un frammento di Java: lo stato estensione (con piccole varianti) di quella in Barbuti, Mancarella, Turini, Elementi di Semantica.
1 Programmazione Funzionale: ML 1 implementazione del -calcolo tipato l definizione di nuovi tipi ricorsivi l i valori dei nuovi tipi sono termini, che.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
Progetto Parte II OCAML.
1 Semantica Operazionale di un frammento di Java: intro estensione (con piccole varianti) di quella di FP | v |
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.
Eccezioni in Java. Le eccezioni in Java Exception handling: insieme di costrutti e regole sintattiche e semantiche presenti nel linguaggio allo scopo.
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 un’espressione La maggior parte dei linguaggi imperativi ha costrutti applicativi. Esempio: consideriamo la seguente grammatica LF 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.

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 [t1  ...  tn  t] = [[t1]  ...  [tn] P [t]]). Nel seguito useremo Value = tLType(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 Ignoriamo il trattamento di errore (cioè definiamo la semantica statica come funzione parziale) Envs = [LId(LF) P LType(LF) ]Fin [_]sD:LDecs(LF)  Envs  Envs P Envs [_]sE:LExps(LF)  EnvsP LType(LF)+ [_]sP:LProg(LF) P LType(LF) [dl eval e]sP = t [dl]sD([],[]) = r [e]sE (r) = t types(t x;)= t [d dl]sD (rg, rl) = r [d]sD(rg, rl) = rl’ [dl]sD(rg, rl’) = r types(t x; pl)= t tl types(pl)= tl [t x = e;]sD (rg, rl) = rl [t/x] xÏDom(rl) [e]sE(rg[rl]) = t [t f(pl){e}]sD (rg, rl) = rl[lt  t/f] fÏDom(rl) lt = types(pl) [e]sE(rg[rl][rl’]) = t [pl]sPD(rg[rl],[lt  t/f]) = rl’ [t x;]sPD (rg, rl) = rl[t/x] xÏDom(rl) [_]sPD:LPDecs(LF)  Envs  Envs P Envs

Semantica Statica 2 [x]sE (r) = t r(x) = t [f(es)]sD (r) = t [f]sE (r) = lt  t [es]sE (r) = lt [if (b) {e} else {e’}]sE(r) = t [e]sE(r) = t [e’]sE(r) = t [b]sE(r) = bool [e + e’]sE(r) = int [e]sE(r) = int [e’]sE(r) = int 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)))...

Semantica Dinamica (Denotazionale) Le dichiarazioni modificano l’ambiente: [_]Decs:LDecs(LF)  Env  Env dove Env = [LId(LF) P Value]Fin Le espressioni producono un valore: [_]Exps:L Exps(LF)  Env Value+ [dl eval e]P = v [dl]D([]) = r [e]E (r) = v [t x = e;]D (r) = r[v/x] [e]E(r) = v [d dl]D (r) = r” [d]D(r) = r’ [dl]D(r’) = r” [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: Rispetto a LW è sparito lo stato Il valore del parametro attuale è associato direttamente al nome del parametro formale Caso base Regola ad hoc per la chiamata di f F(v) = a [e](r[/f, v/x])= a [f(e)] (r[/f]) = a F(v) = a [e](r[/f]) = v

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 [e1 + e2]E(r) = a [e1]E(r) = v1 [e2]E(r) = v2 v1 + v2 = a Esercizio proposto: dare la semantica dinamica operazionale a piccoli passi (suggerimento: non cercare di individuare i termini che rappresentano valori - per i tipi funzionali non si può fare - ma dare solo la relazione di semplificazione; come configurazioni usare coppie termine+ambiente; un ambiente associa espressioni a identificatori; per gestire le funzioni sarà necessario estendere il linguaggio come nel caso imperativo)