Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica...

Post on 29-Oct-2018

222 views 0 download

Transcript of Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica...

1

1

Sintassi e semantica

• La sintassi dei linguaggi e la compilazione

(cenni, materia ripresa nel corso di Linguaggi di Programmazione)

• Introduzione alla semantica

• La semantica operazionale di un semplice linguaggio

2

abbiamo visto: Linguaggi (artificiali)

La descrizione di un linguaggio avviene su tre dimensioni (Morris, 1939):

– sintassi

– semantica

– pragmatica

regole di formazione:quando una frase è corretta

relazioni tra segni

attribuzione di significato:cosa significa una frase correttarelazioni tra segni e significato

in qual modo frasi corrette e sensatesono usate

relazioni tra segni, significato e utente

Per un linguaggio eseguibile:

– implementazione

eseguire una frase corretta,rispettandone la semantica

2

3

già visto: Come è descritto un LP in queste tredimensioni?

– Sintassi• formale: grammatiche formali , BNF (Backus Naur Form)

• quasi-formale: tipizzazione, vincoli contestuali

– Semantica• informale: linguaggio naturale, manuale

• formale: denotazione, operazionale

– Pragmatica• informale: esempi

• semi-formale: metodologie di programmazione

– Implementazione• derivazione dalla semantica

• macchina astratta

4

Sintass i e semantica

Sintassi• Definisce quali frasi fanno parte del linguaggio, ovvero quali sequenze di

caratteri costituiscono un programma “legale”• Ci dice come “appare” un programma• Strumenti per descrivere la sintassi:

– grammatiche generative (Chomsky)– automi– BNF

Semantica• Specifica il “significato” di ogni programma legale• Specifica il comportamento del programma al momento dell’esecuzione• Semantica Statica : Semantica che può essere determinata al momento della

compilazione• Semantica Dinamica: Semantica determinata durante l’esecuzione• Metodologie usate per definire la semantica:

– Algebrica - Operazionale– Assiomatica - Denotazionale

3

5

Sintass i

• Ci dice come costruire le frasi corrette del linguaggio:

var A: integer; if a> 0 then C else C’

Var A: intgr; if a> 0 else C’ then C;

Errore lessicale Errore grammaticale

• Stessi costrutti espressi in modo diverso in linguaggi diversi.Es: un vettore di 10 elementi interi

In C: int V[10]

In Pascal: V: array[0..9] of integer

Presumibilmente questi due oggetti hanno lo stesso significato(ovvero la stessa semantica).

6

Sintass i

• Come definire e riconoscere i costrutti corretti del linguaggio ?

• Problema essenziale nella fase di compilazione di un programma

• Enumerazione di tutti i programmi ben formati ? … un po’ lungo

• Vari strumenti:

- grammatiche generative: regole per costruire le frasi del linguaggio

- grammatiche regolari

- grammatiche libere da contesto

- automi: formalismi per riconoscere i costrutti di un linguaggio

- BNF: Backus Naur Form usata la prima volta per Algol in 1958 da Naur (chair di Algol committee) e Backus (segretario)

- stessa cosa della grammatiche libere da contesto

4

7

Fasi nella traduzione di un programma

8

Fasi principali della compilazione

Analisi lessicale (Scanner): Spezza un programma nei componenti sintattici primitvi,chiamati tokens (identificatori, numeri, parole riservate …)

- grammatiche regolari

- automi a stati finiti

Analisi sintattica (Parsing): Crea una rappresentazione ad albero della sintassi delprogramma. Riconosce le frasi ben formate del linguaggio

- grammatiche libere da contetso

- pushdown automata

- BNF

Tabella dei simboli: Memorizza le informazioni sugli oggetti dichiarati (identificatori,procedure … )

Analisi semantica: Esegue dei controlli di semantica staticaper rilevare eventuali errori(vedi pu’ avanti).

Ottimizzazione: Riscrive l’albero sintattico che rappresenta un programma in modo damigliorarne l’efficienza

Generazione del codice: converte il programma analizzato sintatticamente in una versioneeseguibile

