Sunteți pe pagina 1din 4

Semantique des langages de programmation,

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

Expressions booleennes b Bexp


b := true | false | a1 = a2 | a1 a2 | b | b1 b2
Commandes S Stm
S

::= x := a | skip | S1 ; S2 | if b then S1 else S2 while b do S od

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

On consid`ere les commandes suivantes :


while (x = 1) do (y := y x; x := x 1) od
while 1 x do (y := y x; x := x 1) od
while true do skip od
o`
u x est une variable de type Z.
Pour chacune de ces commandes determiner si :
1. son execution boucle dans tous les etats
2. elle sarrete dans tous les etats

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 ]]

Semantique des langages de programmation,


2010/2011
Jean-Claude Fernandez

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

::= x := a | skip | S1 ; S2 | if b then S1 else S2


while b do S od | begin DV DP ; S end | call p(a1 , a2 )
::= var x := a; DV | 
::= proc p(x1 , x2 ) is S; 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

S-ar putea să vă placă și