Sintassi e Semantica Nucleo di C: - PowerPoint PPT Presentation

About This Presentation
Title:

Sintassi e Semantica Nucleo di C:

Description:

Sintassi e Semantica Nucleo di C: Espressioni: numeriche booleane Comandi: assegnamento condizionale iteratore sequenza di istruzioni blocco Dichiarazioni: – PowerPoint PPT presentation

Number of Views:27
Avg rating:3.0/5.0
Slides: 29
Provided by: Euge116
Category:

less

Transcript and Presenter's Notes

Title: Sintassi e Semantica Nucleo di C:


1
Sintassi e SemanticaNucleo di C
  • Espressioni
  • numeriche
  • booleane
  • Comandi
  • assegnamento
  • condizionale
  • iteratore
  • sequenza di istruzioni
  • blocco
  • Dichiarazioni

Costrutti comuni a tutti i linguaggi imperativi
2
Esempio
3
Un altro esempio
int main() int x9 (1) int y3
(2) if (xgty) int zx (3)
xz-y else xy (4)
yz (5)
dichiarazioni
blocco
condizionale
assegnamento
Notare il blocco la dichiarazione e luso di z.
È corretto? Ha senso?
4
Lo stack (o pila )(proprio quella dei piatti che
avete lavato ieri sera)
  • Lo stack è una sequenza di elementi in cui è
    definito un particolare ordine di manipolazione
    degli elementi.
  • Definiamo
  • lo stack vuoto è la particolare pila che non
    contiene elementi (indicata con nil, EmptyStack,
    ?, ecc.)
  • la testa dello stack (top dello stack) calcola
    lultimo elemento inserito, non modifica lo stack
  • pop calcola lelemento in testa allo stack e
    modifica lo stack eliminando lelemento in testa.
  • push inserisce un elemento in testa allo stack,
    nel seguito push è indicata con .. Modifica lo
    stack.

5
Esempi di stack e operazioni
testa
pop(s)6
pop(nil) ? (indefinito) è una situazione di
errore
6
Lo stato
  • Nella semantica che vedremo per il C utilizzeremo
    i seguenti domini
  • Ide gli identificatori validi del C,
  • Val gli interi
  • DenLoc ? FunctDecl ? Unbound.
  • Loc gli indirizzi delle locazioni di memoria
    (sono naturali)
  • FunctDecl le dichiarazioni di funzione (le
    vedremo più avanti

7
Lo stato
  • Lo stato ha 2 componenti
  • Lambiente (nel seguito indicato con s) che è
    uno stack di frame. I frame in questo caso
    rappresentano funzioni da Ide in Den.
  • La memoria (nel seguito indicato con m) che è
    una funzione dal Loc -gt Val. Anche la memoria è
    un frame.

8
Operazioni sulle strutture dello stato(Frame)
  • Ricerca
  • ?(i) per gli elementi dello stack, ha tipo ? x
    Ide ? Den nellinterprete si chiama look
  • m(l) per la memoria ha tipo M x Loc ? Val
    nellinterprete si chiama lookM
  • Inserzione
  • free(m) esiste solo per la memoria e corrisponde
    allallocazione di memoria, ha tipo M ? Loc x M,
    nellinterprete si chiama free.
  • per gli elementi dello stack jd/i ha tipo F x
    Ide x Den? F
  • Modifica
  • per la memoria mv/l) ha tipo M x Loc x Val ? M,
    nellinterprete si chiama updateM

9
Operazioni sugli stack
  • Ricerca
  • s(i) per gli elementi dello stack, ha tipo S
    x Ide ? Den nellinterprete si chiama lookUp. Si
    cerca nel frame top dello stack, se non contiene
    un legame si va cercare nel resto delo stack,
    secondo lordine di accesso degli elementi usuale
    per gli stack.
  • Inserzione
  • di un legame (ide,d) ha tipo S x Ide x Den ? S.
    Nella semantica si esprime come composizione di
    inserzione di un bind nel frame e push (.),
    nellinterprete si chiama addBind

