SLPC 0809 : Devoir de maison. Exercice I : Sémantique opérationnelle : extension du langage while avec des exceptions

Documents pareils
Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Gestion mémoire et Représentation intermédiaire

Introduction à MATLAB R

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)


Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Cours de Programmation 2

Programmation Web. Madalina Croitoru IUT Montpellier

Claude Delannoy. 3 e édition C++

Compilation (INF 564)

Cours d algorithmique pour la classe de 2nde

Algorithmique et Programmation, IMA

Cours d initiation à la programmation en C++ Johann Cuenin

Traduction des Langages : Le Compilateur Micro Java

Corrigé des TD 1 à 5

Recherche dans un tableau

Cours No 3 : Identificateurs, Fonctions, Premières Structures de contrôle.

Java Licence Professionnelle CISII,

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

TRIGONOMETRIE Algorithme : mesure principale

Propagation sur réseau statique et dynamique

Classes et Objets en Ocaml.

Vérification formelle de la plate-forme Java Card

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Programmer en JAVA. par Tama

Cours 1 : La compilation

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Principes des langages de programmation INF 321. Eric Goubault

Théorie de la Programmation

TP 1. Prise en main du langage Python

Bases de programmation. Cours 5. Structurer les données

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

KL5121. Pour activer des sorties en fonction de la position d'un codeur

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Impact des robots d indexation sur le cache de second niveau de SPIP IMBERTI Christophe - SG/SPSSI/CP2I/DO Ouest 06/06/2012 mis à jour le 05/07/2012

Application 1- VBA : Test de comportements d'investissements

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Notions fondamentales du langage C# Version 1.0

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Présentation du PL/SQL

Algorithmique et programmation : les bases (VBA) Corrigé

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Atelier C TIA Portal CTIA06 : programmation des automates S7-300 Blocs d organisation

Plan du cours Cours théoriques. 29 septembre 2014

Examen Médian - 1 heure 30

Analyse de sécurité de logiciels système par typage statique

Programmation en Java IUT GEII (MC-II1) 1

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

Initiation à l algorithmique

Introduction au langage C

Langage Fortran (Base)

Ordonnancement temps réel

Baccalauréat S Antilles-Guyane 11 septembre 2014 Corrigé

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

UML et les Bases de Données

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

Utilisation d objets : String et ArrayList

COMMUNICATION PC/MINITEL

TP3 : Manipulation et implantation de systèmes de fichiers 1

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Programmation en Caml pour Débutants

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Baccalauréat ES/L Amérique du Sud 21 novembre 2013

Organigramme / Algorigramme Dossier élève 1 SI

Algorithmique des Systèmes Répartis Protocoles de Communications

Programme Compte bancaire (code)

Conception de circuits numériques et architecture des ordinateurs

//////////////////////////////////////////////////////////////////// Administration bases de données

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Logiciel Libre Cours 2 Fondements: Programmation

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Environnements informatiques

GUIDE PRATIQUE déplacements professionnels temporaires en France et à l étranger

Licence Sciences et Technologies Examen janvier 2010

Cours Informatique Master STEP

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Chap III : Les tableaux

Initiation à LabView : Les exemples d applications :

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Solutions du chapitre 4

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions


Génie Logiciel avec Ada. 4 février 2013

Cours 1 : Qu est-ce que la programmation?

SUPPORT DE COURS. Langage C

as Architecture des Systèmes d Information

Introduction à la programmation concurrente

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Formula Negator, Outil de négation de formule.

Langage Fortran. Support de cours

Transcription:

SLPC 0809 : Devoir de maison Exercice I : Sémantique opérationnelle : extension du langage while avec des exceptions On considère dans cet exercice la liaison dynamique pour les variables. Introduction de l instruction break Nous rajoutons à la grammaire du langage while vue en cours sans les procédures mais avec les blocs, l instruction break en étendant la syntaxe des commandes S ::= break. Cette instruction provoque l arrêt de l exécution de la boucle immédiatement englobante ou, à défaut du bloc immédiatement englobant. Le programme s exécute ensuite normalement, le contrôle passant juste après l instruction interrompue. Les configurations terminales sont alors State {stop b } State (où State = Var Z). On rajoute, pour la construction break, la règle suivante : (break, σ) (stop b, σ) Exemple Considérons le fragment de programme S suivant : begin var x := 2 ; while (x<10) do if x = 5 then break else skip; x := x+1 od ; x:=0; A partir d une configuration initiale (S, σ), l exécution de la boucle s arrête dans la configuration (stop b, σ[x 5]), ce qui conduit à la configuration terminale pour S, σ[x 0]. Question 1 Modifier la règle de sémantique vue en cours, de la composition séquentielle en complétant les règles suivantes : (S 1, σ) (stop b, σ ) (S 1 ; S 2, σ) (S 1, σ) σ (S 1 ; S 2, σ) Question 2 Modifier la règle de sémantique vue en cours, pour la commande while, sachant que, si le corps de la boucle contient une instruction break, son exécution est interrompue ; l exécution continue normalement après l instruction while. Question 3 Modifier la règle de sémantique vue en cours pour le bloc, sachant que si la partie commande contient une instruction break, son exécution est interrompue ; l exécution continue normalement après le bloc. 1

