Documente Academic
Documente Profesional
Documente Cultură
2010/2011
Jean-Claude Fernandez
Universite Galatasaray
Feuille 1
Grammaire abstraite (Rappel)
Expressions arithmetiques a Aexp
a
:= n | x | a1 + a2 | a1 a2 | a1 a2
S
emantique des expressions arithm
etiques
A[n]
= N [n]
A[x]
= (x)
A[a1 + a2 ] = A[a1 ] +I A[a2 ]
S
emantique des commandes
(x := a, ) [x 7 A[a]]
(skip, )
(S1 , ) 0 , (S2 , 0 ) 00
(S1 ; S2 , ) 00
(S1 , ) 0
B[b] = tt
(if b then S1 else S2 , ) 0
(S2 , ) 0
B[b] = ff
(if b then S1 else S2 , ) 0
(S, ) 0 , (while b do S od , 0 ) 00
B[b] = tt
(while b do S od , ) 00
(while b do S od , )
B[b] = ff
Exercice 1
Construire larbre de derivation pour les commandes suivantes :
x :=1 ; y :=2 ; x := x+y
if x > y then x := x y else y := y x dabord dans letat tel que (x) =
3, (x) = 4 puis dans (x) = 5, (x) = 4
while 1 x do (y := y + x; x := x 1) od dabord dans letat tel que (x) =
3, (x) = 4 puis dans (x) = 0, (x) = 4
Exercice 2
1
Exercice 3
On veut ajouter la commande :
repeat S until b
au langage While.
1. Donner des r`egles semantique pour definir repeat S until b sans utiliser la construction While.
2. Montrer que
(a) repeat S until b et
(b) S; if b then skip else (repeat S until b).
sont semantiquement equivalentes.
On veut montrer que la commande repeat S until b naugmente pas son pouvoir expressif. Pour ce faire, donner une fonction qui transforme tout programme avec la
commande repeat S until b en un programme dans le langage While.
Exercice 4
On consid`ere les expressions arithmetiques definies dans le cours. Soit a Aexp et
et 0 deux etats. Soit X lensemble des variables qui apparaissent dans a.
Montrer que si (x) = 0 (x), pour tout x X, alors A[a] = A[a] 0 .
Soit a0 Aexp. Montrer que
A[a[a0 /x]] = A[a][x 7 A[a0 ]]
Universite Galatasaray
Feuille 2
Exercice 5
Soit le programme suivant vu en cours:
begin
var x := 0;
proc p is x := x 2;
proc q is call p;
beginvar x := 5;
proc p is x := x + 1;
call q; y := x;
end;
end
Calculer la semantique de ce programme suivant les trois variantes vues en cours:
1. Lien dynamique pour les procedures et les variables.
2. Lien statique pour les procedures et dynamique pour les variables.
3. Lien statique pour les procedures et les variables.
Exercice 6
On modifie la syntaxe des procedures pour permettre deux param`etres (S Stm) :
S
DV
DP
Nous nous interessons `a la semantique avec lien statique pour les procedures et lien
dynamique pour les variables.
Modifier la semantique des declarations de procedures et des appels pour obtenir
une semantique avec appel par valeur.
Meme chose pour appel par reference.
Feuille 3
Exercice 7
Determinez la fonction calcule par le code suivant :
push-0:store(z):fetch(x):store(r):
loop(fetch(r):fetch(y):le,
fetch(y):fetch(r):sub:store(r)
push-1:fetch(z):add:store(z))
Exercice 8
Donner la sequence dinstructions associees aux commandes suivantes :
x :=1 ; y :=2 ; x := x+y
if x > y then x := x y else y := y x dabord dans letat tel que (x) =
3, (x) = 4 puis dans (x) = 5, (x) = 4
while 1 x do (y := y + x; x := x 1) od dabord dans letat tel que (x) =
3, (x) = 4 puis dans (x) = 0, (x) = 4
Exercice 9
1. Compl
eter la d
efinition des fonctions CA : Aexp Code, CB : Bexp
Code et CS : Stm Code donnee en cours, de mani`ere `a avoir :
(a) (CA[a], , ) . (, A[a], )
(b) (CB[b], , ) . (, B[b], )
(c) (CS[S], , ) . (, p, 0 ) ssi (S, ) 0
Exercice 10
Correction du generateur de code D
emontrer les propri
et
es suivantes :
1. (CB[b], , ) . (, B[b], )
2. Si (CS[S], , ) .k (, p, 0 ) alors (S, ) 0 et p = .
Verifier sans preuve formelle que votre definition satisfait les propretes suivantes :
1. (CA[a], , ) . (, A[a], )
2. Si (S, ) 0 alors (CS[S], , ) . (, p, 0 ).
En d
eduire
Sns [ ] = M CS