10
Selezione della denotazione associata ad un
identificatore nello stack di frame
Formalmente abbiamo la seguente definizione
ricorsiva
11
La Grammatica del C
Programma Direttive Prototipi TypeR main()
StmtList FunctDecList Direttive
Direttiva Direttive ? Direttiva define Ide
include ltIde.hgt... Prototipi Prototipo
Prototipi ? Prototipo Type Ide(FormalList)
FunctDecList FunctDecl FunctDecList ?
FunctDec (int void) Ide (int Ide)
StmtList StmtListStmt StmtList ?
12
La Grammatica del C - segue
StmtDecl Com ComIdeExp
Assegnamento if (Exp) Com else Com
Condizionale while (Exp) Com
Iteratore StmtList
Blocco Ide(Exp) Invocazione di
fun return Exp Calcolo dei
valore Exp Ide Const Exp Op Exp Uop Exp
Ide Ide(Exp) (Exp)... Decl Type Ide
Exp FunctDec Type int float
double TypeRType void
13
PicoC
  • Restrizioni
  • non ci sono le direttive (anche perchè nella
    semantica non hanno senso)
  • tipi solo int
  • parametri funzioni con un e un solo parametro
  • non cè input/output
  • non ci sono tipi strutturati (array,struct,
    unioni) ecc).
  • Estensioni
  • le definizioni di funzione sono dichiarazioni e
    possono comparire in un punto qualunque del
    programma