Tutto questo (e altro) è argomento di un corso del III Anno: Linguaggi di Programmazione

5

9

Traduzione ed esecuzione

10

Definire un linguaggio: un esempio

Le stringhe delle espressioni aritmetiche formate a partire dalle variabili

A, B

con gli operatori

*, +

e le parentesi (, )

Esempî: A A+B

A+B+A (A+B+A)

A+(A*B) …

Un’espressione può essere:la variabile A oppurela variabile B oppure

un’espressione * un’espressione oppureun’espressione + un’espressione oppure

( un’espressione )

La definizione è ricorsiva…

6

11

Derivare una stringa

A+(A*B) è un’espressione, perché:

un’espressione può essere un’espressione + un’espressione

ovvero può essere A + un’espressione

ovvero può essere A + ( un’espressione )

ovvero può essere A + ( un’espressione * un’espressione )

ovvero può essere A + ( A * un’espressione)

ovvero può essere A + ( A * B )

Un’espressione può essere:la variabile A oppurela variabile B oppureun’espressione * un’espressione oppureun’espressione + un’espressione oppure

( un’espressione )

Distinguiamo:

terminali

non-terminali

ausiliari

Riscriviamo un non-terminale usando unaregola della forma:

non-terminale può esserestringa-di-terminali-e-non-terminali

12

Linguaggi formali

Def.: Un alfabeto A è un qualsiasi insieme (finito, non vuoto) i cui elementi sonodetti caratteri (o simboli)

Def.: Una parola sull’alfabeto A è una sequenza finita o nulla di caratteriappartenenti ad A.

Def.: Un linguaggio (formale) L su A è un qualsiasi insieme di parole su A.

Ovvero L è un qualsiasi sottoinsieme di A*

dove A* = Un>=0 A n e A 0 = {λ} e A n = A A n-1

Indichiamo con la giustapposizione la concatenazione di sequenze, estesa inmodo ovvio agli insiemi

L’operatore * (stella di Kleene) applicato ad un simbolo indica 0 o più ripetizionidel simbolo. Sopra usiamo la sua estensione a un insieme.

7

13

Esempi

L’insieme di tutti i programmi C è un linguaggio (il linguaggio C, in effetti)

L’insieme di tutti gli assegnamenti che si possono scrivere in C è un linguaggio

L’insieme {an b cn | n >1 } è un linguaggio (sull’alfabeto {a,b,c })

Un linguaggio, essendo un insieme, puo’ essere definito:

- In modo estensionale: elencando tutti gli elementi dell’insieme …

- In modo intensionale: definendo delle regole che ci dicono come

sono fatti gli elementi dell’insieme.

14

Le formule aritmetiche con + e *

Alfabeto dei terminali

Alf = {A0, A1, A2,…,+,*, (, ) }Regole per produrre le formule

<fbf> ::= A0 | A1 | A2 | … |(<fbf>+<fbf>) | (<fbf>∗<fbf>)

((A0 ∗ A2) + A0) è una formula:<fbf> ⇒(<fbf> + <fbf> ) ⇒( <fbf> + A0) ⇒(( <fbf> ∗ <fbf> ) + A0) ⇒((A0 ∗ <fbf> ) ) + A0 )⇒((A0 ∗ A2) ) + A0 )

può essere

oppure

8

15

Le fbf del calcolo proposizionale

Alfabeto

Alf = {A0, A1, A2,…, →, ∧, ∨, ⊥, ¬, (, ) }Formule

<fbf> ::= A0 | A1 | A2 | … |⊥ |(<fbf>∧ <fbf>) | (<fbf> ∨ <fbf>) | (<fbf>→<fbf>) | (¬ <fbf> )

((¬(A0 ∧ A2)) ∨ ⊥) è una fbf:<fbf> ⇒(<fbf> ∨ <fbf> ) ⇒( <fbf> ∨ ⊥) ⇒((¬ <fbf> ) ∨ ⊥) ⇒((¬ ( <fbf> ∧ <fbf> ) ) ∨ ⊥) ⇒((¬ (A0 ∧ <fbf> ) ) ∨ ⊥) ⇒ ((¬ (A0 ∧ A2) ) ∨ ⊥)