Introduction de la commande exit Nous rajoutons à la grammaire ci-dessus l instruction exit en étendant la syntaxe des commandes S ::= exit. Cette instruction provoque l arrêt du programme en cours d exécution. Les nouvelles configurations terminales sont alors State {stop b } State {stop e } State. On rajoute, pour la construction exit, la règle suivante : (exit, σ) (stop e, σ) Si on reprend l exemple 1.1.1 en remplaçant l instruction break par la construction exit, à partir de la configuration initiale (S, σ), l exécution de la boucle s arrête dans la configuration (stop e, σ[x 5]), ce qui conduit à la configuration terminale pour S, (stop e, σ[x 5]). Question 4 Modifier les règles vues en cours pour la composition séquentielle, le bloc et la commande if. Introduction de la commande raise Nous rajoutons la possibilité de déclarer des exceptions et de traiter les exceptions nommées. Une exception est définie dans une déclaration d exceptions qui lui donne un nom. On rajoute, avant les déclarations de variables, les déclarations d exceptions. Lors de l exécution d un programme, une exception peut être levée explicitement par l instruction raise ou implicitement, par exemple lors d une division par 0. Dans cet exercice, nous ne considérerons pas les exceptions implicites. Quand une exception est levée, le contrôle est transféré à un traitement d exception fourni à la fin d un bloc. Ce traitement termine l exécution du bloc. Nous modifions la syntaxe des blocs en rajoutant des déclarations d exceptions, et des traitements d exception. La syntaxe d un bloc devient : S ::= begin D E ; D V ; S; T end Les déclarations d exceptions se font de manière analogue aux déclarations de variables : D E ::= exception e; D E ɛ Un exception est provoquée par la commande raise e. Le traitement d exception, à la fin du bloc, prend la forme suivante : T ::= when e = S; T ɛ. La construction when concerne les exceptions explicites. La syntaxe des commandes devient alors : S ::= x := a skip S; S if b then S else S while b do S od begin D E ; D V ; S; T end break exit raise e Exemple d utilisation begin exception trouve ; var x :=0 ; var res :=0 ; 2

x := 0 ; while true do if x = 5 then raise trouve else skip x := x+1 ; od when trouve => res := 5 ; x:=-1 end A partir d une configuration initiale (S, σ, τ), (on verra à la question 7 la forme des configurations et la signification de τ). l exécution de la boucle s arrête dans la configuration (stop r, σ[x 5], τ[trouve 1]), ce qui conduit d abord à la configuration (stop r, σ[x 5], τ[trouve 1]) avant le traitement de l exception, puis à la configuration terminale pour S, σ[x 1, res 5], τ[trouve 1]. Question 5 On rappelle que DV (D V ) dénote l ensemble des variables déclarées dans D V. De manière similaire, DE(D E ) dénote l ensemble des exceptions déclarées dans D E On suppose qu une exception ne peut être levée et traitée que dans le bloc où elle est déclarée et pas dans les blocs internes. Exprimer de manière formelle, en donnant des règles de sémantique statique, le fait que tout nom d exception e dans la construction when e ou dans la construction raise e est déclaré dans la partie D E. Question 6 Reprendre la question précédente en supposant qu une exception peut être levée et traitée dans un bloc imbriqué. Question 7 Dans cette question, nous nous intéressons à la sémantique opérationnelle de raise et d un bloc. Pour cela, nous modifions les configurations de la manière suivante ; Γ = (Stm State Except) State {stop b } State {stop e } State {stop r } State Except L ensemble Except = NomE part. {0, 1} est l ensemble des applications partielles des noms d exception NomE vers l ensmble {0, 1}. Dans une configuration (S, σ, τ), τ(e) = 1 si e a été déclaré et si une instruction raise e est apparue. La règle de sémantique pour la commande raise est définie de la manière suivante ; (raise e, σ, τ) (stop r, σ, τ[e 1]) Modifier la règle de sémantique opérationnelle vue en cours pour les blocs. Exercice 2 - Sémantique opérationnelle naturelle et typage Extension du langage while avec la notion de tableau On considère la syntaxe abstraite d un fragment du langage while vu en cours en ne différenciant pas les expressions arithmétiques (qui étaient notées a dans le cours) des expressions booléennes (qui étaient notées b dans le cours) et en l étendant avec les tableaux. Ici, les deux sortes d expression sont notées e. 3

