Corso di Laurea in “ITPS” · Vogliamo descrivere il linguaggio delle stringhe palindrome...

148
1 Linguaggi di Programmazione Corso di Laurea in “ITPS” Descrizione dei Linguaggi di programmazione Valeria Carofiglio (Questo materiale è una rivisitazione del materiale prodotto da Nicola Fanizzi)

Transcript of Corso di Laurea in “ITPS” · Vogliamo descrivere il linguaggio delle stringhe palindrome...

1

Linguaggi di ProgrammazioneCorso di Laurea in “ITPS”

Descrizione dei Linguaggi di programmazione

Valeria Carofiglio

(Questo materiale è una rivisitazione del materiale prodotto da Nicola Fanizzi)

2

Argomenti

• Introduzione• Sintassi e Lessico

– Grammatiche, derivazioni, alberi, ambiguità• Semantica• Pragmatica• Implementazione

3

Definireun Linguaggio di Programmazione

Linguaggio di programmazioneUna notazione (linguaggio artificiale)

per descrivere algoritmi e strutture datidestinatario della comunicazione = calcolatore

• Linguistica => per poter descrivere un linguaggio:– Sintassi

• Lessico • (Morfologia)

– Semantica– Pragmatica

Studio dei Livelli di descrizione di

un linguaggio

4

Definireun Linguaggio di Programmazione

Linguaggio di programmazioneUna notazione (linguaggio artificiale)

per descrivere algoritmi e strutture datidestinatario della comunicazione = calcolatore

• Linguistica => per poter descrivere un linguaggio:– Sintassi

• Lessico • (Morfologia)

– Semantica– Pragmatica

• In informatica c'è un altro livello:– Implementazione

Studio dei Livelli di descrizione di

un linguaggio

5

Sintassi: Una relazione tra segni“quali sono le frasi corrette ?”

6

Sintassi: Una relazione tra segni“quali sono le frasi corrette ?”

Dato un alfabeto:

I°Stadio: Lessico“quali sequenze di simbolicostituiscono le parole del

linguaggio ?”

Esempio: il caso del linguaggio naturale (Italiano)

Alfabeto latino su 22 lettere:{A..Z }

Livello lessicaleParole legali in italiano:

sequenze corrette di lettere

7

Sintassi: Relazione tra segni“quali sono le frasi corrette ?”

Dato un alfabeto:

I°Stadio: Lessico“quali sequenze di simbolicostituiscono le parole del

linguaggio ?”

• Relazione tra simbolidell'alfabeto

II°Stadio“quali sequenze di parole

costituiscono le frasidel linguaggio ?”

Esempio: il caso del linguaggio naturale (Italiano)

Alfabeto latino su 22 lettere:{A..Z }

Livello lessicaleParole legali in italiano:

sequenze corrette di lettere

Frasi legali in Italiano: sequenze corrette di parole

Livello morfologico

8

Semantica: Relazione tra segni e significati

“cosa significa una frase corretta ?”Difficile in linguaggio naturale/ Più semplice nei linguaggi artificiali

Esempio:

Il significato di un programma potrebbe essere la funzione matematica che quel programma computa

9

Pragmatica:“Come usare una frase corretta e sensata?”

Punto di vista del programmatore:

Frasi con lo stesso significato possono essere usate da due persone in modo diverso

Contesti linguistici diversi possono richiedere l’uso di frasi diverse

10

Implementazone: Livello esistente solo per i LdP

“Come eseguire una frase correttarispettandone la semantica?”

Punto di vista del progettista (Software o del linguaggio)

Mediante quale processo le frasi operative del linguaggio realizzano lo stato di cose di cui parlano

(descritto dall’implementazione del linguaggio)

11

SintassiL= { stringhe di caratteri su un certo alfabeto}

Regole sintattiche

specificano quali stringhe appartengono ad L

L Naturale

Artificiale

Numerose

complesse

Poche regole

Se L è finito: possiamo elencare tutte le parole di L (es: Il vocabolario di italiano è un volume finito)

I LdP possono essere costituiti anche da un numero infinito di parole(lessico infinito)

12

Sintassi: gli elementi che ci servnoElementi lessicali di un LdP (lessemi)

(unità del livello sintattico più basso (lessico) di un linguaggio )Identificatori costanti operatori punteggiatura

Token (simboli)(categorie (astrazioni) di lessemi )

Index := 3 * count + 5;

semicolon;num5plus+idcounttimes*num3assign:=idindex

TokenLessemiEsempio

Programma: frase di LdP (visto come <lessemi>)

13

SintassiDefinizione formale di un linguaggio

Per generazioneL definito su alfabeto ∑

Rfrase verdetto

R è lo strumento per riconoscere le frasi di L

frase ∈∉ L

Per riconoscimento

Se L è infinito

R non è adatto per enumerare le frasi di L

Usato per verificare la correttezza sintattica di un

programma scritto in L

14

SintassiDefinizione formale di un linguaggio

Per riconoscimento Per generazioneL definito su alfabeto ∑

Rfrase verdetto

R è lo strumento per riconoscere le frasi di L

Se L è infinito

R non è adatto per enumerare le frasi di L

Usato per verificare la correttezza sintattica di un

programma scritto in L

L definito su alfabeto ∑

G

Push

Frase (qulaunque)

G è lo strumento per generarele frasi di L

frase ∈∉ L

15

SintassiDefinizione formale di un linguaggio

Per riconoscimento Per generazioneL definito su alfabeto ∑

Rfrase verdetto

R è lo strumento per riconoscere le frasi di L

Se L è infinito

R non è adatto per enumerare le frasi di L

Usato per verificare la correttezza sintattica di un

programma scritto in L

L definito su alfabeto ∑

G

Push

Frase (qulaunque)

G è lo strumento per generarele frasi di L

frase ∈∉ L

R: funziona per tentativi

G: aleatorietà della definizione della frase

16

SintassiDefinizione formale di un linguaggio

Per riconoscimento Per generazioneL definito su alfabeto ∑

Rfrase verdetto

R è lo strumento per riconoscere le frasi di L

Se L è infinito

R non è adatto per enumerare le frasi di L

Usato per verificare la correttezza sintattica di un

programma scritto in L

L definito su alfabeto ∑

G

Push

Frase (qulaunque)

G è lo strumento per generarele frasi di L

frase ∈∉ L

R: funziona per tentativi

G: aleatorietà della definizione della frase

Importante scoperta:

Stretta connessione tra R e G:

Il meccanismo di R è basato su quello di G

17

Metodi formaliper la definizione della sintassi

(strumenti generativi)J.Backus

N.Chomsky1950: Inventano la stessa notazione anche se in

contesti diversi

18

Metodi formaliper la definizione della sintassi

(strumenti generativi)

(Linguistica) Chomsky:Specifica 4 classi di strumenti

generativi (grammatiche)

10

23

4 classi di linguaggi

Classe 2 Gram.non-contestualià sintassi

Classe 3 Gram. Regolarià lessico

J.Backus

N.Chomsky1950: Inventano la stessa notazione anche se in

contesti diversi

19

Metodi formaliper la definizione della sintassi

(strumenti generativi)

(Linguistica) Chomsky:Specifica 4 classi di strumenti

generativi (grammatiche)

10

23

4 classi di linguaggi

(Informatica) Backus:Presenta Algol 60

(sintassi specificata in BNF)

BNF (Backus Naur Form)

Quasi equivalente allo strumento di tipo 2 di chomsky

Classe 2 Gram.non-contestualià sintassi

Classe 3 Gram. Regolarià lessicometalinguaggio

J.Backus

N.Chomsky1950: Inventano la stessa notazione anche se in

contesti diversi

20

EsempioVogliamo descrivere il linguaggio delle stringhe palindrome

costruite a partire dai simboli a e b

A= {a,b} L={a,b, aa, bb, aaa, …, abba, aabaa}Definizione ricorsiva:

21

EsempioVogliamo descrivere il linguaggio delle stringhe palindrome

costruite a partire dai simboli a e b

A= {a,b} L={a,b, aa, bb, aaa, …, abba, aabaa}Definizione ricorsiva:

• a e b sono palindrome (base)• Se s è palindroma (passo)

– asa e bsb sono palindrome

22

EsempioVogliamo descrivere il linguaggio delle stringhe palindrome

costruite a partire dai simboli a e b

A= {a,b} L={a,b, aa, bb, aaa, …, abba, aabaa}Definizione ricorsiva:

• a e b sono palindrome (base)• Se s è palindroma (passo)

– asa e bsb sono palindromea, aaa, aba, ababa, …. Stringhe di lunghezza

dispari su A

23