16

Grammatiche Libere

• Grammatiche generative (introdotte da N. Chomsky, circa 1959)

Def Una grammatica libera da contesto è una quadrupla (NT,T,S, R) dove

- NT è un insieme finito di simboli non terminali

- T è un insieme (finito o numerabile) T di simboli terminali

- S ∈ NT è detto simbolo iniziale- R è un insieme di regole (o produzioni) della forma:

A ---> b dove A ∈ NT e b ∈ (NT ∪ T) *

Il linguaggio L generato da una tale grammatica è definito come

L = { w ∈ T * | S --->* w} dove, dati v, w ∈ (NT ∪ T) * , v ---> w sse

v = xAy, W = xby e A ---> b è una regola della grammatica

9

17

BNF

La Forma di Backus e Naur (BNF) è una notazione per presentare grammatichelibere, utilizzata per la prima volta nella definizione della sintassi Algol 60.

- Si usa la notazione < w > per indicare un simbolo non terminale (w è unasequenza qualsiasi di caratteri

- Si usa la notazione <A> ::= b invece che A ---> b

- Si usa (nella versione estesa) la notazione <A> ::= b | c per indicare due regole <A> ::= b e

<A> ::= c

- Si usa (nelle versione estesa) il simbolo * (stella di Kleene) con il significato già visto

- Operatore di riscrittura ⇒: sostituisce un non-terminale A in una parolacon b se esiste la regola <A> ::= b

18

BNF

Esempio

Non terminali : {<frase>, <soggetto>, <articolo>, <nome>,<verbo>,<comp.oggetto> }

Terminali: {un, cane, gatto, topo, mangia,insegue}

Simbolo Iniziale: <frase>

Regole:

<frase> ::= <soggetto> <verbo><comp.oggetto>

<soggetto> ::= <articolo> <nome>

<verbo> ::= mangia | insegue

<comp.oggetto> ::= <articolo> <nome>

<articolo> ::= un

<nome> ::= cane | gatto | topo

10

19

Esempio di riscrittura

<frase> ⇒ <soggetto > <verbo><comp.oggetto> I regola

⇒ <articolo> <nome> <verbo><comp.oggetto> II regola

⇒ un <nome> <verbo><comp.oggetto> V regola

. ⇒ un gatto <predicato> <verbo><comp.oggetto>

un gatto insegue un topo

Ma potremmo derivare anche

un topo mangia un gatto

La sintassi corretta non implica che la semantica sia corretta !

20

Esempio

Letterali numerici in un linguaggio di programmazione

<cifra> :: = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

<int_senza_segno> :: = <cifra><cifra>*<numero> :: = <int_senza_segno> <dec> <exp><dec> ::= . <int_senza_segno> | εε<exp> ::= e <segno> <int_senza_segno> | εε<segno> :: = + | - | εε

(In realtà una grammatica regolare, basta fare lo scanning da sinistra a destra)

Espressioni

<exp> :: = <identificatore> | <numero> | - <exp> ( <exp> ) | <exp> + exp> | <exp> *exp>

(il linguaggio generato necessita della piena potenza delle grammatiche libere)

11

21

Esempi di derivazioni

<exp> :: = <identificatore> | <numero> | - <exp>

( <exp> ) | <exp> + <exp> | <exp> *<exp>

<exp> ⇒ <exp>*<exp>

⇒(<exp>)*<exp>

⇒(<exp>+<exp>)*<exp>

⇒(A+<exp>)*<exp>

⇒(A+B)*<exp>

⇒(A+B)*C

<exp> ⇒ <exp>*<exp>⇒<exp>*C

⇒(<exp>)*C

⇒(<exp>+<exp>)*C

⇒(A+<exp>)*C

⇒(A+B)*C

<exp>

<exp> <exp>*

C

BA

( )<exp>

<exp> <exp>+

le due derivazioni distinte corrispondono allo stessoalbero di derivazione

22

Alberi di derivazione

Def. Data una grammatica G = (NT, T, S, R) un albero di derivazione (o di parsing)è un albero in cui:

• ogni nodo è etichettato con un simbolo in NT ∪ T ∪ {ε};• la radice è etichettata con S;

• ogni nodo interno è etichettato con un simbolo in NT;

• se il nodo n:

ha etichetta A

i suoi figli sono m1, … ,mk etichettati con X1,…,Xk

(dunque A è in NT; X1,…,Xk sono in NT ∪ T ∪ {ε}) allora A ::= X1…Xk è una regola in R;

• se il nodo n ha etichetta ε, allora n è una foglia ed è figlio unico.

Teor. Una stringa (di terminali) w appartiene al linguaggio di G sse ammette unalbero di derivazione (cioè un albero di derivazioni le cui foglie, lette da sin adestra, diano la stringa w).

12

23

Alberi di derivazione e precedenze

La struttura dell’albero di derivazione di una buona grammatica dovrebberispecchiare la struttura “intesa” della stringa:

<exp>

<exp> <exp>+

C

BA

<exp> <exp>*

L’albero “dice”: fai prima A*B e poi somma il risultato per C.

L’albero è la rappresentazione interna della stringa (del programma) usatadall’interprete o dal compilatore:

la struttura dell’albero rappresenta la semantica della stringa.

24

Ambiguità

<exp> :: = <identificatore> | <numero> | - <exp>

( <exp> ) | <exp> + <exp> | <exp> * <exp>

<exp>

<exp> <exp>+

C

BA

<exp> <exp>*

<exp>

<exp> <exp>*

A

CB

<exp> <exp>+

in questa grammatica la stessa stringa hapiù di un albero di derivazione: la grammatica è ambigua.Inutilizzabile come rappresentazione della semantica!

13

25

Grammatiche ambigue

Def . Una grammatica è ambigua se:

esiste almeno una stringa di simboli terminali

che ammette più alberi di derivazione

La grammatica delle espressioni è ambigua, perché A*B+C ha due alberi diderivazione

anche se (A+B)*C ha un solo albero (e più derivazioni).

Alcune grammatiche possono essere modificate in modo da:

- rimuovere l’ambiguità, e

- definire lo stesso linguaggio.

Esistono grammatiche (patologiche) dalle quali non è possibile rimuovere l’ambiguità(i linguaggi generati sono inerentemente ambigui)

26

Rimuovere l’ambiguità

Introduciamo la precedenza di * su +

complicando la grammatica

<exp> :: = <term> | <exp> + <exp>

<term> ::= <atom> | <term>*<term>

<atom> ::= <literal> | - <atom> | (<exp>)

<literal> ::= <identificatore> | <numero>

<exp> :: = <identificatore> | <numero> | - <exp>

( <exp> ) | <exp> + exp> | <exp> *<exp>

<exp>

<exp> <exp>+

<term>

BA

<term> <term>*<atom>

C

<literal>

<term>

<atom>

<literal>

<atom>

<literal>

L’altro albero non è più possibile

La grammatica modificata e’ ancoraambigua ?

14

27

Rimuovere l’ambiguità

Si, la seguente grammatica e’ ambigua

<exp> :: = <term> | <exp> + <exp>

<term> ::= <atom> | <term>*<term>

<atom> ::= <literal> | - <atom> | (<exp>)

<literal> ::= <identificatore> | <numero>

<exp> :: = <identificatore> | <numero> | - <exp>

( <exp> ) | <exp> + exp> | <exp> *<exp>

<exp>

<exp> <exp>+

<term>

BA

<term> <term>*<atom>

C

<literal>

<term>

<atom>

<literal>

<atom>

<literal>

Per disambiguarla dobbiamo introdurreanche la precedenza fra gli operandi:

<exp> :: = <term> | <term> + <exp>

<term> ::= <atom> | <atom>*<term>

<atom> ::= <literal> | - <atom> | (<exp>)

<literal> ::= <identificatore> | <numero>

28

Il dangling else

La dis-ambiguazione spiega alcuni contorcimenti delle grammatiche deiLP.

Esempio in Java:

if (porta - aperta)

if (ne ssuno-in-vista)

ret urn “C’e’ nessuno?”;

else suon a-campanello();

Con quale “ if” si accoppia “ else” ?

Guardiamo alla definizione ufficiale di Java…

15

29

Da Java Language Specificationhttp://java.sun.com/docs/books/jls/index.html

� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �! " # " $ % $ & " ' ( " ) * + " , - # ( . ( & / ! + 0 1 " # " $ % $ & " 2

