td_sémantique

4
Universit´ e Galatasaray emantique des langages de programmation, 2010/2011 Jean-Claude Fernandez Feuille 1 Grammaire abstraite (Rappel) Expressions arithm´ etiques a Aexp a := n | x | a 1 + a 2 | a 1 * a 2 | a 1 - a 2 Expressions bool´ eennes b Bexp b := true | false | a 1 = a 2 | a 1 a 2 b | b 1 b 2 Commandes S Stm S ::= x := a | skip | S 1 ; S 2 | if b then S 1 else S 2 while b do S od emantique des expressions arithm´ etiques A[n]σ = N [n] A[x]σ = σ(x) A[a 1 + a 2 ]σ = A[a 1 ]σ + I A[a 2 ]σ emantique des commandes (x := a, σ) σ[x 7→A[a]σ] (skip) σ (S 1 ) σ 0 , (S 2 0 ) σ 00 (S 1 ; S 2 ) σ 00 (S 1 ) σ 0 (if b then S 1 else S 2 ) σ 0 B[b]σ = tt (S 2 ) σ 0 (if b then S 1 else S 2 ) σ 0 B[b]σ = (S, σ) σ 0 , (while b do S od 0 ) σ 00 (while b do S od ) σ 00 B[b]σ = tt (while b do S od ) σ B[b]σ = Exercice 1 Construire l’arbre de d´ erivation 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

Upload: houria-ing

Post on 04-Feb-2016

12 views

Category:

Documents


0 download

DESCRIPTION

travaux direct ; exercices

TRANSCRIPT

Page 1: td_sémantique

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

Page 2: td_sémantique

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

Page 3: td_sémantique

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

Page 4: td_sémantique

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