EsempioVogliamo descrivere il linguaggio delle stringhe palindrome

costruite a partire dai simboli a e b

A= {a,b} L={a,b, aa, bb, aaa, …, abba, aabaa}Definizione ricorsiva:

• a e b sono palindrome (base)• Se s è palindroma (passo)

– asa e bsb sono palindrome• Stringa vuota

a, aaa, aba, ababa, …. Stringhe di lunghezza

dispari su A

Per stringhe di lunghezza pari

24

EsempioVogliamo descrivere il linguaggio delle stringhe palindrome

costruite a partire dai simboli a e b

A= {a,b} L={a,b, aa, bb, aaa, …, abba, aabaa}Definizione ricorsiva:

• a e b sono palindrome (base)• Se s è palindroma (passo)

– asa e bsb sono palindrome• Stringa vuota

a, aaa, aba, ababa, …. Stringhe di lunghezza

dispari su A

Per stringhe di lunghezza pari

Se s è una stringa palindroma Esiste una

successione di regole sintattiche che la costruisce

25

Grammatiche non contestuali(o libere da contesto)

Dato un alfabeto A (finito e non vuoto) si costruisce l'insieme (infinito) A* di tutte le stringhe su A

– A* contiene anche la Stringa vuota (senza simboli di A) denotata con ε (un linguaggio formale è un sottoinsieme di A*)

• Grammatica G = (NT,T,R,S)– NT insieme di simboli non terminali o variabili– T insieme dei simboli terminali

• (es., A oppure A*)– R insieme di regole di produzione V → W con

• V ∈ NT• W ∈ (T ∪ NT)*

– S ∈ NT (scopo, simbolo distintivo, iniziale o di partenza)

26

EsempioGrammatica per stringhe di palindrome su

A={a,b}• G = ({P}, A, R, P) con

R = {P → εP → aP → bP → aPaP → bPb}

27

Esempio2Grammatica per descrivere le espressioni aritmetiche tra identificatori

costituiti da sequenze finite di “a” e “b” (su op. unari e binari)

• G = ({E,I}, {a,b,+,*,-,(,)}, R, E) conR = {

1. E → Ι2. E → E+E3. E → E*E4. E → E-E5. E → -E6. E → (E)7. I → a8. I → b9. I → Ιa10. I → Ιb}

28

Esempio2Grammatica per descrivere le espressioni aritmetiche tra identificatori

costituiti da sequenze finite di “a” e “b” (su op. unari e binari)

• G = ({E,I}, {a,b,+,*,-,(,)}, R, E) conR = {

1. E → Ι2. E → E+E3. E → E*E4. E → E-E5. E → -E6. E → (E)7. I → a8. I → b9. I → Ιa10. I → Ιb}

Per definire una espressione aritmetica

Per definire un Identificatore

29

Derivazione: aspetto operativo delle grammatiche

Una derivazione consiste nella ripetuta applicazione di regole di una grammatica

Grammatica per descrivere le espressioni aritmetiche

G = ({E,I}, {a,b,+,*,-,(,)}, R, E) conR = {

1. E → Ι2. E → E+E3. E → E*E4. E → E-E5. E → -E6. E → (E)7. I → a8. I → b9. I → Ιa10. I → Ιb}

La stringa

ab*(a+b)È coprretta secondo la

grammatica data

Applicazione ripetuta regole di produzione

ßàregole di riscrittura

(NOT: ⇒)

30

Derivazione: aspetto operativo delle grammatiche

Una derivazione consiste nella ripetuta applicazione di regole di una grammatica

Grammatica per descrivere le espressioni aritmetiche

G = ({E,I}, {a,b,+,*,-,(,)}, R, E) conR = {

1. E → Ι2. E → E+E3. E → E*E4. E → E-E5. E → -E6. E → (E)7. I → a8. I → b9. I → Ιa10. I → Ιb}

La stringa ab*(a+b)È corretta secondo la grammatica

Applicazione ripetuta

