Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoGiancarlo Sassi Modificato 9 anni fa
2
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 = 10; double totale = bott_vol * bott_num + latt_vol * latt_num; System.out.print(“volume totale ” + totale + “ litri” ); } Linguaggi: Semantica Programma in Java Cosa significa? cosa calcola ? a cosa serve ? è corretto?
3
La correttezza sintattica è data dalla grammatica di Java Programma::= Modulo Moduli Modulo::= Imports Classe Classi Moduli ::= Modulo Moduli | Importazioni::= Importa ; Imports | Importa:= import java.Ide.(Ide | * ) Classe::= Descrittori class Ide Def Classi ::= Classe Classi | Descrittori::= public | private | static | final | ...
4
6/19/20153 Sintassi e semantica La sintassi di un linguaggo di programmazione è in genere descritta in modo molto rigoroso. La semantica viceversa è descritta in modo non formale e quindi poco rigoroso. I vantaggi di una descrizione formale della semantica sono: –aiutano nella definizione di programmi per la soluzione dei problemi, –permette di ragionare sulla correttezza dei programmi, –aiuta a far sì che implementazioni diverse del linguaggio diano gli stessi risultati. –Infine studiare la semantica fa comprendere i problemi che bisogna affrontare nell’implementazione del linguaggio
5
Semantica Operazionale: Sistemi di Transizioni Sistema di transizioni: S Sistema di transizioni: S configurazioni (Stati) configurazioni (Stati) T finali T finali x relazione di transizione x relazione di transizione Derivazione D: Derivazione D: * chiusura antisimmetrica, riflessiva, transitiva di * chiusura antisimmetrica, riflessiva, transitiva di i * k i … k D i * k i … k D
6
6/19/20155 Un esempio Data la grammatica G= definiamo un sistema di transizione nel modo seguente: ={ | ({a,b} {S})*} T ={ | {a,b}*} S ({a,b} {S})} ab S ({a,b} {S})} aSb
7
Regole (R) condizionali per 1 2 n ’ 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.
8
Copertura delle variabili 1 2 n ’ Sia x Vars(R), x è coperta in R se e solo se vale una delle seguenti condizioni: 1)x occorre ; 2)esiste in R una premessa i del tipo y=t tale che y è coperta in R e x Vars(t) 3)esiste in R una premessa i del tipo x=t tale che tutte le variabili in Vars(t) sono coperte. 4)esiste in R una premessa i del tipo ’ ’ tale che tutte le variabili in sono coperte in R e x Vars( ’) Sia R la seguente regola condizionale
9
6/19/20158 Sostituzioni e istanziazioni Sia V= {x 1,...x k } è un insieme di variabili, si dice sostituzione l’insieme di associazioni ={c 1 /x 1,... c k /x k } dove c 1,... c k 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
10
6/19/20159 Derivazione ’ Sia un sistema di transizioni con (r )...(r n ) regole condizionali, abbiamo che ’ se e solo se esiste una regola condizionale r i per cui esiste una sostituzione per le variabili in r i tale che: tutte le premesse di (r i ) sono soddisfatte; la conclusione di (r i ) è 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à.
11
6/19/201510 Grammatiche LC come sistemi di transizioni Data una G= 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/premesse/prerequisiti
12
6/19/201511 Un esempio Data la grammatica G= definiamo un sistema di transizione nel modo seguente: ={ | ({a,b} {S})*} T ={ | {a,b}*} ({a,b} {S})} S ab ({a,b} {S})} S aSb
13
6/19/201512 Rev Rev { | } T Rev { | } Rev {<x , Un esempio: la reverse di una sequenza di caratteri Soluzione con solo coppie di sequenze. La configurazione iniziale è
14
6/19/201513 Rev Rev { | } { | } T Rev { | } Rev {<x , Un’altra soluzione: la reverse Soluzione con coppie di sequenze, che termina con una singola sequenza
15
6/19/201514 Rem Rem { | , x { START,STOP } } T Rem { | }, Rem { (1) x * Rem * Rem } Esempio eliminazione di ripetuti (2) (3) (4)
16
6/19/201515 Eliminazione dei ripetuti: Eliminazione dei ripetuti: Esempio di applicazione (3) 0 0 ={a/x 0,cbbb/ 0, / 0 } * (4) 1 1 ={a/x 1,c/y 1,bbb/ 1, / 1 } * (4) 2 2 ={c/x 2,b/y 2,bb/ 2, / 2 } * (3) 3 3 ={b/x 3,b/ 3, / 3 } * (3) 4 4 ={b/x 4, / 4, / 4 } * (2) 5 5 ={b/x 5 } 4 = b 3 = b 2 = b 1 = cb 0 = acb b b b cb acb
17
6/19/201516 Addizionatore 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 | Cif Cif::= 0|1|2|3|4|5|6|7|8|9 110 456+ 57= 513
18
6/19/201517 Addizione <456,57> } <45,5,3,1> <4,0,13,1> <0,0,513,0> 513
19
6/19/201518 Addizionatore di cifre Addizionatore di cifre: S cr Addizionatore di cifre: S cr cr { | r {0,1}, c,c’ Cif} cr { | r {0,1}, c,c’ Cif} { | r {0,1}, c Cif} { | r {0,1}, c Cif} T cr { | r {0,1}, c Cif}T cr { | r {0,1}, c Cif} cr cr cr cr cr cr ….….. cr cr cr cr
20
6/19/201519 Addizionatore di numeri Addizionatore di Num: S + + { | n,n’ Num} { | r {0,1}, n,n’,m Num} {n | n Num} T + {n | n Num} + cr (i) + cr (ii) + cr (iii) +
21
6/19/201520 Transizioni + (continua) cr + + m cr + se ≠ (vi) cr + (v) (iv) (vii) cr + (viii) cr + (ix)
22
6/19/201521 Applicazione dell’addizionatore <92,512> + {(iV), cr } <9,51,4,0> + {(iX), cr } <0,5,04,1> + {(vi), cr } <0,0,604,0> + {(v)} 604
23
Macchina S + 10179 10179 277 + 9902 10179 Continua 3
24
6/19/201523 Rappresentazione 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.
25
Correttezza: Rappresentazione e Semantica dei 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 + * 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
26
6/19/201525 Rappresentazione 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.
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.