14
PicoC
Programmaint main() StmtList StmtList
Stmt StmtList ? StmtDecl
Com ComIdeExp Assegnamento
if (Exp) Com else Com Condizionale
while (Exp) Com Iteratore
StmtList Blocco
Ide(Exp) Invocazione di fun
return Exp Calcolo del valore Exp Ide
Const Exp Op Exp Uop Exp Ide Ide(Exp)
(Exp)... Decl int Ide Exp
FunctDec FunctDec (int void) Ide (int Ide)
StmtList
15
Rappresentazione delle variabili nello stato
s
m
s
m
l1
j
l1
j
3
l1
x
l1
x
l2
1
l3
y
l2
y
l3
0
l2
z
l3
z
l4
-4
j
l4
x
sltx, l1gt, lty, l2gt, ltz, l3gt.W
l4
w
m(s(y)? m(s(y)?
16
Sistema di transizioni per le espressioni
S explt ?exp , Texp , ?exp ?exp ltE,lt?,?gtgt
E ?Exp, ? ??, ? ?M ? ltv,lt?,?gtgt v ? Val , ?
??, ? ?M Texp ltv,lt?,?gtgt v ? Val , ? ??, ?
?M ?exp (), ..., tutte le regole che
vedremo
17
Semantica le espressioni
ltE,lts,?gtgt?expltv,lts,?gtgt ltE,lts,?gtgt?expltv,lts,
?gtgt v opv v
ltE op E, lts, ?gt gt ?exp ltv, lts, ?gtgt ltE,
lts,? gtgt ?expltv, lts, ?gtgt uop v v ltuop
E, lts,? gtgt ?exp ltv, lts, ?gtgt
? (s(x)) v ltx,
lts,? gtgt ?exp ltv, lts,?gtgt v ?
(const) ltconst,lts,? gtgt ?expltv,lts,?gtgt
(Eop)
(Euop)
(B())
(Eidev)
(Btrue)
(Econst)
18
Sistema di transizioni per i comandi e
dichiarazioni
S comlt ?com , Tcom , ?com ?com ltC,lt?,?gtgt
C ?Stmt, ? ??, ? ?M ? lt?,?gt ? ??, ? ?M
Tcom lt?,?gt ? ??, ? ?M ?com (), ...,
tutte le regole che vedremo
19
Assegnamento
Sintassi
Com Ide Exp
Semantica
ltE,lt?,?gt gt ?exp ltv ,lt?, ?gtgt ?(x)l ? ?
ltxE,lt?,?gt gt ?com lt?, ?v/lgt
20
Sequenza di istruzioni StmtList
Sintassi
StmtList Stmt StmtList ?
Semantica
ltCom, lt?,?gtgt ?com lt?,?gtgt ltStmtList,lt?,
?gtgt ?comlt?,?gtgt ltCom StmtList,lt?,?gtgt ?com
lt?,?gtgt ltDecl,lt?,?gtgt ?comlt?,?gt
ltStmtList,lt?,?gtgt?com lt?,?gtgt ltDecl
StmtList,lt?,?gtgt ?com lt?,?gtgt
(StmtListcom)
(StmtListdecl)
21
Un condizionale if
Sintassi
Com ... if (BE) Com else Com ...
Semantica
ltE,lt?,?gtgt ?explttt,lt?,?gtgt ltC1,lt?,?gtgt?cmdlt?
,?gt ltif(E) C1 else C2
,lt?, ?gtgt ?com lt?,?gtgt ltE,lt? ?gtgt
?expltff,lt?,?gtgt ltC2,lt?,?gtgt ?cmd lt?,?gt
ltif(E) C1 else C2,lt?, ?gtgt ?com
lt?,?
(if-tt)
(if-ff)
22
Un iteratore while
Sintassi
Com ... while (BE) Com ...
Semantica
ltE
,lt?,?gt gt ?exp ltff,lt?,?gtgt
ltwhile(E) C,lt?, ?gt gt ?comlt?,?gt
ltE,lt?,?gtgt ?exp lttt,lt?,?gtgt ltC,lt?,?gtgt
?com lt?,?gtgt ltwhile(E) C ,lt?, ?gtgt
?com lt?,?gt ltwhile(E)
C ,lt?,?gt gt ?com lt?,?gt
23
La semantica il Blocco
Sintassi
Com StmtList
Semantica
ltStmtList, lt?.?, ?gtgt ?com ltj.?,
?gt
ltStmtList,lt?,?gtgt ?com lt?,?gt ??? ????

(Block)
24
Semantica delle dichiarazioni
Sintassi
Decl Type Ide Type Ide Exp
Semantica
free (m) ltl,?gt s j.s
ltT x ,lts,?gtgt ?dcl lt j l /x.s,??/lgt
ltE,lts,?gtgt?expltv,lts,?gtgt free (m) ltl,?gt
s j.s ltT xE , lts, ?gtgt ?dcl ltj
l/x.s,?v/lgtgt
(var1)
(var2)
Notare linserzione del legame nel top dello stack
25
Semantica del programma
Sintassi
programma int main () StmtList
Semantica
ltStmtList, lt?.?,?0gt gt ?com lts,?gt
ltint main() StmtList gt ? lts,?gt
(prog)
26
Linguaggi a blocchi
  • C è un linguaggio a blocchi perchè le variabili
    esistono solo allinterno del blocco in cui sono
    definite.
  • In C, come nella maggior parte dei linguaggi a
    blocchi, è corretto riutilizzare un
    identificatore per definire una variabile, con la
    seguente semantica
  • Sia y la variabile definita nel blocco più
    esterno e y la variabile definita nel blocco
    interno.
  • y e y sono due variabili diverse. La y esiste
    solo nel blocco interno e poi scompare. La y
    esiste sempre (cioè nel blocco esterno e quindi
    in quello interno) ma nel blocco interno non si
    riesce a denotare (è coperta dalla y).
  • In Java il riutilizzo di un identificatore in un
    blocco annidato è vietato

27
Equivalenza di programmi
  • I comandi C e C sono equivalenti se ?lts,mgt vale
    una delle seguenti condizioni
  • ltC,lts,mgtgt e ltC, lts,mgtgt NON portano ad una
    configurazione terminale
  • Se ltC,lts,mgtgt? lts,mgt allora ltC, lts,mgtgt ?
    lts,mgt e vale che x x?Ide?s(x) ? ?x
    x?Ide?s(x) ? ?? m(s(x)) m(s(x))
    cioè le configurazioni terminali
    definiscono le stesse variabili a cui sono
    assegnati gli stessi valori.
  • Dimostrazione per casi se necessario

28
Equivalenza debole (condizionale) di programmi
  • I comandi C e C sono equivalenti in uno stato
    lts,mgt che soddisfa una data condizione cioè tale
    che ...es m(s(x))v), come prima Se
    ltC,lts,mgtgt? lts,mgt allora ltC,
    lts,mgtgt ? lts,mgt e vale che x x?Ide?s(x)
    ? ?x x?Ide?s(x) ? ? ? m(s(x))
    m(s(x))
  • cioè le configurazioni terminali definiscono le
    stesse variabili a cui sono assegnati gli
    stessi valori.
  • Dimostrazione per casi se necessario anche in
    questo caso
Write a Comment
User Comments (0)
About PowerShow.com