(E ⇒3E*E ⇒1I *E

⇒10Ib *E⇒7 ab *E⇒6 ab*(E)

⇒2 ab*(E+E)⇒1 ab *(I+E)⇒7 ab*(a+E)⇒1 ab*(a+I)⇒8 ab*(a+b)

31

Derivazione: aspetto operativo delle grammatiche

Una derivazione consiste nella ripetuta applicazione di regole di una grammatica

Grammatica per descrivere le espressioni aritmetiche

G = ({E,I}, {a,b,+,*,-,(,)}, R, E) conR = {

1. E → Ι2. E → E+E3. E → E*E4. E → E-E5. E → -E6. E → (E)7. I → a8. I → b9. I → Ιa10. I → Ιb}

La stringa ab*(a+b)È corretta secondo la grammatica

Applicazione ripetuta

(E ⇒3E*E ⇒1I *E

⇒10Ib *E⇒7 ab *E⇒6 ab*(E)

⇒2 ab*(E+E)⇒1 ab *(I+E)⇒7 ab*(a+E)⇒1 ab*(a+I)⇒8 ab*(a+b)

Notazione

E ⇒∗

(ab*(a+b))

32

DerivazioneFissata una grammatica

G = (NT,T,R,S) Assegnate due stringhe

“v” e “w” su NT ∪ T------------------

• Da v si deriva direttamente w (v ⇒ w)– Se w si ottiene da v sostituendo ad un simbolo non

terminale V di v il corpo di una regola di produzione di R la cui testa sia V

• Da v si deriva w (v ⇒∗ w) – Se esiste una sequenza finita (anche vuota) di

derivazioni dirette: v ⇒ wo ⇒ w1 ⇒ … ⇒ w

33

Linguaggio generato da una grammatica

Il linguaggio generato da una grammaticaG = (NT,T,R,S) è costituito

dall'insieme delle stringhe derivabili dal simbolo iniziale di G

Formalmente: L(G) = { ω ∈ Τ∗ | S ⇒∗ ω}

Definisce un linguaggio su T*

34

Backus-Naur Form (BNF)Idea di fondo:

astrazione per definire le strutture sintattiche(Token-Simboli)

Es (C):Istruzione di assegnazioneAssignà var = Expr

L’astrazione assign è definita come una istanza dell’astrazione varseguita dal lessema = seguita da una istanza dell’astrazione Expr

35

Backus-Naur Form (BNF)Idea di fondo:

astrazione per definire le strutture sintattiche(Token-Simboli)

Es (C):Istruzione di assegnazioneAssignà var = Expr

L’astrazione assign è definita come una istanza dell’astrazione varseguita dal lessema = seguita da una istanza dell’astrazione Expr

Astrazione ≡ simbolo non terminale

Struttura sintattica/Token/lessema ≡simbolo terminale

Grammatica ≡ insieme di regole

36

Regole BNF• Una regola ha una parte sinistra (left-hand

side: LHS) e una parte destra (right-hand side: RHS), che consistono di simboli terminali e non-terminali

LHS ::= RHSEs:Istruzione di assegnazione

<Assign >::= <var> = <Expr>• Una regola per un simbolo non-terminale può

avere più d'una parte destra, separate dal simbolo “ | “

37

Regole BNF• La freccia “à” è sostituita da “::=”• I simboli non terminali sono scritti tra parentesi

angolari <…> – (maiuscoli nelle grammatiche di Chomsky)

38

Esempio3Grammatica per descrivere le espressioni aritmetiche tra identificatori

costituiti da sequenze finite di “a” e “b” (su op. + * unario e binario)

• G = ({E,I}, {a,b,+,*,-,(,)}, R, E) conR = {

1. E → Ι2. E → E+E3. E → E*E4. E → E-E5. E → -E6. E → (E)7. I → a8. I → b9. I → Ιa10. I → Ιb}

BNF<E> ::= <I> | <E> + <E> |

<E>*<E>|<E>-<E> |-<E>| (<E>)

39

Esempio4

<program> ::= <stmts><stmts> ::= <stmt> | <stmt> ; <stmts><stmt> ::= <var> = <expr><expr> ::= <term> + <term> | <term> - <term><term> ::= <var> | const <var> ::= a | b | c | d

40

Osserviamo che..La derivazione di una stringa

è un processorigidamente sequenziale

Alcuni passi devonoessere effettuatiin un certo ordine

Altri passi possonoessere scambiatid’ordine

La stringa ab*(a+b)È corretta secondo la grammatica

Applicazione ripetuta

(E ⇒3E*E ⇒1I *E

⇒10Ib *E⇒7 ab *E⇒6 ab*(E)

⇒2 ab*(E+E)⇒1 ab *(I+E)⇒7 ab*(a+E)⇒1 ab*(a+I)⇒8 ab*(a+b)

41

Derivazioni canoniche• Una derivazione sinistra (leftmost

derivation) è una derivazione nella quale si espande il non-terminale più a sinistra in ogni forma di frase intermedia

• Analogamente si definisce la derivazione destra(rightmost derivation)

NB: Ci sono derivazioni che non sono né destre né

sinistre

42

Alcuni passi della derivazionepossono essere scambiati

App.ripetuta

(E ⇒3E*E ⇒1I *E

⇒10Ib *E⇒7 ab *E⇒6 ab*(E)

⇒2 ab*(E+E)⇒1 ab *(I+E)⇒7 ab*(a+E)⇒1 ab*(a+I)⇒8 ab*(a+b)

App.ripetuta

(E ⇒3E*E ⇒6E *(E)

⇒2 E * (E+E)⇒1 E *(E+I)⇒8 E * (E+b) ⇒1 E * (I+b)⇒7 E * (a+b)

⇒1 I*(a+b)⇒10 Ib*(a+b)⇒7 ab*(a+b)

Grammatica per descrivere le espressioni aritmetiche

G = ({E,I}, {a,b,+,*,-,(,)}, R, E) conR = {

1. E → Ι2. E → E+E3. E → E*E4. E → E-E5. E → -E6. E → (E)7. I → a8. I → b9. I → Ιa10. I → Ιb}

43

Alcuni passi della derivazionepossono essere scambiati

App.ripetuta

(E ⇒3E*E ⇒1I *E

⇒10Ib *E⇒7 ab *E⇒6 ab*(E)

⇒2 ab*(E+E)⇒1 ab *(I+E)⇒7 ab*(a+E)⇒1 ab*(a+I)⇒8 ab*(a+b)

App.ripetuta

(E ⇒3E*E ⇒6E *(E)

⇒2 E * (E+E)⇒1 E *(E+I)⇒8 E * (E+b) ⇒1 E * (I+b)⇒7 E * (a+b)

⇒1 I*(a+b)⇒10 Ib*(a+b)⇒7 ab*(a+b)

Grammatica per descrivere le espressioni aritmetiche

G = ({E,I}, {a,b,+,*,-,(,)}, R, E) conR = {

1. E → Ι2. E → E+E3. E → E*E4. E → E-E5. E → -E6. E → (E)7. I → a8. I → b9. I → Ιa10. I → Ιb}

Utilità della dervazione in forma

di albero

Deriv. destra Deriv. sinistra

44

Derivazione in Forma di albero(un esempio)

App.ripetuta

(E ⇒3E*E ⇒6E *(E)

⇒2 E * (E+E)⇒1 E *(E+I)⇒8 E * (E+b) ⇒1 E * (I+b)⇒7 E * (a+b)

⇒1 I*(a+b)⇒10 Ib*(a+b)⇒7 ab*(a+b)

EEE

I

I b

a

*

(

E

E E

I

)E

+

I

a b

45

AlberiStruttura costituita da un insieme

di nodi NSe non vuota si distinguono:• La radice r• Un partizionamento (S1,S2,...,Sn)

dei nodi di N \ {r}dove ogni Si è strutturato ad albero

EEE

I

I b

a

*

(

E

E E

I

)E

+

I

a b

46

AlberiStruttura costituita da un insieme

di nodi NSe non vuota si distinguono:• La radice r• Un partizionamento (S1,S2,...,Sn)

dei nodi di N \ {r}dove ogni Si è strutturato ad albero

EEE

I

I b

a

*

(

E

E E

I

)E

+

I

a b

47

AlberiStruttura costituita da un insieme

di nodi NSe non vuota si distinguono:• La radice r• Un partizionamento (S1,S2,...,Sn)

dei nodi di N \ {r}dove ogni Si è strutturato ad albero

EEE

I

I b

a

*

(

E

E E

I

)E

+

I

a b

Grafo connesso T = (N,A)N = insieme dei nodi;

A = insieme degli archi (ni, nj) – |N| = |A|+1– un Nodo n padre di tutti i nodi figli

(ordinati) m1,...,mp, tali che (n, mj) ∈ Α– radice r, livello(r) = 0– Se livello(n) = i

allora m tale che (n,m) ∈ A: livello(m) = i+1

48

Albero di derivazione

Rappresentazione gerarchica di una derivazione:

• I nodi sono etichettati con elementi di T ∪ NT ∪ {ε}

– Nodo radice = S– Nodo interno (con figli) è un A ∈ NT:

• Se i figli di A sono etichettati X1...Xndove ∀Xi ∈ T ∪ NT, allora deve esistere in R la regola

A → X1...Xn

• Se ε è l'unico figlio di A, allora deve esistere in R la regola

A → ε– Nodi foglia (senza figli) sono simboli

di T ∪ {ε}

Data una grammatica G = (NT,T,R,S)

EEE

II b

a

*

(

EE E

I

)E

+

I

a b

49

Albero di derivazione: Altro esempio

<program>

<stmts>

<stmt>

consta

<var>

=

<expr>

<var>

b

<term>

+

<term>

<program> ::= <stmts><stmts> ::= <stmt>

| <stmt> ; <stmts><stmt> ::= <var> = <expr><var> ::= a | b | c | d<expr> ::= <term> + <term>

| <term> - <term><term> ::= <var> | const

50

Osserviamo che…

App.ripetuta

(E ⇒3E*E ⇒1I *E

⇒10Ib *E⇒7 ab *E⇒6 ab*(E)

⇒2 ab*(E+E)⇒1 ab *(I+E)⇒7 ab*(a+E)⇒1 ab*(a+I)⇒8 ab*(a+b)

App.ripetuta

(E ⇒3E*E ⇒6E *(E)

⇒2 E * (E+E)⇒1 E *(E+I)⇒8 E * (E+b) ⇒1 E * (I+b)⇒7 E * (a+b)

⇒1 I*(a+b)⇒10 Ib*(a+b)⇒7 ab*(a+b)

Albero della derivazione uguale

Deriv. destra Deriv. sinistra

EEE

II b

a

*

(

EE E

I

)E

+

I

a b

51

Osserviamo che…

App.ripetuta

(E ⇒3E*E ⇒1I *E

⇒10Ib *E⇒7 ab *E⇒6 ab*(E)

⇒2 ab*(E+E)⇒1 ab *(I+E)⇒7 ab*(a+E)⇒1 ab*(a+I)⇒8 ab*(a+b)

App.ripetuta

(E ⇒3E*E ⇒6E *(E)

⇒2 E * (E+E)⇒1 E *(E+I)⇒8 E * (E+b) ⇒1 E * (I+b)⇒7 E * (a+b)

⇒1 I*(a+b)⇒10 Ib*(a+b)⇒7 ab*(a+b)

Albero della derivazione uguale

Deriv. destra Deriv. sinistra

EEE

II b

a

*

(

EE E

I

)E

+

I

a b

IMPORTANTE PER L’ANALISI SINTATTICA DI UN LdPLa struttura dell’albero (attraverso i sottoalberi) esprime la

struttura logica che la grammatica assegna alla stringa

52

Osserviamo che…

App.ripetuta

(E ⇒2E+E ⇒3 E*E +E ⇒1 I * E +E⇒7 a * E+ E⇒1 a * I+E ⇒8 a * b+E

⇒1 a * b + I⇒7 a* b +a

Deriv. destra

IMPORTANTE PER L’ANALISI SINTATTICA DI UN LdPLa struttura dell’albero (attraverso i sottoalberi) esprime la

struttura logica che la grammatica assegna alla stringa

Grammatica per descrivere le espressioni aritmetiche

G = ({E,I}, {a,b,+,*,-,(,)}, R, E) conR = {

1. E → Ι2. E → E+E3. E → E*E4. E → E-E5. E → -E6. E → (E)7. I → a8. I → b9. I → Ιa10. I → Ιb}

53

Osserviamo che…

Deriv. destra

IMPORTANTE PER L’ANALISI SINTATTICA DI UN LdPLa struttura dell’albero (attraverso i sottoalberi) esprime la

struttura logica che la grammatica assegna alla stringa

App.ripetuta

(E ⇒2E+E ⇒3 E*E +E ⇒1 I * E +E⇒7 a * E+ E⇒1 a * I+E ⇒8 a * b+E

⇒1 a * b + I⇒7 a* b +a

E

EE +

E E

I

*

I

a b

I

a

54

Osserviamo che…

Deriv. destra

IMPORTANTE PER L’ANALISI SINTATTICA DI UN LdPLa struttura dell’albero (attraverso i sottoalberi) esprime la

struttura logica che la grammatica assegna alla stringa

App.ripetuta

(E ⇒2E+E ⇒3 E*E +E ⇒1 I * E +E⇒7 a * E+ E⇒1 a * I+E ⇒8 a * b+E

⇒1 a * b + I⇒7 a* b +a

E

EE +

E E

I

*

I

a b

I

a

Moltiplica a per b poi somma a

55

Ambiguità nelle grammatiche(esempio)

Alberi di derivazione per la stringa a * b + a

E

EE +

E E

I

*

I

a b

I

a

E

EE

+I

a

E E

I

*

I

b a

Due alberi diversi producono la stessa stringa

56

Ambiguità nelle grammatiche(esempio)

Alberi di derivazione per la stringa a * b + a

E

EE +

E E

I

*

I

a b

I

a

E

EE

+I

a

E E

I

*

I

b a

Due alberi diversi producono la stessa stringaA seconda di come la derivazione è costruita

cambia la precedenza tra i due operatori aritmetici cambia

57

Ambiguità nelle grammatiche

Una grammatica è ambigua se e solo se essa genera (almeno) una stringa (forma di

frase) che abbia due o più alberi di derivazione distinti

NB: ma una stringa può però avere più derivazioni distinte senza che la grammatica sia ambigua

58

Disambiguità nelle grammatiche(esempio)

Grammatica AMBIGUA per descriverele espressioni aritmetiche

G = ({E,I}, {a,b,+,*,-,(,)}, R, E) conR = {E ::= I | E+E |E*E |E-E|

-E| (E)I ::= a| b| Ia |Ib}

Grammatica NON AMBIGUA per descrivere le espressioni

aritmetiche

G = ({E,T,A,I}, {a,b,+,*,-,(,)}, R’, E) con

R = {E ::= T | T + E | T - ET ::= A | A * T | A ::= I | -A | ( E ) I ::= a | b | Ia | Ib

59

Disambiguità nelle grammatiche(esempio)

Grammatica AMBIGUA per descriverele espressioni aritmetiche

G = ({E,I}, {a,b,+,*,-,(,)}, R, E) conR = {E ::= I | E+E |E*E |E-E|

-E| (E)I ::= a| b| Ia |Ib}

Grammatica NON AMBIGUA per descrivere le espressioni

aritmetiche

G = ({E,T,A,I}, {a,b,+,*,-,(,)}, R’, E) con

R = {E ::= T | T + E | T - ET ::= A | A * T | A ::= I | -A | ( E ) I ::= a | b | Ia | Ib

Rappresenta la nozione di precedenza degli operatori

60

Disambiguità nelle grammatiche(esempio)

Grammatica AMBIGUA per descriverele espressioni aritmetiche

G = ({E,I}, {a,b,+,*,-,(,)}, R, E) conR = {E ::= I | E+E |E*E |E-E|

-E| (E)I ::= a| b| Ia |Ib}

Grammatica NON AMBIGUA per descrivere le espressioni

aritmetiche

G = ({E,T,A,I}, {a,b,+,*,-,(,)}, R’, E) con

R = {E ::= T | T + E | T - ET ::= A | A * T | A ::= I | -A | ( E ) I ::= a | b | Ia | Ib

Rappresenta la nozione di precedenza degli operatori

Gli operatori dello stesso livello di precedenza vengono

associati a destra:

a + b +a ßà a + (b + a)

61

Disambiguità nelle grammatiche(esempio)

Grammatica AMBIGUA per descriverele espressioni aritmetiche

G = ({E,I}, {a,b,+,*,-,(,)}, R, E) conR = {E ::= I | E+E |E*E |E-E|

-E| (E)I ::= a| b| Ia |Ib}

Grammatica NON AMBIGUA per descrivere le espressioni

aritmetiche

G = ({E,T,A,I}, {a,b,+,*,-,(,)}, R’, E) con

R = {E ::= T | T + E | T - ET ::= A | A * T | A ::= I | -A | ( E ) I ::= a | b | Ia | Ib

Rappresenta la nozione di precedenza degli operatori

Gli operatori dello stesso livello di precedenza vengono

associati a destra:

a + b +a ßà a + (b + a)

Osserviamo che:

La disambiguazione della grammatica è pagata in termini di

complessità

LdP a volte molto contorti

62

Caso dell'istruzione condizionaleGrammatica ambigua per il costrutto

“if” in Java<istruzione> ::= ... <if-else> | <altra><altra> ::= ... <blocco> | <vuota> | <return><if-else> ::= if (<espressione>) <istruzione> |

| if (<espressione>) <istruzione> else <istruzione>

63

Caso dell'istruzione condizionaleGrammatica ambigua per il costrutto

“if” in Java<istruzione> ::= ... <if-else> | <altra><altra> ::= ... <blocco> | <vuota> | <return><if-else> ::= if (<espressione>) <istruzione> |

| if (<espressione>) <istruzione> else <istruzione>

Quanti alberi per la stringa seguente ?if (<espressione>) if(<espressione>) <istruzione> else <istruzione>

64

Caso dell'istruzione condizionaleGrammatica ambigua per il costrutto

“if” in Java<istruzione> ::= ... <if-else> | <altra><altra> ::= ... <blocco> | <vuota> | <return><if-else> ::= if (<espressione>) <istruzione> |

| if (<espressione>) <istruzione> else <istruzione>

Quanti alberi per la stringa seguente ?if (<espressione>) if(<espressione>) <istruzione> else <istruzione>

if (<espressione>) if(<espressione>)

<istruzione>

else <istruzione>

if (<espressione>) if(<espressione>)

<istruzione>

else <istruzione>

65

Caso dell'istruzione condizionale

Grammatica non ambigua per il costrutto“if” in Java

<istruzione> ::= ... <if> | <if -else> | <altra><altra> ::= ... <blocco> | <vuota> | <return><no-if-breve> ::= <altra> | <if-else2><if> ::= if (<espressione>) <istruzione><if-else> ::= if (<espressione>) <no-if-breve> else <istruzione> <if-else2> ::= if (<espressione>) <no-if-breve> else <no-if-breve>

Il ramo else appartiene all’if più vicino

66

Metodi Formali perDescrivere la Sintassi

• Grammatiche e riconoscitori• Backus-Naur Form e Grammatiche libere

da contesto– Metodi più diffusi per descrivere la sintassi

dei linguaggi di programmazione• Extended BNF

– Migliora la leggibilità e la scrivibilità della BNF

67

Extended BNF(EBNF)

• Opzionalità– Le parti opzionali sono poste tra parentesi quadre [ ]– <proc_call> ::= ident [(<expr_list>)]

• Disgiunzione– Le parti destre alternative sono poste tra parentesi tonde () e

separate con barre verticali |– <term> ::= <term> (+|-) const

• Ripetizione– Ripetizioni (di 0 o più elementi) sono poste tra parentesi graffe {

}– <ident> ::= letter {letter | digit}

Estensioni della BNF

68

BNF e EBNF• BNF

<expr> ::= <expr> + <term>| <expr> - <term>| <term>

<term> ::= <term> * <factor>| <term> / <factor>| <factor>

• EBNF<expr> ::= <term> {(+ | -) <term>}<term> ::= <factor> {(* | /) <factor>}

Grammatica NON AMBIGUA per descrivere le espressioni

aritmetiche

G = ({E,T,A,I}, {a,b,+,*,-,(,)}, R’, E) con

R = {E ::= T | T + E | T - ET ::= A | A * T | A ::= I | -A | ( E ) I ::= a | b | Ia | Ib

69

Vincoli contestualiCorrettezza di una frase può dipendere dal

contesto nel quale la frase si trova:

– Identificatore da dichiarare prima dell'uso– Numero dei parametri effettivi pari al numero di

parametri formali– Espressione nella parte destra di un assegnazione di

tipo compatibile con quello della variabile nella parte sinistra

– Non modificabilità della variabile che controlla l'istruzione for

– Inizializzare ogni variabile prima dell'uso– Metodi sovrascritti da metodi con firma uguale (o

compatibile)

70

Vincoli contestualiCorrettezza di una frase può dipendere dal

contesto in cui la frase si trova:– Identificatore da dichiarare prima dell'uso– Numero dei parametri effettivi pari al numero di

parametri formali– Espressione nella parte destra di un assegnazione di

tipo compatibile con quello della variabile nella parte sinistra

– Non modificabilità della variabile che controlla l'istruzione for

– Inizializzare ogni variabile prima dell'uso– Metodi sovrascritti da metodi con firma uguale (o

compatibile)

NON si possono esprimere

con unagrammatica

Non Contestuale

71

Grammatiche contestuali e Vincoli contestuali

Grammatiche contestuali per descrivere i vincoli contestualiDovere di cronaca

Le grammatiche contestuali hanno regole di produzione del tipo:

uAv à uwv con u,v,w ∈ T ∪ NT

Il simbolo non terminale A può essere riscritto come w solo se appare in un certo contesto (definito da u e v)

72

Grammatiche contestuali e Vincoli contestuali

Grammatiche contestuali per descrivere i vincoli contestualiDovere di cronaca

Le grammatiche contestuali hanno regole di produzione del tipo:

uAv à uwv con u,v,w ∈ T ∪ NT

Il simbolo non terminale A può essere riscritto come w solo se appare in un certo contesto (definito da u e v)

Perche tali grammatiche non vengono di fatto utilizzate

• Grammatiche molto pesanti

• Per le quali non esistono tecniche automatiche di generazione d i traduttori efficienti (che invece esistono per le grammatiche libere da contesto)

73

Vincoli contestuali esemantica statica

La necessità di gestire i vincoli della sintassi contestuale

porta alla nozione di semantica statica

– ossia verificabile sul testo del programma sorgente– Diversa dalla semantica dinamica

(che riguarda il significato del programma mentre gira)

Es. grammatiche con attributiGrammatiche libere + vincoli ed azioni

74

Sintassi o semantica?I vincoli contestuali appartengono alla

sintassi– Identificatore da dichiarare prima dell'uso– Numero dei parametri effettivi pari al numero di parametri

formali– Espressione nella parte destra di un assegnazione di tipo

compatibile con quello della variabile nella parte sinistra– ......

Tradizionalmente nei LdP si intende- sintassi: tutto ciò che si descrive mediante BNF

- Semantica: tutto il resto

I vincoli contestuali sono dunque vincoli semantici....

75

Controlli di tipo semanticoSemantica statica

vincoli contestuali determinabili al monentodella compilazione

- Var A: integer tipo e allocazione di memoria per A- int B[10] tipo e allocazione di memoria per il vettore B- Float myProgram(float x, integer y) {...} parametri- X=3.5 che tipo è x?

Semantica dinamicavincoli determinabili in fase di esecuzione del

programma- z=x/y errore se y=0- ....

76

CompilatoriAnalisi

Lessicale

AnalisiSintattica

AnalisiSemantica

GenerazioneForma Intermedia

Ottimizzazione

GenerazioneCodice

Tavoladei simboli

Gestioneerrori

programma sorgente

lista token

albero sintattico

codice intermedio

albero aumentato

codice intermedio

codice oggetto

77

Compilazione:analisi lessicaleDetta anche scanning o lexing

Da cui scanner (o lexer) è il (sotto)programma che la implementa

Lettura dei caratteri dal sorgente (da sinistra a destra in una passata) e costruzione di una lista di token

(le parole del linguaggio)es. la stringa a = 12 * indice++; genera 7 token:• id, assign, const, star, id, incremento,semicolon

78

Compilazione:analisi lessicaleDetta anche scanning o lexing

Da cui scanner (o lexer) è il (sotto)programma che la implementa

Lettura dei caratteri dal sorgente (da sinistra a destra in una passata) e costruzione di una lista di token

(le parole del linguaggio)es. la stringa a = 12 * indice++; genera 7 token:

– id, assign, const, star, id, incremento, semicolon

Per descrivere gli elementi del lessico basta una sottoclasse delle grammatiche libere detta delle

grammatiche regolari (o lineari)

79

Compilazione:analisi lessicaleDetta anche scanning o lexing

Da cui scanner (o lexer) è il (sotto)programma che la implementa

Lettura dei caratteri dal sorgente (da sinistra a destra in una passata) e costruzione di una lista di token

(le parole del linguaggio)es. la stringa a = 12 * indice++; genera 7 token:• a, =, 12, *, indice, ++

Per descrivere gli elementi del lessico basta una sottoclasse delle grammatiche libere detta delle

grammatiche regolari (o lineari)

(Linguistica) Chomsky:Specifica 4 classi di strumenti

generativi (grammatiche)

10

23

4 classi di linguaggi

Classe 2 Gram.non-contestualià sintassi

Classe 3 Gram. Regolarià lessico

80

Analisi lessicale e Grammatiche regolari

Grammatiche regolari per descrivere il lessico di un LdPDovere di cronaca

Le grammatiche regolari hanno regole di produzione del tipo:

A à uB AàBucon u ∈ T* e A,B ∈ NT

81

Analisi lessicale e Grammatiche regolari

Grammatiche regolari per descrivere il lessico di un LdPDovere di cronaca

Le grammatiche regolari hanno regole di produzione del tipo:

A à uB AàBu con u ∈ T* e A,B ∈ NT

Grammatica per descrivere le espressioni aritmetiche

G = ({E,I}, {a,b,+,*,-,(,)}, R, E) conR = {

1. E → Ι2. E → E+E3. E → E*E4. E → E-E5. E → -E6. E → (E)7. I → a8. I → b9. I → Ιa10. I → Ιb}

82

Analisi lessicale e Grammatiche regolari

Grammatiche regolari per descrivere il lessico di un LdPDovere di cronaca

Le grammatiche regolari hanno regole di produzione del tipo:

A à uB AàBucon u ∈ T* e A,B ∈ NT

Potere espressivo limitato

Es: non è possibile contare un numero arbitrario di caratteri (bilanciamento parentesi???)

Analisi lessicale: Verifica che la stringa in ingresso possa essere decomposta in token (ognuno descritto da una

grammatica regolare)

83

CompilatoriAnalisi

Lessicale

AnalisiSintattica

AnalisiSemantica

GenerazioneForma Intermedia

Ottimizzazione

GenerazioneCodice

Tavoladei simboli

Gestioneerrori

programma sorgente

lista token

albero sintattico

codice intermedio

albero aumentato

codice intermedio

codice oggetto

Grammatiche libere da contesto con insieme dei terminali = lista dei tokenottenuta

84

Compilazione: analisi sintatticaDetta anche parsing

Da cui parser è il (sotto)programma che la implementa

Lettura dei token dalla listae costruzione dell'albero di derivazione

(i token sono le foglie)Stringa non corretta nel linguaggio:se non si è in grado di costruire l'albero

Spesso lo scanner è un sottoprogramma chiamato dal parser

(lo scanner restituisce un token ad ogni invocazione del parser)

85

CompilatoriAnalisi

Lessicale

AnalisiSintattica

AnalisiSemantica

GenerazioneForma Intermedia

Ottimizzazione

GenerazioneCodice

Tavoladei simboli

Gestioneerrori

programma sorgente

lista token

albero sintattico

codice intermedio

albero aumentato

codice intermedio

codice oggetto

86

Compilazione: analisi semantica

Vengono effettuati i controlli dei vincoli contestuali

(ossia di semantica statica)

L'albero viene aumentatovia via con queste nuove informazioni

es. variabile: tipo, punto di dichiarazione, scope, ...

Per gli identificatori esse sono anche registrate nella tabella dei simboli

87

CompilatoriAnalisi

Lessicale

AnalisiSintattica

AnalisiSemantica

GenerazioneForma Intermedia

Ottimizzazione

GenerazioneCodice

Tavoladei simboli

Gestioneerrori

programma sorgente

lista token

albero sintattico

codice intermedio

albero aumentato

codice intermedio

codice oggetto

88

Compilazione: fasi finali• Generazione della forma intermedia

– Visita dell'albero per generare codice– Forma intermedia

• Ottimizzabile• Portabile

• Ottimizzazione– Rimozione codice inutile, espansione inline delle

chiamate di sottoprogrammi, fattorizzazione espressioni, ottimizzazione dei cicli

• Generazione del codice oggetto– Segue spesso un'altra fase di ottimizzazione

• es. assegnamento di variabili molto usate a registri

89

Sintassi e Semantica

NOGrandeSemantica

SIPiccolaSintassi

StandardizzazioneComplessità

Separate nella descrizione ma intimamente collegate

La sintassi dovrebbe suggerire la semantica

La semantica è guidata dalla sintassi

90

Semantica (dinamica)

• Specifica del linguaggio in modo da bilanciare– Esattezza

• (specifica non ambigua, a priori, di cosa ci si debba aspettareda costrutti sintatticamente corretti, indipendentemente dall’architettura della macchina cheesegue il programma)

– Flessibilità• (le molteplici implementazioni del LdP non devono essere

impedite.)

Per descrivere il significato dei programmi. E’ complessa:

91

Semantica (dinamica)

• Specifica del linguaggio in modo da bilanciare– Esattezza

• (specifica non ambigua, a priori, di cosa ci si debba aspettareda costrutti sintatticamente corretti, indipendentemente dall’architettura della macchina cheesegue il programma)

– Flessibilità• (le molteplici implementazioni del LdP non devono essere

impedite.)

Per descrivere il significato dei programmi. E’ complessa:

Uso di metodi formaliper descrivere

il significato dei programmi(derivati e adattati dai linguaggi artificiali della logica matematica)

92

Semantica (dinamica)

Semantica denotazionale(applicazione ai linguaggi di programmazione di tecniche

sviluppate per la semantica dei linguaggi logico-matematici)

I metodi formali: due grandi famiglie (ma ce ne sono altre)

Significato di un programma ßà Uso di funzione: descrive I/O del programma

Dominio e codominio della funzione sono strutture matematiche (I/O, ambienti, memoria)

93

Semantica (dinamica)

Semantica denotazionale(applicazione ai linguaggi di programmazione di tecniche

sviluppate per la semantica dei linguaggi logico-matematici)

I metodi formali: due grandi famiglie (ma ce ne sono altre)

Significato di un programma ßà Uso di funzione: descrive I/O del programma

Dominio e codominio della funzione sono strutture matematiche (I/O, ambienti, memoria)

Semantica operazionale(specifica del comortamento della macchina astratta, tramiteun formalismo a basso livello: Automi Assiomi algebrico-logici

Stati e transizioni (SOS))

Significato di un programma ßà Uso di formalismo di basso livello: descrive il comportamento dell ’interprete della macchina astratta

94

Semantica operazionaleOttenuta definendo un interprete del linguaggio L

su di una macchina ospite i cui componenti sono descritti in modo matematico

L’idea alla base:Dare la semantica di un linguaggio L

mediante la definizione del comportamento dell’interprete

(della macchina astratta che riconosce L) in corrispondenza di programmi scritti in linguaggio L

Ricordiamo il nostro obbiettivo:

Descrivere il significato di un programma scritto in linguaggio L in termini

di cosa ci si debba aspettare dall’uso dei costrutti corretti del linguaggio L

COSA FA IL PROGRAMMA?

95

Semantica operazionaleOttenuta definendo un interprete del linguaggio L

su di una macchina ospite i cui componenti sono descritti in modo matematico

L’idea alla base:Dare la semantica di un linguaggio L

mediante la definizione del comportamento dell’interprete

(della macchina astratta che riconosce L) in corrispondenza di programmi scritti in linguaggio L

Utile perché fornisce direttamente un modello di implementazione

Definibile in modo formale a partire dalla sintassi (Semantica Operazionale Strutturata)

96

Sintassi astratta per definire la semantica

Una descrizione sintattica che evidenzia la struttura sintattica essenziale dei vari costrutti del linguaggio

Alberi di derivazione che rispettano i vincoli contestuali

Strumento utile per chi pensa a come sia possibile manipolare un linguaggio

97

Partiamo dalla sintassiUn semplice linguaggio di programmazione

<Num> ::= 1|2|…… <Var>::= X1 ,X2…… <AExpr> ::=Num|Var|<AExpr> +<AExpr>| <AExpr> -<AExpr> <BExpr> ::=tt|ff|<AExpr> ==<AExpr>| ¬<BExpr>|

<BExpr> ∧<BExpr>

<Com> ::= skip |<Var> := <AExpr> | <Com> ; <Com>|if <BExpr> then <Com> else <Com>| while <BExpr> do <Com>

La grammatica è ambigua

Ma non importa in questo contesto

98

Semantica Operazionale Srutturata(SOS)

Definizione della semantica in modo guidato dalla sintassi

Si definiscono delle regole di transizioneche specificano

i passi della computazione di costrutti complessi del linguaggio

(es: Exp + Exp’) in termini dei passi della computazione di

costrutti componenti (es: Exp e Exp’)

99

I costrutti cui siamo interessati modificano una qualche nozione di stato

(in cui la macchina astratta si trova durante la computazione)

Regole definite su configurazioni del tipo

<Comando, Stato>

Not. ⟨C,σ⟩

Configurazioni ßà Stati in cui la macchina si trova durante il suo funzionamento (mentre l’interprete del linguaggio computa)

Semantica Operazionale Srutturata(SOS)

100

Regole sono definite su configurazioni del tipo…

<Comando, Stato>

⟨C,σ⟩

Una sequenza finita di coppie (X,n):Stato σ:

“nello stato σ la variabile X ha valore n”

(tutte le variabili su cui il comandoagisce)

Un albero di derivazione corretto

(sintassi astratta)

(es. una istruzione corretta e che rispetti i

vincoli contestuali in un programma scritto

in un LdP)

E’ definito con riferimento al modello di memoria adottato

(mantiene i valori delle variabili coinvolte nel

comando)

Semantica Operazionale Srutturata(SOS)

101

Semantica Operazionale Strutturata (SOS)

Tipi di transizioni tra configurazioni

Forma semplice di una transizione: in un solo passo

<Comando, Stato> → Stato’⟨c,σ⟩ → τ

σ: stato di partenzaτ: stato d'arrivo

es. comando nullo:⟨skip, σ⟩ → σ

102

Semantica Operazionale Strutturata (SOS)

Tipi di regole per la specifica di transizioni tra configurazioni

Forma composta di una transizione: in tanti piccoli passi

<Comando, Stato> → <Comando’, Stato’>⟨c,σ⟩ → ⟨c',τ⟩

σ: stato di partenzaτ: stato di arrivo

es. Comando “if then else”: ⟨if tt then C1 else C2 ,σ⟩ → ⟨C1,σ⟩

103

Semantica Operazionale Strutturata (SOS)

forma condizionale

Le premesse sono i prerequisiti della transizione (conseguenza)

premessa -----------------conseguenza

⟨c1,σ1⟩ → ⟨c'1,σ'1⟩ ⟨c2,σ2⟩ → ⟨c'2,σ'2⟩⟨c,σ⟩ → ⟨c',σ'⟩

Se c1, partendo dallo stato σ1, può fare un passo trasformandosi in c'1, nello stato σ'1

e c2 partendo da σ2 può fare un passo trasformandosi in c'2, nello stato σ'2

Allorail comando c partendo da σ può fare un passo trasformandosi in c' nello

stato σ'

104

Semantica delleespressioni aritmetiche

Le configurazioni

rappresentano gli stati in cui il sistema si trova ad operare mentre esegue il calcolo di una espressione

<Comando, Stato> ⟨C,σ⟩

Configurazioni ßà Stati in cui la macchina si trova durante il suo funzionamento

105

Semantica delleespressioni aritmetiche

Le transizioni

rappresentano il procedere del calcolo stesso dell’espressione

Una configurazione finale rappresenta il risultato del calcolo

<Comando, Stato> → <Comando’, Stato’>⟨C,σ⟩ → ⟨C',σ'⟩

“à” (relazione di transizione), ovvero come si passa da una configurazione all ’altra

106

Semantica delleespressioni aritmetiche

(semplificate)<AExpr> ::= <AExpr> + <AExpr> | <Num>

Come si calcola il valore di una espressione in questo linguaggio?In linguaggio naturale:

107

Semantica delleespressioni aritmetiche

(semplificate)

Come si calcola il valore di una espressione in questo linguaggio?

In linguaggio naturale:

R1: Il valore di una espressione costituita da un numero n è il valore rappresentato da n (not. n)

es: il valore di 10 è 2

<AExpr> ::= <AExpr> + <AExpr> | <Num>Come si calcola il valore di una espressione in questo linguaggio?

108

Semantica delleespressioni aritmetiche

(semplificate)

Come si calcola il valore di una espressione in questo linguaggio?

In linguaggio naturale:

R1: Il valore di una espressione costituita da un numero n è il valore rappresentato da n (not. n)

es: il valore di 10 è 2

R2: Il valore di una espressione E + E’ si ottiene sommando n ed m (dove n è il valore di E ed m è il valore di E’)

<AExpr> ::= <AExpr> + <AExpr> | <Num>Come si calcola il valore di una espressione in questo linguaggio?

109

Semantica delleespressioni aritmetiche

(semplificate)

Come si calcola il valore di una espressione in questo linguaggio?

In linguaggio naturale:

R1: Il valore di una espressione costituita da un numero n è il valore rappresentato da n (not. n)

es: il valore di 10 è 2

R2: Il valore di una espressione E + E’ si ottiene sommando n ed m (dove n è il valore di E ed m è il valore di E’)

<AExpr> ::= <AExpr> + <AExpr> | <Num>Come si calcola il valore di una espressione in questo linguaggio?

OSSERVIAMO CHE:

R1 ed R2 corrispondono alle due alternative nella definizione si ntattica di <AExpr>

R2 suggerisce il modo per calcolare una espressione complessa: calcolare il valore delle due espressioni di cui si compone e sommare i valori

110

Semantica delleespressioni aritmetiche

(semplificate)

<AExpr> ::= <AExpr> + <AExpr> | <Num>Come si calcola il valore di una espressione in questo linguaggio?

CALCOLIAMO 10+11 applicando le regole R1 ed R2:

R2: Il valore di 10+11 è n + m, dove n è il valore di 10 ed m è il valore di 11

ABBIAMO RIDOTTO IL PROBLEMA ALLA RICERCA DEI VALORI n ed m

R1: il valore di 10 è 2

R1: il valore di 11 è 3

Sappiamo che la somma di 2 e 3 è 5

Il valore di 10 +11 è 5

111

Semantica delleespressioni aritmetiche

(semplificate)

<AExpr> ::= <AExpr> + <AExpr> | <Num>Come si calcola il valore di una espressione in questo linguaggio?

Riprendiamo le regole in linguaggio naturale:

R2: Il valore di una espressione E + E’ si ottiene sommando n ed m (dove n è il valore di E ed m è il valore di E’)

Le transizioni rappresentano il procedere del calcolo (scrivere Eàn significa dire che il valore di E è il numero naturale rappresentato da n)

112

Semantica delleespressioni aritmetiche

(semplificate)

<AExpr> ::= <AExpr> + <AExpr> | <Num>Come si calcola il valore di una espressione in questo linguaggio?

Riprendiamo le regole in linguaggio naturale:

R2: Il valore di una espressione E + E’ si ottiene sommando n ed m (dove n è il valore di E ed m è il valore di E’)

Le transizioni rappresentano il procedere del calcolo (scrivere Eàn significa dire che il valore di E è il numero naturale rappresentato da n)

R2 è vista come regola per determinare la transizione

dalla configurazione del tipo E + E’ alla configurazione che rappresenta il valore di E + E’

transizioni: se Eàn e E’àm allora E+E’àk con k = n+m

113

Semantica delleespressioni aritmetiche

(semplificate)

<AExpr> ::= <AExpr> + <AExpr> | <Num>

Le transizioni rappresentano il procedere del calcolo (scrivere Eàn significa dire che il valore di E è il numero naturale rappresentato da n)

R1 è vista come regola per determinare il valore n di una espressione semplice n

transizioni: nàn

Come si calcola il valore di una espressione in questo linguaggio?

Riprendiamo le regole in linguaggio naturale:

R1: Il valore di una espressione costituita da un numero n è il val ore rappresentato da n (not. n)

114

Semantica delleespressioni aritmetiche

(semplificate)

<AExpr> ::= <AExpr> + <AExpr> | <Num>Regole di transizioni

n à n

Eàn E’àm k= n+m

E+E’ à k

Le regole sono guidate dalla sintassi

La prima regola definisce le transizioni per configurazioni cost ituite da un elemento della struttura sintattica <Num>

La seconda regola definisce transizioni per espressioni in cui c ompare +

K=n+m ßà ipotesi di saper calcolare la somma tra numeri naturali (valori)

115

Grammatica delleespressioni aritmetiche a valori naturale

(semplificata)

La semantica di questo linguaggio è una estensione

Di quello appena visto

<AExpr> ::= <AExpr> + <AExpr> | <AExpr> - <AExpr> | (AExpr) |<Num>

<Num>::= 1|2|…..

116

n → n

Eàn E’àm k= n+mE+E’à k

Eàn E’àm n > m k = n-m E-E’à k

Eàn(E) à n

Semantica delle espressioni aritmetichesui numeri naturali

(estensione delle regole precedenti)

Vediamo le configurazioni finali come i valori delle espressioni di partenza

In che senso semantica del linguaggio delle espressioni aritmetiche?

117

Osserviamo che

Che fine ha fatto il concetto di STATO?

Siano a questo punto abbiamo fatto una semplificazione:

le transizioni erano determinate come funzioni che associavano ad una espressione (in termini di struttura astratta) il valore

di questa espressione:

Eàk

118

Grammatica delleespressioni aritmetiche a valori naturali

con identificatori

<AExpr> ::=<Num>|<Var>|<AExpr> +<AExpr>| <AExpr> +<AExpr>

<Num> ::= 1|2|…… <Var>::= X1……

<AExpr>::= <Var> consente di scrivere espressioni in cui compaiono nomi

(identificatori)

119

Semantica delleespressioni aritmetiche a valori naturali

con identificatoriIl significato di una espressione

x+2 dipende dal significato di x (valore associato ad x)

In questo contesto serve una qualche nozione di STATO

120

Semantica delleespressioni aritmetiche a valori naturale

con identificatoriIl significato di una espressione

x+2 dipende dal significato di x (valore associato ad x)

In questo contesto serve una qualche nozione di STATO

Le transizioni sono del tipo

Scrivo:

⟨E,σ⟩ → n

Leggo: Il valore di E date le associazioni di σ è n

121

StatoE’ definito con riferimento al

modello di memoria della nostra macchina astratta(mantiene i valori delle variabili)

Stato σ : sequenza finita di coppie (X,n)

Nello stato σ la variabile X ha il valore n (not. n = σ(X))

122

Semantica delleespressioni aritmetiche

σ(X) = n

<n, σ> → n

<E, σ>àn <E’, σ> à m k= n+m<E +E’,σ> à k

<E, σ>àn <E’, σ> à m n>m k= n-m<E-E’,σ> à k

<E, σ>àn<(E), σ> à n

123

Semantica delleespressioni aritmetiche

σ(X) = n

<n, σ> → n

<E, σ>àn <E’, σ> à m k= n+m<E+E’,σ> à k

<E, σ>àn <E’, σ> à m n>m k= n-m<E-E’,σ> à k

<E, σ>àn<(E), σ> à n

<AExpr> ::=<Var>

124

Esempio Completo

<AExpr> ::= <Num>|<Var>|<AExpr> +<AExpr>| <AExpr> -<AExpr><Num> ::= 1|2|…… <Var>::= X1 ,X2……

Tramite la seguente grammatica …

Generiamo la stringa sintatticamente corretta X1+8 – X2 (con struttura astratta )

<AExpr>

<AExpr> + <AExpr>

<Var>

X1

<AExpr> - <AExpr>

<Num>

8

<Var>

X2

125

Esempio Completo

Ricordate che la stringa, in realtà è l’albero di derivazione

Valutiamo la semantica della struttura astratta X1 + 8 -X2 a partire da uno stato σ che associa a X1 il valore 5 e ad X2 il valore 3

<X1 + 8 – X2, σ> à{…} 10

<X1 + 8 –X2, σ> à k

126

Esempio Completo

Ricordate che la stringa, in realtà è l’albero di derivazione

Valutiamo la semantica della struttura astratta X1 + 8 -X2 a partire da uno stato σ che associa a X1 il valore 5 e ad X2 il valore 3

<X1 + 8 – X2, σ> à{…} 103:

3

<E, σ>àn <E’, σ> à m k= n+m<E + E’,σ> à k

<X1, σ>àn <8-X2, σ> àm k= n+m

<X1 + 8 –X2, σ> à k

127

Esempio Completo

Ricordate che la stringa, in realtà è l’albero di derivazione

Valutiamo la semantica della struttura astratta X1 + 8 -X2 a partire da uno stato σ che associa a X1 il valore 5 e ad X2 il valore 3

<X1 + 8 – X2, σ> à{…} 101:

3

σ(X) = n

1<X1, σ>à5 <8-X2, σ> àm k= 5+m

<X1 + 8 –X2, σ> à k

128

Esempio Completo

Ricordate che la stringa, in realtà è l’albero di derivazione

Valutiamo la semantica della struttura astratta X1 + 8 -X2 a partire da uno stato σ che associa a X1 il valore 5 e ad X2 il valore 3

<X1 + 8 – X2, σ> à{…} 104:

3

1<X1, σ>à5 k= 5+m

<E, σ>àn <E’, σ> à m n>m k= n-m

<X2, σ> àm2 n1>m2 m= n1-m24:

<X1+ 8 –X2, σ> à k

<E-E', σ>àk

<8, σ>àn1

<8-X2, σ>àm

129

Esempio Completo

Ricordate che la stringa, in realtà è l’albero di derivazione

Valutiamo la semantica della struttura astratta X1 + 8 -X2 a partire da uno stato σ che associa a X1 il valore 5 e ad X2 il valore 3

<X1 + 8 – X2, σ> à{…} 10

3

1<X1, σ>à5 k= 5+m

2: <n, σ> → n

2<8, σ>à8 <X2, σ> àm2 8>m2 m= 8-m2 4:

<X1 + 8 –X2, σ> à k

130

Esempio Completo

Ricordate che la stringa, in realtà è l’albero di derivazione

Valutiamo la semantica della struttura astratta X1 + 8 -X2 a partire da uno stato σ che associa a X1 il valore 5 e ad X2 il valore 3

<X1 + 8 – X2, σ> à{…} 10

3

1<X1, σ>à5 10= 5+5

1: σ(X) = n

2 1<8, σ>à8 <X2, σ> à 3 8>3 5= 8-3 4:

<X1+ 8 –X2, σ> à 10

<8-X2, σ>à5

131

Un semplice L

<Exp> ::= <Const> | <Var> | (<Exp>) | <Exp> <Op> <Exp> | <!Exp>

<Op> ::= + | - | * | / | % | == | != | < | <= | > | >= | && | ||<Const> ::= <Num> | <Bool><Bool> ::= true | false<Num> ::= ...

La sintassi

3

132

Semantica delleespressioni logiche

⟨true, σ⟩ → tt⟨false, σ⟩ → ff

secondo la tavola di verità

bv indica un valore booleano tt o ff

Op.elementari

<E, σ>àbv <E’, σ> à bv’ bv’’= bv ∨ bv’<E || E’,σ> à bv’’

<E, σ>àbv <E’, σ> à bv’ bv‘’= bv ∧ bv’<E&&E’,σ> à bv’’

<E, σ>àbv bv’ = ¬bv<!E, σ> à bv’

133

Semantica delleespressioni logiche

Rel indica uno qualunque degli operatori di confronto

<E, σ>àn <E’, σ> à m bv = n rel m<E rel E’,σ> à bv

134

I comandiStato σ :

sequenza finita di coppie (X,n)Nello stato σ la variabile X ha il valore n

La soluzione ad un problema di programmazione consistenella individuazione di una sequenza di azioni che

modifcano lo stato iniziale fino a trasformarlo nellostato finale desiderato

Modifica di uno stato

σ[X ← v]: nuovo stato simile a σ dove la variabile X prende il nuovo valore v

135

La sintassi dei comandi

<Com> ::= skip |<Var> := <AExpr> | <Com> ; <Com>|if <BExpr> then <Com> else <Com>| while <BExpr> do <Com>

<BExpr> ::=tt|ff|<AExpr> ==<AExpr>| ¬<BExpr>| <BExpr> ∧<BExpr>

136

Semantica dei comandiLe transizioni sono del tipo

Scrivo:

⟨C,σ⟩ → τ

Leggo: Il comando C, date le associazioni di σ, porta nello stato σ‘

137

Semantica dei comandi

⟨E, σ⟩ → n⟨X := E, σ⟩ → σ[X ← n]

⟨c1, σ⟩ →σ’ ⟨c2, σ’⟩→ τ⟨c1 ; c2, σ⟩ → τ

⟨skip, σ⟩ → σ Com nullo

Com assegnazione

Com blocco di istruzioni da eseguire in ordine

138

Semantica dei comandi

⟨E, σ⟩ → tt ⟨c1, σ⟩ → τ⟨if E then c1 else c2, σ⟩ → τ

⟨E, σ⟩ → ff ⟨c2, σ⟩ → τ⟨if E then c1 else c2, σ⟩ → τ

139

⟨while E do C, σ⟩ → σ

Semantica dei comandi

⟨E, σ⟩ → ffSe la condizione è falsa lo stato non viene modificato (eq. Com nullo)

⟨while E do C, σ⟩ → τ

⟨E, σ⟩ → tt <C, σ>

Se la condizione è vera C viene ripetutamente eseguito

⟨while E do C, σ’⟩ → τ

140

Esempio

Ricordate che la stringa, in realtà è l’albero di derivazione

<x=2; y=3; x=x-1, σ0> à{…} σ0[xß1, yß3]

<x=2; y=3; x=x-1;, σ0> à σf

Valutiamo la semantica della struttura astratta x=2; y=3; x=x-1 a partire da uno stato σ0 che associa a x e y il valore 0

141

Esempio

Ricordate che la stringa, in realtà è l’albero di derivazione

<x=2; y=3; x=x-1, σ0> à{…} σ0[xß1, yß3]

<x=2; y=3; x=x-1;, σ0> à σf

Valutiamo la semantica della struttura astratta x=2; y=3; x=x-1 a partire da uno stato σ0 che associa a x e y il valore 0

⟨c1, σ⟩ →σ’ ⟨c2, σ’⟩→ τ⟨c1 ; c2, σ⟩ → τ

<x=2;, σ0> à σ1 <y=3; x=x-1;, σ1> àσf

142

Esempio

Ricordate che la stringa, in realtà è l’albero di derivazione

<x=2; y=3; x=x-1, σ0> à{…} σ0[xß1, yß3]

<x=2; y=3; x=x-1;, σ0> à σf

Valutiamo la semantica della struttura astratta x=2; y=3; x=x-1 a partire da uno stato σ0 che associa a x e y il valore 0

<x=2;, σ0> à σ1 = σ0[xß2] <y=3; x=x-1;, σ1 = σ0[xß2] > àσf

⟨Ε, σ⟩ → n⟨x := Ε, σ⟩ → σ[x← n]

<2, σ0> à 2

143

Esempio

Ricordate che la stringa, in realtà è l’albero di derivazione

<x=2; y=3; x=x-1, σ0> à{…} σ0[xß1, yß3]

<x=2; y=3; x=x-1;, σ0> à σf

Valutiamo la semantica della struttura astratta x=2; y=3; x=x-1 a partire da uno stato σ0 che associa a x e y il valore 0

<x=2;, σ0> à σ1 = σ0[xß2] <y=3; x=x -1;, σ1 = σ0[xß2] > àσf

<2, σ0> à 2 <y=3; σ1 = σ0[xß2] > àσ2 <x=x-1; σ2> àσf

⟨c1, σ⟩ →σ’ ⟨c2, σ’⟩→ τ⟨c1 ; c2, σ⟩ → τ

144

Esempio

Ricordate che la stringa, in realtà è l’albero di derivazione

<x=2; y=3; x=x-1, σ0> à{…} σ0[xß1, yß3]

<x=2; y=3; x=x-1;, σ0> à σf

Valutiamo la semantica della struttura astratta x=2; y=3; x=x-1 a partire da uno stato σ0 che associa a x e y il valore 0

<x=2;, σ0> à σ1 = σ0[xß2] <y=3; x=x -1;, σ1 = σ0[xß2] > àσf

<2, σ0> à 2 <y=3; σ1 = σ0[xß2] > àσ2= σ0[x=2 yß3] <x=x-1; σ2> àσf

⟨Ε, σ⟩ → n⟨x := Ε, σ⟩ → σ[x← n]

<3, σ1> à 3

145

Esempio

Ricordate che la stringa, in realtà è l’albero di derivazione

<x=2; y=3; x=x-1, σ0> à{…} σ0[xß1, yß3]

<x=2; y=3; x=x-1;, σ0> à σf

Valutiamo la semantica della struttura astratta x=2; y=3; x=x-1 a partire da uno stato σ0 che associa a x e y il valore 0

<x=2;, σ0> à σ1 = σ0[xß2] <y=3; x=x -1;, σ1 = σ0[xß2] > àσf

<2, σ0> à 2 <y=3; σ1 = σ0[xß2] > àσ2= σ0[x=2 yß3] <x=x-1; σ2> àσf

⟨Ε, σ⟩ → n⟨x := Ε, σ⟩ → σ[x← n]

<3, σ1> à 3 <x-1, σ2> à 1

σf= σ2[xß1]’ =σ1[yß3] àσ0[xß1 yß3]

146

Esercizio

Valutiamo la semantica della struttura astratta while x>0 do x=x-1 a partire da uno stato σ che associa a x il valore 2

147

Computazione

• Sequenza di transizioni concatenate non ulteriormente estendibile in cui ogni transizione è premessa di qualche regola

• Due tipi di computazioniterminanti: finitedivergenti: infinite (loop)

148

Pragmatica e Implementazione– “a che serve / come

usare un certo un certo costrutto linguistico ?”

• Obiettivo: migliorare il sw

• Fattori in evoluzione– Convenzioni – Stile

• Usare il goto ?• Modificare le variabili

dei cicli for ?• Modalità di passaggio di

parametri• Scelta iterazioni

• Connesso alla realizzazione pratica dei compilatori

– “come vengono implementati ?”

– “a quale costo ?”• Domande di tipo

ingegneristico