td_sémantique
DESCRIPTION
travaux direct ; exercicesTRANSCRIPT
Universite Galatasaray
Semantique des langages de programmation,2010/2011
Jean-Claude Fernandez
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 S2while b do S od
Semantique des expressions arithmetiques
A[n]σ = N [n]A[x]σ = σ(x)A[a1 + a2]σ = A[a1]σ +I A[a2]σ
Semantique des commandes
(x := a, σ)→ σ[x 7→ A[a]σ]
(skip, σ)→ σ
(S1, σ)→ σ′, (S2, σ′)→ σ′′
(S1;S2, σ)→ σ′′
(S1, σ)→ σ′
(if b then S1 else S2, σ)→ σ′B[b]σ = tt
(S2, σ)→ σ′
(if b then S1 else S2, σ)→ σ′B[b]σ = ff
(S, σ)→ σ′, (while b do S od , σ′)→ σ′′
(while b do S od , σ)→ σ′′B[b]σ = tt
(while b do S od , σ)→ σ B[b]σ = ff
Exercice 1Construire l’arbre de derivation pour les commandes suivantes :
• x :=1 ; y :=2 ; x := x+y
• if x > y then x := x− y else y := y − x d’abord dans l’etat σ tel que σ(x) =3, σ(x) = 4 puis dans σ(x) = 5, σ(x) = 4
• while 1 ≤ x do (y := y + x; x := x− 1) od d’abord dans l’etat σ tel que σ(x) =3, σ(x) = 4 puis dans σ(x) = 0, σ(x) = 4
Exercice 2
1
On considere 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
ou x est une variable de type Z.Pour chacune de ces commandes determiner si :
1. son execution boucle dans tous les etats2. elle s’arrete dans tous les etats
Exercice 3
On veut ajouter la commande :
repeat S until b
au langage While.
1. Donner des regles semantique pour definir repeat S until b sans utiliser la con-struction 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 n’augmente pas son pouvoir ex-pressif. Pour ce faire, donner une fonction qui transforme tout programme avec lacommande repeat S until b en un programme dans le langage While.
Exercice 4
On considere les expressions arithmetiques definies dans le cours. Soit a ∈ Aexp etσ et σ′ deux etats. Soit X l’ensemble des variables qui apparaissent dans a.Montrer que si σ(x) = σ′(x), pour tout x ∈ X, alors A[a]σ = A[a]σ′.Soit a′ ∈ Aexp. Montrer que
A[a[a′/x]]σ = A[a]σ[x 7→ A[a′]σ]
2
Universite Galatasaray
Semantique des langages de programmation,2010/2011
Jean-Claude Fernandez
Feuille 2
Exercice 5Soit π 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 6On modifie la syntaxe des procedures pour permettre deux parametres (S ∈ Stm) :
S ::= 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)DV ::= var x := a; DV | εDP ::= proc p(x1, x2) is S; DP | ε
Nous nous interessons a la semantique avec lien statique pour les procedures et liendynamique pour les variables.
• Modifier la semantique des declarations de procedures et des appels pour obtenirune semantique avec appel par valeur.
• Meme chose pour appel par reference.
3
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 d’instructions associees aux commandes suivantes :
• x :=1 ; y :=2 ; x := x+y
• if x > y then x := x− y else y := y − x d’abord dans l’etat σ tel que σ(x) =3, σ(x) = 4 puis dans σ(x) = 5, σ(x) = 4
• while 1 ≤ x do (y := y + x; x := x− 1) od d’abord dans l’etat σ tel que σ(x) =3, σ(x) = 4 puis dans σ(x) = 0, σ(x) = 4
Exercice 9
1. Completer la definition des fonctions CA : Aexp→ Code, CB : Bexp→Code et CS : Stm→ Code donnee en cours, de maniere a avoir :(a) (CA[a], ε, σ) .∗ (ε,A[a]σ, σ)(b) (CB[b], ε, σ) .∗ (ε,B[b]σ, σ)(c) (CS[S], ε, σ) .∗ (ε, p, σ′) ssi (S, σ)→ σ′
Exercice 10
Correction du generateur de code Demontrer les proprietes suivantes :
1. (CB[b], ε, σ) .∗ (ε,B[b]σ, σ)2. Si (CS[S], ε, σ) .k (ε, p, σ′) alors (S, σ)→ σ′ et p = ε.
Verifier sans preuve formelle que votre definition satisfait les propretes suivantes :
1. (CA[a], ε, σ) .∗ (ε,A[a]σ, σ)2. Si (S, σ)→ σ′ alors (CS[S], ε, σ) .∗ (ε, p, σ′).
En deduire
Sns[ ] =M◦ CS
4