semantiche dei linguaggi di programmazione. tino cortesianalisi e verifica di programmi 2 a cosa...
TRANSCRIPT
![Page 1: Semantiche dei linguaggi di programmazione. Tino CortesiAnalisi e Verifica di Programmi 2 A cosa serve la semantica di un linguaggio? 1. Uno standard](https://reader035.vdocuments.site/reader035/viewer/2022081602/5542eb4e497959361e8bddff/html5/thumbnails/1.jpg)
Semantiche dei linguaggi di programmazione
![Page 2: Semantiche dei linguaggi di programmazione. Tino CortesiAnalisi e Verifica di Programmi 2 A cosa serve la semantica di un linguaggio? 1. Uno standard](https://reader035.vdocuments.site/reader035/viewer/2022081602/5542eb4e497959361e8bddff/html5/thumbnails/2.jpg)
Tino Cortesi Analisi e Verifica di Programmi 2
A cosa serve la semantica di un
linguaggio? 1. Uno standard preciso per l’implementazione del linguaggio
(generazione di compilatori): Come puo’ essere implementato il linguaggio in diverse macchine?
2. Documentazione per l’utente:Qual’e’ il significato di un programma, data una particolare combinazione dei costrutti linguistici supportati?
3. Uno strumento per la progettazione e l’analisi:Come puo essere sintonizzata la definizione del linguaggio in modo che possa essere implementata in modo efficiente?
![Page 3: Semantiche dei linguaggi di programmazione. Tino CortesiAnalisi e Verifica di Programmi 2 A cosa serve la semantica di un linguaggio? 1. Uno standard](https://reader035.vdocuments.site/reader035/viewer/2022081602/5542eb4e497959361e8bddff/html5/thumbnails/3.jpg)
Tino Cortesi Analisi e Verifica di Programmi 3
Metodi per specificare la semantica
Semantica Operazionale:[[ program ]] = programma per una macchina astrattaSemplice da implementareDifficile ragionarci sopra
Semantica Denotazionale:[[ program ]] = denotazione matematica (una funzione)Facilita il ragionarci sopraNon sempre e’ facile trovare domini semantici appropriati
![Page 4: Semantiche dei linguaggi di programmazione. Tino CortesiAnalisi e Verifica di Programmi 2 A cosa serve la semantica di un linguaggio? 1. Uno standard](https://reader035.vdocuments.site/reader035/viewer/2022081602/5542eb4e497959361e8bddff/html5/thumbnails/4.jpg)
Tino Cortesi Analisi e Verifica di Programmi 4
Metodi per specificare la semantica
Semantica Assiomatica:[[ programma ]] = insieme di proprieta’ Utile per provare teoremi sui programmiDistante dalla implementazione
Structured Operational Semantics:[[ programma ]] = transition system (regole di inferenza)Utile per concorrenza e non determinismoDifficile ragionare sull’equivalenza
![Page 5: Semantiche dei linguaggi di programmazione. Tino CortesiAnalisi e Verifica di Programmi 2 A cosa serve la semantica di un linguaggio? 1. Uno standard](https://reader035.vdocuments.site/reader035/viewer/2022081602/5542eb4e497959361e8bddff/html5/thumbnails/5.jpg)
Tino Cortesi Analisi e Verifica di Programmi 5
Metodi per specificare la semantica
Semantica DenotazionaleDefinisce un modello, una astrazione, una interpretazione
for the language designers
Semantica AssiomaticaCostruisce una teoria logica
for the programmers
Semantica OperazionaleCostruisce un interprete o una rappresentazione finita
for the language implementors
![Page 6: Semantiche dei linguaggi di programmazione. Tino CortesiAnalisi e Verifica di Programmi 2 A cosa serve la semantica di un linguaggio? 1. Uno standard](https://reader035.vdocuments.site/reader035/viewer/2022081602/5542eb4e497959361e8bddff/html5/thumbnails/6.jpg)
Tino Cortesi Analisi e Verifica di Programmi 6
Esempio di semantica operazionale
Il comando C for ( expr1; expr2; expr3 ){ • • • }
viene espresso come:
Basata su linguaggi di livello inferiore, non su matematica o logica
expr1;loop: if expr2 = 0 goto out • • • exp3; goto loopout: • • •
![Page 7: Semantiche dei linguaggi di programmazione. Tino CortesiAnalisi e Verifica di Programmi 2 A cosa serve la semantica di un linguaggio? 1. Uno standard](https://reader035.vdocuments.site/reader035/viewer/2022081602/5542eb4e497959361e8bddff/html5/thumbnails/7.jpg)
Tino Cortesi Analisi e Verifica di Programmi 7
Esempio di semantica assiomatica
Notazione: {P} S {Q}P preconditonS comandoQ postcondition
EsempioTrova la weakest precondition P per: {P} a = b + 1 {a > 1}
Una possibile precondition: {b > 10}
Weakest precondition: {b > 0}
![Page 8: Semantiche dei linguaggi di programmazione. Tino CortesiAnalisi e Verifica di Programmi 2 A cosa serve la semantica di un linguaggio? 1. Uno standard](https://reader035.vdocuments.site/reader035/viewer/2022081602/5542eb4e497959361e8bddff/html5/thumbnails/8.jpg)
Tino Cortesi Analisi e Verifica di Programmi 8
Esempio: Comando di assegnamento
Sia x=E un generico comando di assegnamentoIn questo caso la semantcia dell’assegnamento e` data da un unico assioma:
{Q x E} x = E {Q}La weakest precondition P viene data da Q x E
In altre parole, P si ottiene dalla proprieta` Q sostituendo tutte le occorrenze di x con l’espressione E
Ad esempio, {?} a = a + b – 3 {a > 10}Sostuituisce tutte le occorrenze di a in {a >10} con a+b-3Questo diventa: a+b-3>10, ovvero b>13-aQuindi, Q x E e’ { b>13-a }
![Page 9: Semantiche dei linguaggi di programmazione. Tino CortesiAnalisi e Verifica di Programmi 2 A cosa serve la semantica di un linguaggio? 1. Uno standard](https://reader035.vdocuments.site/reader035/viewer/2022081602/5542eb4e497959361e8bddff/html5/thumbnails/9.jpg)
Tino Cortesi Analisi e Verifica di Programmi 9
Esempio: comando di selezioneConsideriamo il comando if-then-else La regola di inferenza e’
Esempio {?} if ( x > 0 ) then y = y - 5 else y = y + 3 { y > 0 }
Le precondizioni per S2 sono { x <= 0 } e {y > -3 }Le precodizioni per S1 sono { x > 0 } e {y > 5 }Chi e’ allora P ?
Nota che { y > 5 } => { y > -3 }Quindi la precondizione P e’ { y > 5 }
{ B and P } S1 { Q }, { (not B) and P } S2 { Q}{ P } if B then S1 else S2 { Q }
![Page 10: Semantiche dei linguaggi di programmazione. Tino CortesiAnalisi e Verifica di Programmi 2 A cosa serve la semantica di un linguaggio? 1. Uno standard](https://reader035.vdocuments.site/reader035/viewer/2022081602/5542eb4e497959361e8bddff/html5/thumbnails/10.jpg)
Semantica Denotazionale
![Page 11: Semantiche dei linguaggi di programmazione. Tino CortesiAnalisi e Verifica di Programmi 2 A cosa serve la semantica di un linguaggio? 1. Uno standard](https://reader035.vdocuments.site/reader035/viewer/2022081602/5542eb4e497959361e8bddff/html5/thumbnails/11.jpg)
Tino Cortesi Analisi e Verifica di Programmi 11
Semantica DenotazionaleAd ogni costrutto sintattico (parte del programma) P viene associata la sua denotazione [| P |], un oggetto matematico che rappresenta il contributo di P al significato di un qualsiasi programma che contenga P.
Composizionalità: la denotazione di un costrutto linguistico (parte del programma) dipende unicamente dalla denotazione delle sue sotto-componenti
![Page 12: Semantiche dei linguaggi di programmazione. Tino CortesiAnalisi e Verifica di Programmi 2 A cosa serve la semantica di un linguaggio? 1. Uno standard](https://reader035.vdocuments.site/reader035/viewer/2022081602/5542eb4e497959361e8bddff/html5/thumbnails/12.jpg)
Tino Cortesi Analisi e Verifica di Programmi 12
Il linguaggio while
Notazione BNF
Elementi sintattici
![Page 13: Semantiche dei linguaggi di programmazione. Tino CortesiAnalisi e Verifica di Programmi 2 A cosa serve la semantica di un linguaggio? 1. Uno standard](https://reader035.vdocuments.site/reader035/viewer/2022081602/5542eb4e497959361e8bddff/html5/thumbnails/13.jpg)
Tino Cortesi Analisi e Verifica di Programmi 13
Semantica dei numeraliLa funzione semantica associa ad ogni numerale (in forma binaria) il suo significato (un elemento dell’insieme dei numeri interi Z)
Ad esempio,
![Page 14: Semantiche dei linguaggi di programmazione. Tino CortesiAnalisi e Verifica di Programmi 2 A cosa serve la semantica di un linguaggio? 1. Uno standard](https://reader035.vdocuments.site/reader035/viewer/2022081602/5542eb4e497959361e8bddff/html5/thumbnails/14.jpg)
Tino Cortesi Analisi e Verifica di Programmi 14
Stato ed EspressioniIl significato dei una espressione aritmetica dipende dallo stato delle variabili che vi appaiono.
Uno stato è una funzione che associa ad un insieme di variabili un corrispondente insieme di valori
Data un’espressione aritmetica ed uno stato possiamo determinare il valore di questa espressione
![Page 15: Semantiche dei linguaggi di programmazione. Tino CortesiAnalisi e Verifica di Programmi 2 A cosa serve la semantica di un linguaggio? 1. Uno standard](https://reader035.vdocuments.site/reader035/viewer/2022081602/5542eb4e497959361e8bddff/html5/thumbnails/15.jpg)
Tino Cortesi Analisi e Verifica di Programmi 15
Semantica delle Espressioni
![Page 16: Semantiche dei linguaggi di programmazione. Tino CortesiAnalisi e Verifica di Programmi 2 A cosa serve la semantica di un linguaggio? 1. Uno standard](https://reader035.vdocuments.site/reader035/viewer/2022081602/5542eb4e497959361e8bddff/html5/thumbnails/16.jpg)
Tino Cortesi Analisi e Verifica di Programmi 16
Esempio
Consideriamo l’espressione aritmetica (x+1), valutata in uno stato s tale che s x = 3
![Page 17: Semantiche dei linguaggi di programmazione. Tino CortesiAnalisi e Verifica di Programmi 2 A cosa serve la semantica di un linguaggio? 1. Uno standard](https://reader035.vdocuments.site/reader035/viewer/2022081602/5542eb4e497959361e8bddff/html5/thumbnails/17.jpg)
Tino Cortesi Analisi e Verifica di Programmi 17
Semantica delle espressioni booleane
![Page 18: Semantiche dei linguaggi di programmazione. Tino CortesiAnalisi e Verifica di Programmi 2 A cosa serve la semantica di un linguaggio? 1. Uno standard](https://reader035.vdocuments.site/reader035/viewer/2022081602/5542eb4e497959361e8bddff/html5/thumbnails/18.jpg)
Tino Cortesi Analisi e Verifica di Programmi 18
Semantica dei comandiUn comando è un costrutto che può modificare lo stato della memoria: è quindi una funzione parziale tra stati
La semantica dell’assegnamento
assicura che se
allora
![Page 19: Semantiche dei linguaggi di programmazione. Tino CortesiAnalisi e Verifica di Programmi 2 A cosa serve la semantica di un linguaggio? 1. Uno standard](https://reader035.vdocuments.site/reader035/viewer/2022081602/5542eb4e497959361e8bddff/html5/thumbnails/19.jpg)
Tino Cortesi Analisi e Verifica di Programmi 19
Comando sequenzialeLa semantica del comando sequenziale considera il caso In cui una ddelle due funzioni non sia definita riespetto agli argomenti:
![Page 20: Semantiche dei linguaggi di programmazione. Tino CortesiAnalisi e Verifica di Programmi 2 A cosa serve la semantica di un linguaggio? 1. Uno standard](https://reader035.vdocuments.site/reader035/viewer/2022081602/5542eb4e497959361e8bddff/html5/thumbnails/20.jpg)
Tino Cortesi Analisi e Verifica di Programmi 20
Comando condizionale
![Page 21: Semantiche dei linguaggi di programmazione. Tino CortesiAnalisi e Verifica di Programmi 2 A cosa serve la semantica di un linguaggio? 1. Uno standard](https://reader035.vdocuments.site/reader035/viewer/2022081602/5542eb4e497959361e8bddff/html5/thumbnails/21.jpg)
Tino Cortesi Analisi e Verifica di Programmi 21
Comando whileLa semantica del comando
deve essere la stessa di
Quindi la semantica di
deve essere il punto fisso del funzionale F definito da
![Page 22: Semantiche dei linguaggi di programmazione. Tino CortesiAnalisi e Verifica di Programmi 2 A cosa serve la semantica di un linguaggio? 1. Uno standard](https://reader035.vdocuments.site/reader035/viewer/2022081602/5542eb4e497959361e8bddff/html5/thumbnails/22.jpg)
Tino Cortesi Analisi e Verifica di Programmi 22
Comando while
La semantica del comando while è quindi:
dove l’operatore di punto fisso FIX è del tipo:
ma cosa ci assicura che il punto fisso esista?
![Page 23: Semantiche dei linguaggi di programmazione. Tino CortesiAnalisi e Verifica di Programmi 2 A cosa serve la semantica di un linguaggio? 1. Uno standard](https://reader035.vdocuments.site/reader035/viewer/2022081602/5542eb4e497959361e8bddff/html5/thumbnails/23.jpg)
Tino Cortesi Analisi e Verifica di Programmi 23
C’è un minimo punto fisso?
Operazionalmente possono verificarsi tre casi nell’esecuzione del comando while b do S a partire da uno stato s0 :
Il comando terminaC’è un loop interno (c’e’ un comando all’interno di S che non termina)E’ il loop while che non termina
![Page 24: Semantiche dei linguaggi di programmazione. Tino CortesiAnalisi e Verifica di Programmi 2 A cosa serve la semantica di un linguaggio? 1. Uno standard](https://reader035.vdocuments.site/reader035/viewer/2022081602/5542eb4e497959361e8bddff/html5/thumbnails/24.jpg)
Tino Cortesi Analisi e Verifica di Programmi 24
EsempioSe è lo stato in cui x vale 5, ecco un esempio per ognuno dei tre casi precedenti:
while x>0 do x:=x-1
while x>0 do
if (x=1) then (while true do skip)
else x:= x-1
While true do skip
![Page 25: Semantiche dei linguaggi di programmazione. Tino CortesiAnalisi e Verifica di Programmi 2 A cosa serve la semantica di un linguaggio? 1. Uno standard](https://reader035.vdocuments.site/reader035/viewer/2022081602/5542eb4e497959361e8bddff/html5/thumbnails/25.jpg)
Tino Cortesi Analisi e Verifica di Programmi 25
Problema…
Per garantire l’esistenza di soluzioni a questa equazione di punto fisso sono necessarie condizioni:
Sul dominio: un ordine parziale? un CPO? un reticolo completo?Sul funzionale: monotono? continuo?