semantiche dei linguaggi di programmazione. tino cortesianalisi e verifica di programmi 2 a cosa...

25
Semantiche dei linguaggi di programmazione

Upload: paola-rinaldi

Post on 01-May-2015

213 views

Category:

Documents


0 download

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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?