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

26
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 corretta relazioni tra segni e significato in qual modo frasi corrette e sensate sono usate relazioni tra segni, significato e utente Per un linguaggio eseguibile: – implementazione eseguire una frase corretta, rispettandone la semantica

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

Page 1: Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica regole di formazione: quando una frase è corretta relazioni tra segni attribuzione

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

Page 2: Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica regole di formazione: quando una frase è corretta relazioni tra segni attribuzione

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

Page 3: Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica regole di formazione: quando una frase è corretta relazioni tra segni attribuzione

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

Page 4: Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica regole di formazione: quando una frase è corretta relazioni tra segni attribuzione

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

Page 5: Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica regole di formazione: quando una frase è corretta relazioni tra segni attribuzione

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…

Page 6: Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica regole di formazione: quando una frase è corretta relazioni tra segni attribuzione

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.

Page 7: Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica regole di formazione: quando una frase è corretta relazioni tra segni attribuzione

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

Page 8: Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica regole di formazione: quando una frase è corretta relazioni tra segni attribuzione

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

Page 9: Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica regole di formazione: quando una frase è corretta relazioni tra segni attribuzione

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

Page 10: Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica regole di formazione: quando una frase è corretta relazioni tra segni attribuzione

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)

Page 11: Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica regole di formazione: quando una frase è corretta relazioni tra segni attribuzione

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).

Page 12: Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica regole di formazione: quando una frase è corretta relazioni tra segni attribuzione

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!

Page 13: Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica regole di formazione: quando una frase è corretta relazioni tra segni attribuzione

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 ?

Page 14: Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica regole di formazione: quando una frase è corretta relazioni tra segni attribuzione

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…

Page 15: Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica regole di formazione: quando una frase è corretta relazioni tra segni attribuzione

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( ) ;

Page 16: Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica regole di formazione: quando una frase è corretta relazioni tra segni attribuzione

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”…

Page 17: Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica regole di formazione: quando una frase è corretta relazioni tra segni attribuzione

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?

Page 18: Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica regole di formazione: quando una frase è corretta relazioni tra segni attribuzione

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)).

Page 19: Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica regole di formazione: quando una frase è corretta relazioni tra segni attribuzione

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…

Page 20: Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica regole di formazione: quando una frase è corretta relazioni tra segni attribuzione

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)

Page 21: Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica regole di formazione: quando una frase è corretta relazioni tra segni attribuzione

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)

Page 22: Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica regole di formazione: quando una frase è corretta relazioni tra segni attribuzione

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

Page 23: Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica regole di formazione: quando una frase è corretta relazioni tra segni attribuzione

23

45

Un mini-linguaggio imperativo

46

Semantica delle espressioni aritmetiche

Page 24: Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica regole di formazione: quando una frase è corretta relazioni tra segni attribuzione

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:

Page 25: Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica regole di formazione: quando una frase è corretta relazioni tra segni attribuzione

25

49

Semantica delle espressioni booleane

50

Semantica delle espressioni booleane

Page 26: Sintassi e semantica - Scienza e Ingegneria - DISIgabbri/local/3.sintassi.sem.pdf · – pragmatica regole di formazione: quando una frase è corretta relazioni tra segni attribuzione

26

51

Semantica dei comandi

52

Semantica del while