#include <stdio.h>;# define bott_vol =2.0;# define latt_vol = 0.355; int main () {int bott_num = 4; int latt_num = 10; double totale = bott_vol * bott_num + latt_vol * latt_num; printf(“volume totale %d litri”, totale); }
Linguaggi: SemanticaLinguaggi: Semantica
Programma in C
Cosa significa?cosa calcola ?a cosa serve ?è corretto?
let bott_vol =2.0 and latt_vol = 0.355 and bott_num = 4 and latt_num = 10 in bott_vol * bott_num + latt_vol * latt_num;
Linguaggi: SemanticaLinguaggi: Semantica
Programma in Caml
Cosa significa?cosa calcola ?a cosa serve ?è corretto?
La correttezza sintattica è data dalla La correttezza sintattica è data dalla Grammatica diGrammatica di CC
Programma::= DirettivePrototipi int main() {StmtList} FunctDecList
Direttive ::= Direttiva Direttive | Direttiva::= #define Ide; | #include <Ide.h>;|... Prototipi::= Prototipo ; Prototipi | Prototipo:= Type Ide(FormalList ) ;FunctDecList::= FunctDecl; FunctDecList | FunctDec::= Type Ide (FormalList) Com
La correttezza sintattica è data dalla La correttezza sintattica è data dalla Grammatica diGrammatica di CC
StmtList ::= Stmt ; StmtList | Stmt::=Decl | ComCom::=Ide=Exp Assegnamento | if (Exp) Com else Com Condizionale | while (Exp) Com Iteratore | {StmtList} Blocco | Ide(Exp) Invocazione di fun | return Exp Calcolo dei valore Exp::= Ide | Const | Exp Op Exp | Uop Exp | Ide
| Ide(Exp) | (Exp)...Decl ::= Type Ide [=Exp]
04/24/23 5
Sintassi e semanticaSintassi e semantica• La sintassi di un linguaggio di programmazione è in genere
descritta in modo molto rigoroso.• La semantica viceversa spesso è descritta in modo non
formale e quindi poco rigoroso. I vantaggi di una descrizione formale della semantica sono:– è la specifica del compilatore e dell’interprete:
• permette di affrontare in modo rigoroso e strutturato il complesso problema dell’implementazione del linguaggio
• uno stesso programma, eseguito da implementazioni diverse del linguaggio (macchine diverse), che però rispettano la semantica, danno lo stesso risultato.
– aiuta nella definizione di programmi per la soluzione dei problemi,– permette di ragionare sulla correttezza dei programmi,
Semantica Operazionale: Semantica Operazionale: Sistemi di TransizioniSistemi di Transizioni
Sistema di transizioniSistema di transizioni: S : S < < , T, , T, > >• configurazioniconfigurazioni (Stati)(Stati)• T T finalifinali• x x relazione di transizionerelazione di transizione
Derivazione DDerivazione D: < S , : < S , * >* > * * chiusura antisimmetrica, riflessiva, transitiva di chiusura antisimmetrica, riflessiva, transitiva di
• ii * * kk ii … … kk D D
Regole (Regole (RR) condizionali per ) condizionali per
12n
’
Le i sono premesse e sono relazioni tra espressioni che contengono costanti, variabili e operatori del tipo (=, ≠, ).
Le variabili sono quelle che permettono di istanziare la regola. Le indichiamo con Vars(R).
La copertura delle variabili serve a garantire la fondatezza della regola.
Copertura delle variabili Copertura delle variabili
12n
’
Sia x Vars(R), x è coperta in R se e solo se vale una delle seguenti condizioni:
• x occorre ;
• esiste in R una premessa i del tipo y=t tale che y è coperta in R e x Vars(t)
• esiste in R una premessa i del tipo x=t tale che tutte le variabili in Vars(t) sono coperte.
• esiste in R una premessa i del tipo ’ ’ tale che tutte le variabili in sono coperte in R e xVars(’)
Sia R la seguente regola condizionale
04/24/23 9
Sostituzioni e istanziazioniSostituzioni e istanziazioni
• Sia V= {x1,...xk} è un insieme di variabili, si dice sostituzione l’insieme di associazioni ={c1/x1,... ck/xk} dove c1,... ck sono costanti.
• Dato un termine o espressione E questo può essere istanziato su una sostituzione (E). L’istanza è l’espressione che si ottiene rimpiazzando in E tutte le variabili che occorrono in con i rispettivi valori.– es. V= {x,y} e sia E = x<y+1 l’espressione se ={4/x,2/y}
allora (E) = 4<2+1 = 4<3= false– se invece ={2/x, 3/y} allora (E) = 2<3+1 2< 4= true
04/24/23 10
Derivazione Derivazione ’’Sia < , T, > un sistema di transizioni con (r)...(rn) regole condizionali, abbiamo che ’ se e solo se esiste una regola condizionale ri per cui esiste una sostituzione per le variabili in ritale che:
• tutte le premesse di (ri)sono soddisfatte;
• la conclusione di (ri)è proprio ’
Le variabili (spesso di seguito denotate con ,,,) rappresentano generici elementi del dominio del discorso,
e si riconoscono perchè, nelle premesse, ne viene definito l’intervallo di variabilità.
04/24/23 11
Grammatiche LC come sistemi di transizioniGrammatiche LC come sistemi di transizioni
Data una G=<,V,s,P>si può definire un sistema di transizioni nel seguente modo:
• le configurazioni sono sequenze di simboli in V• le configurazioni terminali sono sequenze di simboli in • la relazione di transizione è definita in base alle
produzioni, nel seguente modo: Per ogni produzione A::= P è definita una regola condizionale.
(V)*A
precondizioni/precondizioni/premesse/premesse/prerequisitiprerequisiti
04/24/23 12
Un esempioUn esempio
Data la grammatica G=<{a,b},{S},S,{S::=ab, S::=aSb}>definiamo un sistema di transizione nel modo seguente:
={ | ({a,b}{S})*}T ={ | {a,b}*}
({a,b}{S})}S ab
({a,b}{S})}S aSb
04/24/23 13
Rev < Rev, TRev, Rev>
• Rev {<,> | }
• T Rev {<, > | }
• Rev {<x,
<x> <x>
Un esempio: la reverse di una Un esempio: la reverse di una sequenza di caratterisequenza di caratteri
Soluzione con solo coppie di sequenze. La configurazione iniziale è <,>
04/24/23 14
Rev < Rev, TRev, Rev>
• Rev {<,> | } { |}• TRev { |}
• Rev {<x,
<x> <x>
<> <>
Un’altra soluzione: la reverse Un’altra soluzione: la reverse
Soluzione con coppie di sequenze, che termina con una singola sequenza
04/24/23 15
Rem < Rem, TRem, Rem>
• Rem {<,x> | , x {START,STOP}}
• TRem {< ,STOP> | },• Rem { <,START> <,STOP> (1)
x <x,START> <x,STOP>
<x, <xSTART>*Rem<,STOP> <xxSTART> <,STOP>
<x,y, x≠y, <ySTART>*Rem<,STOP> <xySTART> <x,STOP> }
Esempio eliminazione di ripetuti Esempio eliminazione di ripetuti
(2)
(3)
(4)
04/24/23 16
Eliminazione dei ripetuti:Eliminazione dei ripetuti:Esempio di applicazione
<acbbb,START> *<0,STOP>
<acbbb,START> (4)1<a1,STOP> 1={a/x1,c/y1,bbb/1, /1}
<cbbb,START> *<1,STOP>
<cbbb,START> (4)2<c2,STOP> 2 ={c/x2,b/y2,bb/2, /2}
<bbb,START> *<2,STOP>
<bbb,START> (3)3<3,STOP> 3 ={b/x3,b/3, /3}
<bb,START> *<3,STOP>
<bb,START> (3)4<4,STOP> 4 ={b/x4,/4, /4}
<b,START> *<4,STOP>
<b,START> (2)5< b,STOP> 5 ={b/x5}
4= b
3 = b
2= b
1 = cb
0= acb<aacbbb,START> (3)0
<0,STOP> 0={a/x0,cbbb/0 , /0}< acb,STOP>
< acb,STOP><acb,STOP>
<b,STOP>
<b,STOP>
<b,STOP>
<b,STOP>
<b,STOP>
<cb,STOP>
<cb,STOP>
b
b
b
cb
acb
04/24/23 17
Addizionatore di numeriAddizionatore di numeri
• Vediamo come esempio un addizionatore di numeri interi, che fa uso di due sistemi di transizione:– un addizionatore di cifre decimali– l’addizionatore di numeri
• la grammatica per definire i numeri da addizionare è la seguente:
Num::= Num Cif | CifNum::= Num Cif | CifCif::= 0|1|2|3|4|5|6|7|8|9Cif::= 0|1|2|3|4|5|6|7|8|9
110456+ 57=513
04/24/23 18
AddizioneAddizione
<456,57><456,57> <6,7,0> <6,7,0> <3,1>}<3,1>}
<45,5,3,1><45,5,3,1> <5,5,1> <5,5,1> <1,1>}<1,1>}
<4,0,13,1><4,0,13,1> <4,0,1> <4,0,1> <5,0>}<5,0>}
<0,0,513,0><0,0,513,0> 513513
04/24/23 19
Addizionatore di cifreAddizionatore di cifre
Addizionatore di cifreAddizionatore di cifre: S: Scrcr < < crcr, T, Tcrcr, , crcr>>
• cr cr {<c,c’,r> | r{<c,c’,r> | r{0,1}, c,c’{0,1}, c,c’Cif} Cif}
{<c,r> | r{<c,r> | r{0,1}, c{0,1}, cCif} Cif} •TTcr cr {<c,r> | r{<c,r> | r{0,1}, c{0,1}, cCif} Cif}
• crcr <0,0,0><0,0,0>crcr<0,0><0,0> <0,0,1> <0,0,1>crcr<1,0><1,0>
<0,1,0><0,1,0>crcr<1,0><1,0> <0,1,1> <0,1,1>crcr<2,0><2,0>
<0,2,0><0,2,0>crcr<2,0><2,0> <0,2,1> <0,2,1>crcr<3,0><3,0>
…….. …..…..<9,8,0><9,8,0>crcr<7,1><7,1> <9,8,1> <9,8,1>crcr<8,1><8,1>
<9,9,0><9,9,0>crcr<8,1><8,1> <9,9,1> <9,9,1>crcr<9,1><9,1>
04/24/23 20
Addizionatore di numeriAddizionatore di numeri
Addizionatore di Num: S+ < +, T+, +>
• + {<n,n’> | n,n’Num}
{<n,n’,m,r> | r{0,1}, n,n’,mNum} {n | nNum} • T+ {n | nNum}
• + <c,c’,0>cr<c’’,r>
(i) <c,c’>+<0,0,c’’,r>
<c,c’,0>cr<c’’,r> (ii)
<nc,c’>+<n,0,c’’,r>
<c,c’,0>cr<c’’,r> (iii)<c,nc’>+<0,n,c’’,r>
04/24/23 21
Transizioni Transizioni ++(continua)(continua) <c,c’,0>cr<c’’,r>
<nc,n’c’>+<n,n’,c’’,r>
<0,0,m,0> + m
<c,c’,r>cr<c’’,r’>
<c,c’,m,r>+<0,0,c’’m,r’>se <c,c’,r>≠<0,0,0> (vi)
<c,c’,r>cr<c’’,r’>
<nc,c’,m,r>+<n,0,c’’m,r’>
(v)
(iv)
(vii)
<c,c’,r>cr<c’’,r’>
<c,nc’,m,r>+<0,n,c’’m,r’>
(viii)
<c,c’,r>cr<c’’,r’>
<nc,n’c’,m,r>+<n,n’,c’’m,r’>(ix)
04/24/23 22
Applicazione dell’addizionatoreApplicazione dell’addizionatore
<92,512><92,512>++{(iV), <2,2,0> {(iV), <2,2,0> crcr<4,0>}<4,0>}
<9,51,4,0><9,51,4,0>++{(iX), <9,1,0> {(iX), <9,1,0> crcr<0,1>}<0,1>}
<0,5,04,1><0,5,04,1>++{(vi), <0,5,1> {(vi), <0,5,1> crcr<6,0>}<6,0>}
<0,0,604,0><0,0,604,0>++{(v)}{(v)}
604604
Macchina SMacchina S++
<277,9902> <277,9902> <27,990,9,0> <27,990,9,0> <2,99,79,0> <2,99,79,0> <0,9,179,1> <0,9,179,1> <0,0,0179,1> <0,0,0179,1> <0,0,10179,0> <0,0,10179,0> 1017910179
277 + 9902277 + 99021017910179
Continua 3
04/24/23 24
Rappresentazione e semanticaRappresentazione e semantica• I numeri (che indichiamo qui con sulla dispensa sono N)
con le loro operazioni sono entità astratte che godono di importanti proprietà.
• Per utilizzarli e studiarli gli uomini hanno inventato delle rappresentazioni (concrete) di tali entità:– quella che conosciamo e usiamo normalmente sono i numeri arabi su
base decimale,– i Romani ne usavano una diversa (I,II, III, IV, ...X, ..L...)– ne esistono molte altre, ad esempio su basi diverse (2,3,...ecc).
• Nel definire la semantica di un linguaggio di programmazione, dove le algebre dei numeri sono rappresentate da tipi predefiniti (int, long, real,..) e importante chiarire la differenza tra valore e rappresentazione.
Correttezza: Rappresentazione e Semantica Correttezza: Rappresentazione e Semantica dei numeridei numeri
: Num -> (0) = 0 …. (9) = 9 (nc) = (n)x10 + (c)
: -> Num(0) = 0 Num
…. (9) = 9 Num (n) = (n 10)(n mod 10) Num, n>9
<n,n’> +* m (n) + (n’) = (m)
Sia l’insieme dei numeri naturali ={0,1,2,3,...} con le usuali operazioni di somma, sottrazione, ecc., e gli operatori di relazione (=, ≠,>,ecc).
Mentre Num sono sequenze di simboli che rappresentano i numeri naturali nella solita rappresentazione decimale.
funzione di valutazione funzione di rappresentazione
04/24/23 26
Rappresentazione binariaRappresentazione binaria
• La rappresentazione che utilizza il minimo numero di simboli è la rappresentazione binaria (quella usata dai calcolatori).
• Tale rappresentazione è definita dalla seguente funzione di valutazione:
(0) = 0 (1) = 1 (yb) = ((y) 2) + (b)
Si calcoli il valore di (1100) cioè il numero rappresentato dalla stringa binaria 1100.