Par ailleurs, contrairement à ce que l on a vu en cours, les déclarations de variables ne comportent pas d initialisation et sont typées. D V ::= var x : t; D V var x[n] : t; D V ɛ S ::= x := e x[e] := e skip S 1 ; S 2 if e then S 1 else S 2 while e dos begind V Send e ::= n x true e + e e = e e and e x[e] t ::= Entier Bool Partie A : Typage On définit l ensemble Type de la manière suivante : TypeBase = Entier,Bool Type = TypeBase {Tab} N Type Intuitivement, un type est soit un type de base, soit un tableau de n éléments d un même type. Lors d une déclaration de tableau var x[n] : t, on associe au nom de variable x un triplet (Tab, N (n), t), indiquant que la variable x est un tableau de N (n) éléments de type t ; dans ce cas, les éléments du tableau sont x[0],, x[n (n) 1]. On rappelle que, pour le typage, l environnement est une fonction qui à un nom de variable associe un type. L environnement est contruit en analysant les déclarations, utilisé pour la vérification de type dans les expressions, et utilisé pour montrer qu une commande est bien typée. Question 1 Donnez formellement la règle qui permet de modifier l environnement lors de la déclaration var x[n] :t. Question 2 Donnez un exemple de programme incorrect vis-à-vis de cette règle. Question 3 Proposez en français une règle décrivant l accès à un élément de tableau x[e]. Donnez formellement la règle de typage correspondante. Question 4 Donnez un exemple de programme incorrect vis-à-vis de cette règle. Question 5 Proposez en français une règle décrivant l affectation x[e 1 ] := e 2. Donnez formellement la règle de typage correspondante. 4

Question 6 Donnez un exemple de programme incorrect vis-à-vis de cette règle. Partie B : Sémantique naturelle Dans cette partie, on considère la sémantique décrivant la liaison statique pour les variables : L environnement Env décrit une association entre un nom de variable est un emplacement mémoire, i.e. Loc, la mémoire Sto associe à un emplacement mémoire son contenu : Env = Nom Loc Sto = Loc Z B Comme vu en cours, ces fonctions sont partielles et l ensemble des adresses des emplacements mémoire est assimilé à N. On considère que le domaine d un élément sto Loc Z B est un intervalle. On considère la fonction new : Sto N Sto N. new(sto 1, k 2 ) = (sto 2, k 1 ) tel que Dom(sto 1 ) = [0 k 1 1] Dom(sto 2 ) = [0 k 1 + k 2 1] Autrement dit, si k 1 est le plus petit entier tel que sto 1 (k 1 ) n est pas définie, la fonction new alloue k 2 emplacements mémoires contigüs à partir de l adresse k 1. Par ailleurs, on peut utiliser la fonction size qui à un type asocie la taille d un élément de ce type. Lors de la déclaration de tableau var x[n] : t, on alloue n emplacements contigus de taille size(t). On suppose ici que l information sur les types, i.e. la fonction Γ qui à chaque variable associe son type est connue (cf partie A). Question 1 Proposez une règle de sémantique naturelle pour la construction var x : t; D V. Question 2 Proposez une règle de sémantique naturelle pour la construction var x[n] : t; D V. Question 3 Proposez une règle de sémantique naturelle pour la construction x[e 1 ] := e 2 5

