Descrizione dei Linguaggi di Programmazione - LACAM

Descrizione dei
Linguaggi di
Programmazione
Nicola Fanizzi
Corso di Linguaggi di Programmazione
Dipartimento di Informatica
Università degli Studi di Bari
4 marzo 2014
Sommario
1
2
Livelli di Descrizione
Grammatiche e Sintassi
Grammatiche Libere
Backus-Naur Form
Derivazione e Linguaggi
Alberi di Derivazione
Ambiguità
EBNF
3
4
5
6
Vincoli Sintattici Contestuali
Semantica Statica
Compilatori
Analisi Lessicale
Analisi Sintattica
Analisi Semantica
Fasi Finali
Semantica
Pragmatica ed Implementazione
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
2 / 51
Livelli di Descrizione
Definire un Linguaggio I
Linguaggio di programmazione
= linguaggio artificiale per esprimere algoritmi
destinatario della comunicazione = calcolatore
dalla Linguistica, per descrivere un linguaggio:
Sintassi
Lessico
(Morfologia)
Semantica
Pragmatica
In informatica c’è un altro livello:
Implementazione
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
3 / 51
Livelli di Descrizione
Definire un Linguaggio II
Sintassi ”quali sono le frasi corrette ?”
Lessico ”quali sequenze di simboli
costituiscono le parole del
linguaggio ?”
Relazione tra simboli dell’alfabeto
indica le sequenze di parole corrette: relazione
tra segni
Semantica ”cosa significa una frase corretta ?”
Relazione tra segni e significati
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
4 / 51
Livelli di Descrizione
Definire un Linguaggio III
Pragmatica ”come (e quando) usare una frase corretta e
sensata ?”
Dipendenza dal contesto (linguistico)
anche a parità di significato
Implementazione ” come eseguire le frasi corrette, rispettandone
la semantica ?”
Vale solo per i linguaggi di programmazione
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
5 / 51
Livelli di Descrizione
Terminologia
Una frase è una stringa di caratteri
presi da un certo alfabeto (finito)
Un linguaggio è un insieme di frasi
Ma, come mostrato, ci sono vari livelli di descrizione
Un lessema (lemma) è un’unità di livello più basso (lessico) di
un linguaggio
es.: *, somma, begin
Un token è una categoria di lessemi
es., <identificatore>
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
6 / 51
Grammatiche e Sintassi
Formalismi per Descrivere la Sintassi
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
Grammatiche e riconoscitori
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
7 / 51
Grammatiche e Sintassi
Grammatiche Libere
Grammatiche Libere da Contesto I
Grammatiche libere da contesto
sviluppate da Noam Chomsky a metà degli anni ’50
sono generatori di linguaggi:
tesi alla descrizione della sintassi del linguaggio naturale
definiscono una classe di linguaggi detti liberi da contesto
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
8 / 51
Grammatiche e Sintassi
Grammatiche Libere
Grammatiche Libere da Contesto II
Dato un alfabeto A (finito e non vuoto)
si costruisce l’insieme (infinito) A∗ di tutte le stringhe su A
stringa vuota (senza simboli di A) denotata con Grammatica libera 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
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
9 / 51
Grammatiche e Sintassi
Grammatiche Libere
Grammatiche Libere da Contesto III
Esempio grammatica per il linguaggio delle stringhe di
palindrome su A = {a, b}
G = ({P}, A, R, P) con
R={P
P
P
P
P
N. Fanizzi
Linguaggi di prog.+Lab
−→
−→
−→
−→
−→
a
b
aP a
bPb }
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
10 / 51
Grammatiche e Sintassi
Grammatiche Libere
BNF I
Backus-Naur Form (1959)
Introdotta da John Backus (e Peter Naur) per descrivere ALGOL
metalinguaggio
linguaggio atto a descrivere un altro linguaggio
stessa espressività delle grammatiche libere
si usano astrazioni per rappresentare classi di strutture
sintattiche
fungono da variabili per la sintassi
i.e. simboli non-terminali
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
11 / 51
Grammatiche e Sintassi
Grammatiche Libere
BNF II
Basi
Non-terminali astrazioni BNF
Terminali lessemi / token
Grammatica insieme di regole esempi di regole BNF:
1
2
<ident_list> ::= identifier | identifier , <ident_list>
<if_stmt> ::= if <logic_expr> then <stmt>
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
12 / 51
Grammatiche e Sintassi
Grammatiche Libere
BNF III
Regole BNF
Una regola ha
una parte sinistra (left-hand side: LHS) e
una parte destra (right-hand side: RHS)
fatte di simboli terminali e non-terminali
LHS ::= RHS
Grammatica BNF: insieme finito e non vuoto di regole
Una regola per un simbolo non-terminale può avere più d’una
parte destra, separate dal simbolo ”|”
1
2
<stmt> ::= <single_stmt>
| begin <stmt_list> end
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
13 / 51
Grammatiche e Sintassi
Grammatiche Libere
BNF IV
Esempio descrivere liste
Le liste sono sintatticamente descritte usando la ricorsione
1
2
<ident_list> ::= identifier
| identifier, <ident_list>
Esempio
<program>
<stmts>
3 <stmt>
4 <var>
5 <expr>
6 <term>
1
2
N. Fanizzi
grammatica di un mini-linguaggio
::=
::=
::=
::=
::=
::=
<stmts>
<stmt> | <stmt> ; <stmts>
<var> = <expr>
a | b | c | d
<term> + <term> | <term> - <term>
<var> | const
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
14 / 51
Grammatiche e Sintassi
Grammatiche Libere
Derivazioni I
Una derivazione consiste nella ripetuta applicazione di regole di
una grammatica:
ogni stringa di simboli terminali e non coinvolta nella
derivazione si chiama forma di frase (o forma sentenziale)
una frase è una forma di frase di soli terminali
una singola applicazione di una regola, indicata con =⇒,
è una relazione tra due forma di frase: derivazione diretta
es., aPa =⇒ abPba
(si applica la regola P −→ bPb)
la derivazione è la chiusura transitiva di =⇒,
∗
e si indica con =⇒
∗
es. P =⇒ aPa =⇒ abPba =⇒ abba quindi P =⇒ abba
NB: Vale anche per zero applicazioni di regole
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
15 / 51
Grammatiche e Sintassi
Grammatiche Libere
Derivazioni II
<program> =⇒
=⇒
3
=⇒
4
=⇒
5
=⇒
6
=⇒
7
=⇒
8
=⇒
1
2
N. Fanizzi
<stmts>
<stmt>
<var> =<expr>
a =<expr>
a =<term> +<term>
a =<var> +<term>
a =b +<term>
a =b +const
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
16 / 51
Grammatiche e Sintassi
Grammatiche Libere
Derivazioni III
linguaggio generato da una grammatica
G = (NT, T, R, S) è costituito dall’insieme delle stringhe
derivabili dal simbolo iniziale di G
Formalmente:
∗
L(G) = {w ∈ T ∗ | S =⇒ w}
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
17 / 51
Grammatiche e Sintassi
Grammatiche Libere
Alberi di Derivazione I
Albero
Struttura costituita da un insieme di nodi N
(se non vuota) si distinguono:
La radice r
Un partizionamento (S1 , S2 , ..., Sn ) dei nodi di N \ {r}
dove ogni Si ha la struttura di un albero
Grafo connesso T = (N, A)
N = insieme dei nodi
A = insieme degli archi (ni , nj )
|N| = |A| + 1
radice r, livello(r) = 0
Nodo n padre di tutti i nodi figli (ordinati) m1 , ..., mp ,
tali che (n, mj ) ∈ A
Se livello(n) = i allora ∀m tale che
(n, m) ∈ A : livello(m) = i + 1
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
18 / 51
Grammatiche e Sintassi
Grammatiche Libere
Alberi di Derivazione II
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 . . . Xn dove ∀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 ∪ {}
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
19 / 51
Grammatiche e Sintassi
Grammatiche Libere
Alberi di Derivazione III
Esempio
albero di derivazione
<program>
<stmts>
<stmt>
<expr>
<var>
<term>
<program> ::= <stmts>
<stmts>
::= <stmt>
| <stmt> ; <stmts>
<stmt>
::= <var> = <expr>
<var>
::= a | b | c | d
<expr>
::= <term> + <term>
| <term> - <term>
<term>
::= <var> | const
<term>
<var>
a
N. Fanizzi
=
Linguaggi di prog.+Lab
b
+
const
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
20 / 51
Grammatiche e Sintassi
Grammatiche Libere
Ambiguità I
Una derivazione sinistra (leftmost derivation) è una
derivazione nella quale, in ogni forma di frase intermedia, si
espande il non-terminale più a sinistra
<program> =⇒
=⇒
=⇒
=⇒
<stmts> =⇒ <stmt> =⇒ <var> =<expr>
a =<expr> =⇒ a =<term> +<term>
a =<var> +<term> =⇒ a =b +<term>
a =b +const
La derivazione destra (rightmost derivation) si definisce
analogamente
NB: Ci sono derivazioni che non sono né destre né sinistre
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
21 / 51
Grammatiche e Sintassi
Grammatiche Libere
Ambiguità II
Una grammatica è ambigua sse esiste (almeno) una forma di
frase prodotta attraverso due o più alberi di derivazione
distinti
NB: ma una stringa può però avere più derivazioni distinte
senza che la grammatica sia ambigua
Equivalentemente:
sse essa è prodotta attraverso due derivazioni canoniche
dello stesso tipo (sinistre o destre)
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
22 / 51
Grammatiche e Sintassi
Grammatiche Libere
Ambiguità III
Esempio
1
2
Una grammatica ambigua per generare espressioni
<expr> ::= <expr> <op> <expr> | const
<op>
::= / | <expr>
<expr>
<op>
<expr>
<expr> <expr>
<op>
<expr> <op> <expr>
const
N. Fanizzi
-
const
<expr>
<expr> <op> <expr>
/
Linguaggi di prog.+Lab
const
const
-
Descrizione dei Linguaggi di Programmazione
const
/
const
4 marzo 2014
23 / 51
Grammatiche e Sintassi
Grammatiche Libere
Ambiguità IV
Esempio grammatica non ambigua per generare espressioni
Se usiamo l’albero di derivazione per indicare i livelli di
precedenza degli operatori, non abbiamo ambiguità
1
2
<expr> ::= <expr> - <term> | <term>
<term> ::= <term> / const | const
<expr>
<expr>
<op>
<expr>
<expr> <op> <expr>
const
N. Fanizzi
Linguaggi di prog.+Lab
-
const
/
const
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
24 / 51
Grammatiche e Sintassi
Grammatiche Libere
Ambiguità V
Esempio L’associatività degli operatori può anche essere
codificata in una grammatica
1
2
<expr> ::= <expr> + <expr> | const
<expr> ::= <expr> + const | const
ambigua
non ambigua
<expr>
<expr>
<expr>
const
N. Fanizzi
Linguaggi di prog.+Lab
+
const
+
Descrizione dei Linguaggi di Programmazione
const
4 marzo 2014
25 / 51
Grammatiche e Sintassi
Grammatiche Libere
Ambiguità VI
Esempio Istruzione condizionale
Grammatica ambigua per il costrutto if in JAVA
<istruzione> ::= ... <if_else> | <altra>
<altra> ::= ... <blocco> | <vuota> | <return>
3 <if_else> ::= if "(" <espressione> ")" <istruzione>
4
| if "(" <espressione> ")" <istruzione>
5
else <istruzione>
1
2
Quanti alberi per la forma di frase seguente ?
if (a) if (b) p else q
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
26 / 51
Grammatiche e Sintassi
Grammatiche Libere
Ambiguità VII
Grammatica non ambigua per il costrutto if in JAVA
<istruzione>
<altra>
3 <no_if_breve>
4 <if>
5 <if_else>
1
2
6
7
<if_else2>
8
N. Fanizzi
::=
::=
::=
::=
::=
... <if> | <if_else> |
... <blocco> | <vuota>
<altra> | <if_else2>
if "("<espressione>")"
if "("<espressione>")"
else <istruzione>
::= if "("<espressione>")"
else <no_if_breve>
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
<altra>
| <return>
<istruzione>
<no_if_breve>
<no_if_breve>
4 marzo 2014
27 / 51
Grammatiche e Sintassi
Grammatiche Libere
EBNF I
Le parti opzionali sono poste tra parentesi quadre [...]
1
<proc_call> ::= <ident> [ "(" <expr_list> ")" ]
Le parti destre alternative sono poste tra parentesi tonde
(...) e separate con barre verticali |
1
<term> ::= <term> ( +| -) const
Ripetizioni (di 0 o più elementi) sono poste tra parentesi
graffe {...}
1
N. Fanizzi
<ident> ::= letter { letter | digit }
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
28 / 51
Grammatiche e Sintassi
Grammatiche Libere
EBNF II
Confronto
BNF
<expr> ::=
|
3
|
4 <term> ::=
5
|
6
|
1
2
<expr> +
<expr> <term>
<term> *
<term> /
<factor>
<term>
<term>
<factor>
<factor>
EBNF
1
2
<expr> ::= <term> { ( + | - ) <term> }
<term> ::= <factor> { ( * | / ) <factor> }
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
29 / 51
Vincoli Sintattici Contestuali
Vincoli Sintattici Contestuali
La correttezza di una frase può dipendere dal contesto
ma questo NON si può regolare attraverso una grammatica libera
Esempi
Identificatore da dichiarare prima dell’uso
Inizializzare ogni variabile 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 il ciclo for
Metodi sovrascritti da metodi con firma uguale (o
compatibile)
...
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
30 / 51
Vincoli Sintattici Contestuali
Semantica Statica
Semantica 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
riguarda il significato del programma in esecuzione
Esempio
grammatiche con attributi
grammatiche libere + vincoli ed azioni
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
31 / 51
Compilatori
Compilatori - Schema Logico
sorgente [caratteri]
Analizzatore
Lessicale
lista token
Analizzatore
Sintattico
albero sintattico
Tabella
dei
Simboli
Analizzatore
Semantico
albero aumentato
Gestione
Errori
Gen. Codice
Intermedio
codice intermedio
Ottimizzazione
Codice
codice ottimizzato
Gen. Codice
Oggetto
codice oggetto
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
32 / 51
Compilatori
Analisi Lessicale
Analisi Lessicale
Detta 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
Esempio 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 sin./des.)
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
33 / 51
Compilatori
Analisi Sintattica
Analisi Sintattica
Detta anche parsing
da cui parser è il (sotto)programma che la implementa
lettura dei token dalla lista
spesso lo scanner è un sottoprogramma chiamato dal parser
costruzione dell’albero di derivazione (implicita/esplicita)
token = foglie
genera un errore se non si è in grado di costruire l’albero
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
34 / 51
Compilatori
Analisi Semantica
Analisi Semantica
Vengono effettuati i controlli dei vincoli contestuali
(ossia di semantica statica)
L’albero viene aumentato via via con queste nuove
informazioni
Per gli identificatori
viene gestita appositamente la tabella dei simboli
Esempio variabile: tipo, punto di dichiarazione, scope, . . .
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
35 / 51
Compilatori
Fasi Finali
Fasi Finali
Generazione della forma intermedia
Visita dell’albero per generare codice
Forma intermedia: ottimizzabile, portabile, . . .
es. quadruple, triple, ecc, . . .
Ottimizzazione
rimozione codice inutile,
espansione delle chiamate di sottoprogrammi,
fattorizzazione espressioni,
ottimizzazione dei cicli, . . .
Generazione del codice oggetto
Segue spesso un’altra fase di ottimizzazione
es. immagazzinamento nei registri di variabili molto utilizzate
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
36 / 51
Semantica
Semantica
Specifica del linguaggio attraverso
Metodi formali
Semantica denotazionale
si usano le funzioni
Semantica operazionale
si usa un formalismo a basso livello:
Automi
Assiomi algebrico-logici
Stati e transizioni (SOS)1
Altre:
Semantica assiomatica, algebrica,...
1
vedi Appendice [slide 40].
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
37 / 51
Pragmatica ed Implementazione
Pragmatica ed Implementazione
Pragmatica
”a che serve / come usare un certo costrutto linguistico ?”
Obiettivo: migliorare il software
Fattori in evoluzione: convenzioni e stile
Esempi
divieto di uso del goto ?
modificabilità delle variabili dei cicli for ?
scelta della modalità di passaggio di parametri
scelta delle iterazioni più indicate
Implementazione
”come vengono implementati i costrutti?”
” a quale costo ?”
Connessa alla realizzazione pratica dei compilatori
scelte di tipo ingegneristico
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
38 / 51
Riferimenti
Gabbrielli & Martini: Linguaggi di Programmazione,
McGraw-Hill 2a edizione
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
39 / 51
Appendice
Semantica Formale
Semantica Formale
Basi
Stato
Modello di memoria
Stato σ : sequenza finita di coppie (X, n)
nello stato σ la variabile X ha il valore n
Operazioni
σ[X ← v] nuovo stato simile a σ dove la variabile X prende il
nuovo valore v
σ(X) ritrova il valore della variabile X nello stato σ
valore indefinito se la variabile non viene trovata
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
41 / 51
Semantica Formale
Transizione
Transizione
Trasformazione dello stato del programma provocata dalla
valutazione di un costrutto / esecuzione di un comando
[sintassi PASCAL-like]
Forma semplice:
hc, σi → σ 0
c costrutto / comando
σ stato di partenza
σ 0 stato d’arrivo
Esempio
comando nullo:
hskip, σi → σ
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
42 / 51
Semantica Formale
Transizione
Transizioni Complesse
Composte da passi più piccoli espressi da transizioni:
hc, σi → hc0 , σ 0 i
es. per la selezione, una delle transizioni è la seguente:
hif tt then c1 else c2 , σi → hc1 , σi
Condizionali basati su regole:
se c ha una transizione allora c0 ha una certa transizione
hc1 , σ1 i → hc10 , σ10 i
hc, σi →
hc2 , σ2 i → hc20 , σ20 i
hc0 , σ 0 i
se c1 partendo dallo stato σ1 si può trasformare in
c10
nello stato
premesse
conseguenze
σ10
e c2 partendo da σ2 può trasformarsi in c20 nello
stato σ20 allora il comando c partendo da σ può trasformarsi in c0 nello stato σ 0
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
43 / 51
Semantica Formale
Espressioni aritmetiche
Espressioni aritmetiche
hn, σi → n
hX, σi → σ(X)
hn+m, σi → p
hn-m, σi → p
se n − m = p e n ≥ m
se n + m = p
ha1 , σi → ha, σi
ha2 , σi → ha, σi
ha1 + a2 , σi → ha + a2 , σi
ha1 + a2 , σi → ha1 + a, σi
ha1 , σi → ha, σi
ha2 , σi → ha, σi
ha1 - a2 , σi → ha - a2 , σi
ha1 - a2 , σi → ha1 - a, σi
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
44 / 51
Semantica Formale
Espressioni logiche
Espressioni logiche I
htt, σi → tt
hff, σi → ff
hn = m, σi → tt
hn = m, σi → ff
se n 6= m
se n = m
hnot ff, σi → tt
hnot tt, σi → ff
hb1 and b2 , σi → b
se b = b1 ∧ b2 secondo la tavola di verità della congiunzione ∧
b indica un valore booleano tt o ff
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
45 / 51
Semantica Formale
Espressioni logiche
Espressioni logiche II
ha1 , σi → ha, σi
ha2 , σi → ha, σi
ha1 = a2 , σi → ha = a2 , σi
ha1 = a2 , σi → ha1 = a, σi
hb1 , σi → hb, σi
hb2 , σi → hb, σi
hb1 and b2 , σi → hb and b2 , σi hb1 and b2 , σi → hb1 and b, σi
hb, σi → hb0 , σi
hnot b, σi → hnot b0 , σi
NB: nelle transizioni per la valutazione delle espressioni aritmetico-logiche
lo stato rimane invariato: occorre calcolare un valore in un dato stato
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
46 / 51
Semantica Formale
Comandi
Comandi I
hskip, σi → σ
hX:=n, σi → σ[X ← n]
ha, σi → ha0 , σi
hX:=a, σi → hX:=a0 , σi
hc1 , σi → σ 0
hc1 , σi → hc10 , σ 0 i
hc1 ; c2 , σi → hc2 , σ 0 i
hc1 ; c2 , σi → hc10 ; c2 , σ 0 i
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
47 / 51
Semantica Formale
Comandi
Comandi II
hif tt then c1 else c2 , σi → hc1 , σi
hif ff then c1 else c2 , σi → hc2 , σi
hb, σi → hb0 , σi
hif b then c1 else c2 , σi → hif b0 then c1 else c2 , σi
hwhile b do c, σi → hif b then c;while b do c else skip, σi
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
48 / 51
Semantica Formale
Computazione
Computazione I
Sequenza di transizioni concatenate
non ulteriormente estendibile
in cui ogni transizione è premessa di qualche regola
Due tipi di computazione
terminanti: finite
divergenti: infinite (loop)
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
49 / 51
Semantica Formale
Computazione
Computazione II
Computazione finita
stato σ = [(X, 6)] e
comando c = X:=1; while not (X=0) do X:=X-1
|
{z
}
c0
hc, σi → hc0 , σ[X ← 1]i →
hif not(X=0) then X:=X-1;c0 else skip, σ[X ← 1]i →
hif not(1=0) then X:=X-1;c0 else skip, σ[X ← 1]i →
hif not ff then X:=X-1;c0 else skip, σ[X ← 1]i →
hif tt then X:=X-1; c0 else skip, σ[X ← 1]i →
hX:=X-1; c0 , σ[X ← 1]i → hX:=1-1; c0 , σ[X ← 1]i →
hX:=0; c0 , σ[X ← 1]i → hc0 , σ[X ← 0]i →
hif not(X=0) then X:=X-1; c0 else skip, σ[X ← 0]i →
hif not(0=0) then X:=X-1; c0 else skip, σ[X ← 0]i →
hif not tt then X:=X-1; c0 else skip, σ[X ← 0]i →
hif ff then X:=X-1; c0 else skip, σ[X ← 0]i →
hskip, σ[X ← 0]i → σ[X ← 0]
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
50 / 51
Semantica Formale
Computazione
Computazione III
Computazione infinita
stato τ = [(X, 0)] e
comando d = X:=1; while (X=1) do skip
{z
}
|
d0
hd, τ i → hd0 , τ [X ← 1]i →
hif (X=1) then skip; d0 else skip, τ [X ← 1]i →
hif (1=1) then skip; d0 else skip, τ [X ← 1]i →
hif tt then skip; d0 else skip, τ [X ← 1]i →
hskip; d0 , τ [X ← 1]i →
hd0 , τ [X ← 1]i → . . .
N. Fanizzi
Linguaggi di prog.+Lab
Descrizione dei Linguaggi di Programmazione
4 marzo 2014
51 / 51