3 4 5 6 7 8 9 4 : ; < = > ? = @ = A ; A B = C D E F G H I J F K F E L E I F M N O P Q R S T U V R W X P Y R UZ [ \ [ ] ^ ] _ [ ` a Z b a c [ d e fg h Z [ \ [ ] ^ ] _ [ i j [ b a k [ l c \ j m j _ n Z k o p [ \ [ ] ^ ] _ [ hd e l b ] _ q m p ] Z [ \ [ ] ^ ] _ [ ` a Z b a c [ d e

d e l b ] _ Z [ \ [ ] ^ ] _ [ fif ( r s t u v w w x y z ) { | } | v ~ v z |� � � � v z r � w v { | } | v ~ v z | �

if ( r s t u v w w x y z ) { | } | v ~ v z | � y { � y u | � �else { | } | v ~ v z |� � � � v z r � w v { | } | v ~ v z | � y { � y u | � � �

if ( r s t u v w w x y z ) { | } | v ~ v z | � y { � y u | � �else { | } | v ~ v z | � y { � y u | � �

Semplice variante di BNF: � � � � � � � per non-terminali (nostro: <Statement>)

: invece di ::=

30

Dunque …

La lettura corretta e’:i f (p or t a- aper ta ) if ( nessuno-i n- v i s t a)

r et ur n “ C’ e’ n essuno?” ;

el se suona- camp( ) ;

“The Java programming language, like C and C++ and many programming languages beforethem, arbitrarily decree that an else clause belongs to the innermost if to which it mightpossibly belong”

Ecco la derivazione:� � � � � � � � � � � � � � � � � � � � � � � � � �⇒ i f ( � � � � � � � � � �

)� � � � � � � � �

⇒ i f ( � � � � � � � � � �)

� � � � � � � � � � � � � � � � � � �⇒ i f ( � � � � � � � � � �

) i f ( � � � � � � � � � �)

� � � � � � � � �   � � � � � � � �el se

� � � � � � � � �⇒ i f ( � � � � � � � � � �

) i f ( � � � � � � � � � �)

� � � � � � � � � ¡ � � � � ¢ � � � � � � � � £ � ¢ ¤ � � � � � � � � �el se

� � � � � � � � �⇒ i f ( � � � � � � � � � �

) i f ( � � � � � � � � � �) ¥ � � ¢ � � � � � � � � � � �

el se� � � � � � � � �

⇒ i f ( � � � � � � � � � �) i f ( � � � � � � � � � �

) r et ur n “ C’ e’ n ess uno?” ; el se� � � � � � � � �

⇒ i f ( � � � � � � � � � �) i f ( � � � � � � � � � �

) r et ur n “ C’ e’ n ess uno?” ; el se� � � � � � � � � ¡ � � � � ¢ � � � � � � � � £ � ¢ ¤ � � � � � � � � �⇒ i f ( � � � � � � � � � �

) i f ( � � � � � � � � � �) r et ur n “ C’ e’ n ess uno?” ; el se ¦ � � � � § � � ¨ � © � � � � �

⇒ i f ( � � � � � � � � � �) i f ( � � � � � � � � � �

) r et ur n “ C’ e’ n ess uno?” ; el se suona- camp( ) ;

16

31

Vincoli sintattici contestuali

Il numero di parametri attuali di una chiamata di procedura deve essere egualeal numero dei parametri formali della dichiarazione.

Vincolo sintattico!

Ma:

lo strumento formale che usiamo (BNF) non è capace di esprimere

vincoli che dipendono dal contesto (delle dichiarazioni).

Soluzioni:

usare strumenti più potenti

per esempio: grammatiche contestuali

riscrittura di un non-terminale solo in un determinato contesto

no: non esistono tecniche automatiche di generazione di riconoscitori

usare controlli ad hoc

32

Sintassi o semantica ?

I vincoli contestuali

per esempio:

numero parametri attuali = parametri formali

un identificatore deve essere dichiarato prima dell’uso

compatibilità dei tipi in un assegnamento

ecc.

appartengono alla sintassi.

Ma tradizionalmente, nel gergo dei LP, si intende:

Sintassi: Quello che si descrive in BNF

Semantica: Il resto…

I vincoli contestuali sono dunque vincoli “semantici”…

17

33

Controlli “ semantici”

• Semantica Statica Vincoli (sintattici contestuali) determinabili al momento dellacompilazione

– var A: integer; tipo e allocazione di memoria per A

– int B[10]; tipo e allocazione di memoria per il vettore B

– float MyProcC(float x,float y){...}; parametri– X = 3.2; in Java errore compilazione se X è int

• Semantica Dinamica Vincoli determinabili durante l’esecuzione del programma:

Z= X/Y errore se Y = 0

Z= V[Y] errore se Y = 11 e V: array[0..9] of integer (Pascal)

Questi errori possono essere rilevati solo a run-time

Non può esistere un compilatore che rileva tutti i possibili errori che si verificheranno arun-time.

(E’ indecidibile sapere staticamente se si verificherà un errore in un programma)

34

Poss ibile?

L’azienda Macrosoft ha rilasciato un’applicazione di debugging H.

Dato un qualsiasi programma P:

H chiamata su P stampa 1 se P termina quando è applicato a se stesso;

H chiamata su P stampa 0 se P cicla quando è applicato a se stesso.

L’azienda Moon sostiene che Macrosoft racconta balle.

Chi ha ragione?

18

35

No!

Macrosoft ha preso una cantonata.

H non può esistere.

Supponiamo che esista. Sfruttando H, costruiamo una nuova applicazione G

che si comporta così:

G(P) = 1 se H(P) = 0

G(P) cicla se H(P) = 1

Scrivere G, sfruttando H come sottoprogramma è un gioco da ragazzi…

Ma cosa succede se chiamiamo G su se stessa?

G(G) = 1 sse H(G) = 0 sse G(G) cicla

G(G) cicla sse H(G) = 1 sse G(G) non cicla

assurdo! dunque G non può esistere, ovvero non può esistere H

36

Ma allora altre applicazioni non esistono…

Esiste un’applicazione T tale che:

T(P,x)=1 se P(x) termina

T(P,x)=0 se P(x) cicla ?

NO: T permetterebbe di costruire H:

H(P) = T(P,P)

Esiste un’applicazione Z tale che:

Z(P)=1 se P(x) è sempre lo stesso output per ogni x

Z(P)=0 in caso contrario ?

NO: Z permetterebbe di costruire H:

costruisci prima un’applicazione F che manipola programmi e si comporta così:

F(P) è un programma che, dato in input un generico x (che non viene usato), provaad eseguire P sull’input P. Se e quando tale esecuzione termina, F(P)(x) stampa 0.Altrimenti (ovviamente) F(P)(x) cicla.

Scrivere F non è problematico se si ha a disposizione un interprete (per eseguire P su P).

Ora, se esistesse Z, si potrebbe definire H:

H(P) = Z ( F (P)).

19

37

H(P) = Z ( F (P)) Infatti

Z(F(P)) = 1 se F(P)(x) e’ lo stesso per ogni input x se P(P) termina

Z(F(P) = 0 se F(P)(x) non e’ lo stesso per ogni input x

se P(P) non termina

38

Ma allora altre applicazioni non esistono…

Esiste un’applicazione Equiv tale che:

Equiv(P,Q)=1 se P e Q hanno la stessa semantica

Equiv(P,Q)=0 se P e Q sono distinti da almeno un input.?

NO: Equiv permetterebbe di costruire Z:

Scriviamo prima un programmino ZERO che stampa sempre 0.

Z(P) = Equiv (P, ZERO)

(suppodniamo per semplicita’ che il valore prodotto da P sia 0).

Il sogno dell’ingegneria del software è destinato a rimanere tale…

20

39

Semantica

• Serve per poter definire con esattezza ``cosa fa‘’ un programma

(e quindi sviluppare tecniche di ottimizzazione, debugging, verifica dicorrettezza, traduzione fra formalismi diversi ecc. ecc.)

• La definizione (semi) formale della semantica fa parte dello standard didefinizione di un linguaggio a partire dagli anni ‘80

• Vari metodi per definire la semantica di un linguaggio di programmazione

- Algebrica

- Assiomatica

- Operazionale

- Denotazionale

• Non esiste una metodologia standard universalmente accettata

40

Semantica Operazionale

• Ottenuta definendo un interprete del linguaggio L su di una macchina ospite i cuicomponenti sono descritti in modo matematico.

• Utile soprattutto perche’ fornisce direttamente un modello di implementazione

• E’ possibile definirla in modo formale e guidato dalla sintassi (SOS)

21

41

Structured Operational Semantics (SOS)

• Definizione della semantica in modo guidato dalla sintassi:

• Si definiscono delle regole di transizione che specificano i passi di computazioneper un costrutto composto A op B in termini di quelli dei componenti A e B

• Regole date nello stile della deduzione naturale:

Premessa

Conseguenza

42

SOS

• Dato che i costrutti che ci interessano in generale modificano una qualchenozione di stato, di solito le regole di transizione sono definite su configurazionidel tipo

<Comando, Stato>

Le regole specificano dunque transizioni del tipo

<C, σ > → <C`, σ`>

• Formalmente le regole definiscono (induttivamente) la relazione→ che dice come una configurazione evolve in un’altra

• L’insieme delle configurazioni e la relazione di transizione costituiscono unSistema di Transizione (TS)

22

43

Sistema di Transizione (TS)

• Un TS e’ definito da una quadrupla (S,I,F, →) dove

– S e’ l’insieme delle configurazioni

– I ⊆ S e’ l’insieme delle configurazioni iniziali

– F ⊆ S e’ l’insieme delle configurazioni finali

– → ⊆ S x S e’ una relazione di transizione

( scriviamo s → s’ per indicare (s,s’) ∈ →)

• Una sequenza di esecuzione e’ una sequenza di configurazioni

C1 C2 ….. Cn tale che:

– C1 ∈I,

– Cn ∈ F,

– Ci → Ci+1 per ogni 0 <= i < n

44

Sistema di Transizione (TS)

• Un TS e’ detto deterministico se per ogni c ∈C

esiste al piu’ un c’ tale che c → c’ .

• La relazione → e’ definita (induttivamente) da un insieme di regole del tipo

c1→ c1’ ……. cn → cn’

op (c1……. cn ) → op’ (c1’ ……. cn’ )

ovvero e’ il minimo insieme che soddisfa l’insieme delle regole date

23

45

Un mini-linguaggio imperativo

46

Semantica delle espressioni aritmetiche

24

47

Nota sulle regole

• Le regole usano metavariabili (n, X, a0 etc.) sui vari domini sintattici.

Una istanza di una regola si ottiene istanziando queste variabili a particolarinumeri, variabili, espressioni etc.

• Esempio di istanza

48

Nota sulle regole

• Le istanze delle regole si compongono in strutture ad albero dette

alberi di derivazione (o derivazioni) dove:

– tutte le premesse di istanze di regole sono conclusioni

di istanze di regole immediatamente sopra nell’albero;

– alla sommita’ dell’albero ci sono assiomi del tipo

<a,σ >

Esempio di derivazione:

25

49

Semantica delle espressioni booleane

50

Semantica delle espressioni booleane

26

51

Semantica dei comandi

52

Semantica del while