Exercice 3 - Correction de la fonction de génération de code intermédiaire Code 3 adresses : syntaxe Variables : x Var Temporaires : t, t i Tmp Noms α une variable ou un temporaire Expressions Exp e Exp e ::= n α α op α op {+,,, /} Instructions Inst i Inst i ::= t := e x := e if α oprel α goto l goto l oprel {=, <, >,, } Configurations Les configurations sont des quadruplets (pc, c, σ, τ) où pc, c, σ, τ désignent respectivement le compteur programme, le code, la mémoire et la valeur de chaque temporaire : c N Inst le code σ Var Z la mémoire τ Tmp Z la mémoire temporaire Sémantique des expressions On définit la sémantique des expressions de la manière suivante : E[n] (σ,τ) = N [n] E[x] (σ,τ) = σ(x) E[t] (σ,τ) = τ(t) E[e 1 ope 2 ] (σ,τ) = E[e 1 ] (σ,τ) op I E[e 2 ] (σ,τ) Sémantique des instructions (pc, c, σ, τ) (pc + 1, c, σ, τ[t E[e] (σ,τ) ]) si c(pc) = t := e (pc, c, σ, τ) (pc + 1, c, σ[x E[e] (σ,τ) ], τ) si c(pc) = x := e (pc, c, σ, τ) (l, c, σ, τ) si c(pc) = goto l et (pc, c, σ, τ) (pc + 1, c, σ, τ) si c(pc) = if α oprel α goto l et (E[α] (σ,τ) oprel I E[α ] (σ,τ) ) (pc, c, σ, τ) (l, c, σ, τ) si c(pc) = if α oprel α goto l et E[α] (σ,τ) oprel I E[α ] (σ,τ) Génération de code pour les expressions arithmétiques On considère des tableaux à une dimension et N éléments allant de 0 à N-1 et des tableaux à deux dimensions à NxM éléments (N lignes, M colonnes). La taille d un élément est T. On peut généraliser sans problème. Les tableaux sont rangés en colonne, ce qui fait que T[i,j] = N*T*j+i*T. 6

GenCodeAExp(x) = (ε,x)) GenCodeAExp(n) = (ε,n) GenCodeAExp(tab[i,j]) = Soit t1=nouveautemp, t2=nouveautemp t3=nouveautemp, t4=nouveautemp t5=nouveautemp dans (t 1 := T*i t 2 := N T t 3 :=t 2 j t 4 :=t 1 +t 3 t 5 :=tab[t 4 ],t 5 ) GenCodeAExp(a 1 + a 2 )) = Soit (C 1,t 1 )=GenCodeAExp(a 1 ), (C 2,t 2 )=GenCodeAExp(a 2 ), t=nouveautemp dans (C 1 C 2 t := t 1 +t 2,t) Génération de code pour les expressions booléennes GenCodeBExp (a 1 < a 2 ),lvrai,lfaux) = Soit (C 1,t 1 )=GenCodeAExp(a 1 ), (C 2,t 2 )=GenCodeAExp(a 2 ), dans C 1 C 2 if t 1 < t 2 goto lvrai goto lfaux GenCodeBExp (b 1 b 2 ),lvrai,lfaux) = Soit l=nouvelleetiq() dans GenCodeBExp(b 1,l,lfaux) l : GenCodeBExp(b 2,lvrai,lfaux) GenCodeBExp( b,lvrai,lfaux) = GenCodeBExp(b,lfaux,lvrai) Génération de code pour les instructions de contrôle A chaque nœud de l arbre abstrait, on associe du code de la manière suivante : 7

GenCodeInst ( x := a ) = Soit (C,t)=GenCodeAExp(a) dans C x := t GenCodeInst ( S 1 ; S 2 ) = Soit C 1 = GenCodeInst(S 1 ), C 2 = GenCodeInst(S 2 ) dans C 1 C 2 GenCodeInst (while b do S od) = Soit ldebut=nouvelleetiq(), lvrai=nouvelleetiq(), lfaux=nouvelleetiq() dans ldebut : GenCodeBExp(b,lvrai,lfaux) lvrai : GenCodeInst(S) goto ldebut lfaux : GenCodeInst (if b then S 1 else S 2 ) = Soit lsuivant=nouvelleetiq(), lvrai=nouvelleetiq(), lfaux=nouvelleetiq() dans GenCodeBExp(b,lvrai,lfaux) lvrai : GenCodeInst(S 1 ) goto lsuivant lfaux : GenCodeInst(S 2 ) lsuivant : Correction de la génération Démontrer les propriétés suivantes ; La relation est déterministe. On note #C la taille du code, c est-à-dire le nombre d instructions. Soit (C,t)=GenCodeAexp(a). Montrer que στ τ (0, C, σ, τ) (#C, C, σ, τ ) ssi A[a] σ = E[t] (σ,τ ) Soit C=GenCodeInst(S). Montrer que σσ τ τ (0, C, σ, τ) (#C, C, σ, τ ) ssi (S, σ) σ 8