Semantica dinamica Vogliamo definire una funzione che associ ad ogni termine corretto del mio linguaggio di programmazione un valore. Questa associazione.

Slides:



Advertisements
Presentazioni simili
LIMITI:DEFINIZIONI E TEOREMI
Advertisements

Definitezza Vogliamo poter richiedere la “definitezza” delle funzioni
RICORSIONE: DEFINIZIONI RICORSIVE
Conseguenza semantica
SPECIFICA INIZIALE DELLE MAPPE FINITE v. 0.0 Gianna Reggio
Sintassi (prima parte)
Traduzione guidata dalla sintassi
Specifiche Algebriche
Algebra parziale con predicati
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)
SPECIFICA LOOSE DELLE MAPPE FINITE v. 1.1 Gianna Reggio
Specifiche Algebriche Modello Iniziale Versione 1.0 Gianna Reggio
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.
Generazione di Codice Intermedio
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
1 Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone
Interpretazione Astratta
Intelligenza Artificiale 1 Gestione della conoscenza lezione 7 Prof. M.T. PAZIENZA a.a
Sistemi basati su conoscenza Conoscenza e ragionamento Prof. M.T. PAZIENZA a.a
Analisi e sintesi di circuiti combinatori
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Capitolo 1 Unintroduzione.
CORSO DI PROGRAMMAZIONE II Introduzione alla ricorsione
Modelli simulativi per le Scienze Cognitive
-calcolo Vogliamo studiare le problematiche relative al meccanismo di chiamata di funzione (eg differenze fra binding statico e dinamico) in isolamento.
Specifiche Specifiche = descrizione delle caratteristiche di un prodotto Esempio non informatico: la specifica di un detersivo è data da quale quantità.
Semantica denotazionale algebrica di LW Idea intuitiva: i valori che vogliamo denotare sono: gli statements sono funzioni di trasformazioni di stato (interno)
1 Implementazione di Linguaggi 2 Massimo Ancona DISI Università di Genova Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools,
SPECIFICA DELLE MAPPE FINITE Gianna Reggio
Semantica Operazionale Strutturata
Semantica di Tarski.
mosaic manipola oggetti primitivi (ruota e unisci) regole:
Notazioni Asintotiche e Ordini di Grandezza delle funzioni
Corso di Matematica Discreta I Anno
Corso di Matematica Discreta cont. 2
INSIEMI NUMERABILI L’analisi matematica introduce il concetto di insieme numerabile come insieme i cui elementi possono essere “contati” ossia che possiede.
LINGUAGGI DI PROGRAMMAZIONE
Lezione 9 Invarianze e leggi di conservazione: definizioni generali
Linguaggi e Modelli Computazionali LS - Prof E.Denti
Lo sviluppo del software e i linguaggi di programmazione
SINTASSI.
La scomposizione col metodo di Ruffini
Intelligenza Artificiale 1 Gestione della conoscenza lezione 19 Prof. M.T. PAZIENZA a.a
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
© Piero Demichelis Tipi strutturati I tipi considerati finora hanno la caratteristica comune di non essere strutturati: ogni elemento è una singola entità.
1 Un po’ di ripasso di algebra §necessaria per discutere la semantica denotazionale l e da riprendere quando parleremo di interpretazione astratta §reticoli.
Nucleo di Java: Struttura e Semantica Espressioni Assegnamento Controllo di sequenza Dichiarazioni.
1 Ordinamento (Sorting) INPUT: Sequenza di n numeri OUTPUT: Permutazione π = tale che a 1 ’  a 2 ’  … …  a n ’ Continuiamo a discutere il problema dell’ordinamento:
Automi a pila (1) Un automa a pila (PDA) è M = (Q, S, G, d, q0, Z0, F) dove: Q insieme finito di stati S alfabeto finito di input 3. G alfabeto di pila.
Sistemi basati su conoscenza Linguaggio naturale: semantica Prof. M.T. PAZIENZA a.a
Grammatiche Grammatiche libere da contesto Grammatiche regolari
public class volume { public static void main (String[] args) { final double bott_vol =2.0; final double latt_vol = 0.355; int bott_num = 4; int latt_num.
Grammatiche non contestuali (1)
Rappresentazione in virgola mobile (floating-point) Permette di rappresentare numeri con ordini di grandezza molto differenti utilizzando per la rappresentazione.
1 Ordinamento (Sorting) Input: Sequenza di n numeri Output: Permutazione π = tale che: a i 1  a i 2  ……  a i n Continuiamo a discutere il problema dell’ordinamento:
Codici prefissi Un codice prefisso è un codice in cui nessuna parola codice è prefisso (parte iniziale) di un’altra Ogni codice a lunghezza fissa è ovviamente.
La codifica dei numeri.
Problemi, algoritmi e programmazione
Analisi matematica Introduzione ai limiti
La numerazione ottale. Il sistema di numerazione ottale ha ampio utilizzo in informatica E’ un sistema di numerazione posizionale La base è 8 Il sistema.
Linguaggi e Grammatiche Alfabeto : insieme non vuoto di elementi detti simboli A = { a, b, c } Stringa : sequenza di simboli di un alfabeto ab abc abcab.
Linguaggi, stringhe e alfabeti. Linguaggi e grammatiche Un linguaggio è un sistema di comunicazione tra persone che permette di trasmettere informazioni.
Parsing ricorsivo discendente Il parsing ricorsivo discendente (recursive descent parsing) è un metodo di tipo top-down che può essere facilmente codificato.
Esponenziali e Logaritmi
Semantica dinamica Vogliamo definire una funzione che associ ad ogni termine corretto del mio linguaggio di programmazione un valore. Questa associazione.
Esercitazione guidata 1
Transcript della presentazione:

Semantica dinamica Vogliamo definire una funzione che associ ad ogni termine corretto del mio linguaggio di programmazione un valore. Questa associazione deve essere descritta in modo composizionale, cioè il valore corrispondente ad ogni termine deve essere determinato sulla base dei valori corrispondenti ai suoi sottotermini (e del costruttore esterno) Per poter fare questo, ogni termine deve essere scomponibile in maniera unica. Ci sono varie scelte possibili per ottenere questo: Usare grammatiche non ambigue Usare non i termini ma una rappresentazione non ambigua, ad esempio l’algebra dei termini (algebra iniziale, modello assolutamente libero…) In realtà l’unicità della scomposizione è una proprietà sufficiente ma non necessaria, basta infatti usare grammatiche semanticamente non ambigue (ad esempio Exp::= Num | Exp + Exp va bene, ma Exp::= Num | Exp + Exp |Exp *Exp no)

Grammatiche ed algebre (riassunto da LP) Data una grammatica G = (T,N,Pr), le si può associare una segnatura  G =(S,Op) S= N è l’insieme dei non terminali di G Op consiste di un’operazione per ogni produzione di G: l’operazione corrispondente alla produzione  ::= str, dove str =w 0  1 w 1  2...  n w n con  i  N e w i  T* avrà arità  1   2 ...   n   e sarà indicata dal simbolo f  ::= str Siccome a noi interessa solo la struttura algebrica e non i nomi usati per tipi e operazioni, useremo la sintassi astratta, cioè la classe di isomorfismo di  G

f :  Fdec Metodo pratico per determinare  G Il problema è trovare le operazioni (i tipi sono banalmente i non terminali) Supponiamo di dover trovare il tipaggio dell’operazione f corrispondente alla produzione Fdec ::= Type Id(PDecs) {Stats result Exp}Type Id(PDecs) {Stats result Exp} f : Type  Id  PDecs  Stats  Exp  Fdec Si evidenziano i non terminali presenti nella parte destra della produzione Il tipo restituito dall’operazione sarà quello a sinistra della produzione Fdec Si riportano tali non terminali come argomenti (separati da  )

Algebre su  G Algebre iniziali (o dei termini, o assolutamente libere) Per noi sono interessanti perché ogni loro elemento è ottenuto in modo unico per applicazione successiva delle operazioni della segnatura. Sono quindi candidati ideali per la definizione della semantica, perché non presentano problemi di ambiguità. Per ciascuna algebra A sulla stessa segnatura esiste un unico omomorfismo !A dall’algebra iniziale in A. Sono quindi tutte isomorfe fra loro. Un rappresentante canonico è la seguente algebra T  G I suoi carrier sono definiti induttivamente dalle seguenti regole, una per ciascuna operazione f : s 1 ...  s n  s t 1 : s 1 … t n : s n t1t1 tntn f... : s Albero La base è data dalle operazioni costanti che a loro volta derivano da produzioni la cui parte destra non contiene non terminali A ciascuna operazione f : s 1 ...  s n  s corrisponde una funzione f T  G : s 1 T  G ...  s n T  G  s T  G definita da a1a1 anan f... f T  G (a 1, …,a n ) =

Algebre su  G Algebre sintattiche hanno come carriers il linguaggio definito dalla grammatica. L’algebra L G è definita da Il suo carrier di tipo s è proprio il linguaggio di tipo s, cioè s L G = L s (G) A ciascuna operazione f : s1 s1 ...  sn sn s, relativa alla produzione s::= w 0 s 1 w 1 s 2... s n w n corrisponde la funzione fLG fLG : s1LG s1LG ...  snLG snLG sLGsLG definita da fLG fLG (a 1, …,a n ) = w 0 a 1 w 1 a 2... a n wnwn a1a1 anan f... f T  G (a 1, …,a n ) L G è ben definita? Com’è definito ! L G : T  G  L G l’unico omomorfismo? ! L Gs ( ) = f L G (! L Gs1 ( a 1 ), …, ! L Gsn ( a n )) Unica possibilità se vogliamo che ! L G ={ ! L Gs : s T  G  s L G } sia un omomorfismo Generico elemento di s T  G

uv Esercizio induttivo Provare che data una grammatica G, avente una produzione pr s ::= w 0 s 1 w 1 s 2... s n w n se a i  L s i (G), allora w 0 a 1 w 1 a 2... a n w n  L s (G) Proviamo per induzione aritmetica su i  N che s j  * a j per j  [1,i] implica s  * w 0 a 1 w 1 a 2... w i-1 a i w i s i+1... s n w n Base i=0. Per definizione di riscrittura ad un passo s  w 0 s 1 w 1 s 2... s n w n da cui s  * w 0 s 1 w 1 s 2... s n w n Passo induttivo. Sia vero che s j  * a j per j  [1,i+1], allora s j  * a j per j  [1,i] e quindi per ipotesi induttiva che s  * w 0 a 1 w 1 a 2... w i-1 a i w i s i+1... s n w n Sappiamo quindi che s  * u s i+1 v basta provare che s i+1  * a i+1 implica u s i+1 v  * u a i+1 v e per transitività otterremo s  * u a i+1 v, che è la tesi Anche questo lemma si prova per induzione aritmetica, sul numero k di passi necessari per provare che s i+1  * a i+1 Base k=0. Cioè a i+1 =s i+1 ; per riflessività, u s i+1 v  * u s i+1 v Passo induttivo. Sia vero che s i+1  * a i+1 in k passi implica u s i+1 v  * u a i+1 v e supponiamo che s i+1  * a’ i+1 in k+1 passi. Allora avremo s i+1  * a i+1 in k passi e a i+1  a’ i+1. Quindi u s i+1 v  * u a i+1 v. Per definizione di riscrittura ad un passo, a i+1  a’ i+1 implica che esistono ,  (T  N)* ed una produzione s’::=w t.c. a i+1 =  s’  e a’ i+1 =  w . Allora u  s’  v = u a i+1 v  u a’ i+1 v = u  w  v da cui per transitività si conclude

Semantica In questo contesto, dare la semantica di un linguaggio diventa fissare un’algebra (quella semantica) ed avere come semantica l’unico omomorfismo dall’algebra iniziale in quella semantica. Quasi. In realtà ci sono 3 punti non immediati L’algebra della semantica per i linguaggi di programmazione è spesso parziale, cioè l’interpretazione delle operazioni sono funzioni parziali (questo problema lo aggireremo) Noi vogliamo associare un valore ad una stringa del linguaggio, quindi ci servirà una funzione che mappi il linguaggio sull’algebra iniziale Siccome siamo più interessati alla funzione semantica che all’algebra, spesso si descrivono direttamente le clausole della semantica e si deducono carrier ed operazioni dell’algebra semantica in modo che la funzione definita sia un omomorfismo

Algebra iniziale Linguaggio Algebra semantica ! L G TGTG A !A Parte staticamente corretta Tecniche di disambiguazione LGLG Vogliamo definire questa freccia