Sémantique des Langages de Programmation



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

Cours 1 : La compilation

Théorie de la Programmation

Algorithmique et Programmation, IMA

Chapitre 2. Eléments pour comprendre un énoncé

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

Présentation du langage et premières fonctions

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

OCL - Object Constraint Language

Arbres binaires de recherche

STAGE IREM 0- Premiers pas en Python

Modélisation des données

Cours 1 : Qu est-ce que la programmation?

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)

TP 1. Prise en main du langage Python

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Cours de Programmation 2

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

Cours d algorithmique pour la classe de 2nde

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

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

Organigramme / Algorigramme Dossier élève 1 SI

Recherche dans un tableau

Principes des langages de programmation INF 321. Eric Goubault

Évaluation et implémentation des langages

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

Fondements de l informatique Logique, modèles, et calculs

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

Programmation Web. Madalina Croitoru IUT Montpellier

Chapitre 1 : Introduction aux bases de données

Logiciel Libre Cours 3 Fondements: Génie Logiciel

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

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Cours Informatique Master STEP

Intelligence Artificielle et Systèmes Multi-Agents. Badr Benmammar

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

MIS 102 Initiation à l Informatique

Date : Tangram en carré page

Représentation d un entier en base b

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Programmer en JAVA. par Tama

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Tp 1 correction. Structures de données (IF2)

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Initiation à la Programmation en Logique avec SISCtus Prolog

Préparation à l examen EFA en Macro

Utilisation des tableaux sémantiques dans les logiques de description

Définitions. Numéro à préciser. (Durée : )

Algorithmique et programmation : les bases (VBA) Corrigé

Notions fondamentales du langage C# Version 1.0

Probabilités conditionnelles Loi binomiale

Initiation à la programmation en Python

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

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Rappels sur les suites - Algorithme

Vérification formelle de la plate-forme Java Card

Partie 1. Fonctions plus complexes dans Excel. Fonctions Si(), Et(), Ou() et fonctions imbriquées. Opérateurs logiques. I.1.

Réalisabilité et extraction de programmes

DOCM Solutions officielles = n 2 10.

INF 232: Langages et Automates. Travaux Dirigés. Université Joseph Fourier, Université Grenoble 1 Licence Sciences et Technologies

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Probabilité. Table des matières. 1 Loi de probabilité Conditions préalables Définitions Loi équirépartie...

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Cours de Master Recherche

Traduction des Langages : Le Compilateur Micro Java

I. Introduction aux fonctions : les fonctions standards

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

Initiation à l algorithmique

données en connaissance et en actions?

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

TD3: tableaux avancées, première classe et chaînes

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

Les structures de données. Rajae El Ouazzani

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

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

Raisonnement probabiliste

Algorithmes récursifs

basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB Olivier Augereau Formation UML

Logique. Plan du chapitre

Conventions d écriture et outils de mise au point

ANALYSE DU BESOIN. L ANALYSE FONCTIONNELLE par Jean-Marie VIRELY & all (ENS Cachan) Cette présentation décrit l outil «Analyse du Besoin».

Capacité d un canal Second Théorème de Shannon. Théorie de l information 1/34

Cours de Systèmes d Exploitation

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

Utilisation d objets : String et ArrayList

Reconstruction de bâtiments en 3D à partir de nuages de points LIDAR

Formula Negator, Outil de négation de formule.

ACTIVITÉ DE PROGRAMMATION

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

Glossaire des nombres

Formation Août 2013 Michèle Garello, IEN économie gestion Caroline Natta, professeur

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

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Maple: premiers calculs et premières applications

Transcription:

Sémantique des Langages de Programmation Introduction Stefano Guerrini stefano.guerrini@univ-paris13.fr LIPN - Institut Galilée, Université Paris Nord 13 Sup Galillée Informatique, 1ère année 2009 2010 S. Guerrini (LIPN - Paris 13) Sémantique des Langages de Programmation 2009 2010 1 / 23

Introduction Qu est-ce que la sémantique? Sémantique Étude du sens, de la signification dans le langage. (Dictionnaire Robert) Étude du sens des unités linguistiques et de leurs combinaisons. Aspect de la logique qui traite de l interprétation et de la signification des systèmes formels, par opposition à la syntaxe, entendue comme l étude des relations formelles entre formules de tels systèmes. (Dictionnaire Larousse) Mots clés : sens et signification unités linguistiques et leurs combinaisons dichotomie sémantique/syntaxe S. Guerrini (LIPN - Paris 13) Sémantique des Langages de Programmation 2009 2010 2 / 23

Introduction Et la sémantique des langages de programmation? Sémantique des Langages de Programmation En informatique théorique, la sémantique formelle (des langages de programmation) est l étude de la signification des programmes informatiques vus en tant qu objets mathématiques. Comme en linguistique, ici la sémantique désigne le lien entre un signifiant, le programme, et un signifié, objet mathématique qui dépendra des propriétés que l on souhaite connaître du programme. On appellera aussi sémantique le lien entre le langage signifiant (le langage de programmation) et le langage signifié (logique de Hoare, automates, ou autre). (Wikipedia) Mots clés : sémantique formelle programmes vus en tant qu objets mathématiques dichotomie signifiant/signifié propriétés que l on souhaite connaître des programme lien entre le langage de programmation (signifiant) et le langage signifié S. Guerrini (LIPN - Paris 13) Sémantique des Langages de Programmation 2009 2010 3 / 23

Introduction Pourquoi la sémantique? Définir la sémantique d un langage formel consiste à lui donner une signification mathématique, dans deux buts : La description Qui doit permettre de cerner très précisément ce que réalise un programme afin de permettre au programmeur de comprendre ce qu il fait, afin de réaliser des traducteurs (compilateurs, interprètes) et des optimiseurs, afin de pouvoir appliquer des méthodes formelles de vérification. La prescription (dans les sens du verbe prescrire) Qui doit aider les concepteurs de langages à définir des langages cohérents, puissants et corrects. S. Guerrini (LIPN - Paris 13) Sémantique des Langages de Programmation 2009 2010 4 / 23

A quoi il sert? Introduction Introduction L objectif final de la description formelle des langages c est de fournir des méthodes pour raisonner sur les programmes et de permettre la programmation sans erreurs en se reposant sur deux techniques : 1 décrire précisément le comportement du programme et le comparer à un comportement attendu, par exemple sous la forme de relations logiques entre valeurs d entrée et valeurs de sortie ; 2 permettre également de définir des disciplines de programmation et de montrer que ces disciplines permettent d éviter certaines classes d erreurs de programmation. Les aspects de prescription deviennent de plus en plus important avec l intérêt croissant à définition des langages de domaines spécifiques, comme par exemple dans le cas de un langage pour aider les ingénieurs à calculer les trajectoires des satellites, un langage pour commander un micro-onde lors de la cuisson d un plat. S. Guerrini (LIPN - Paris 13) Sémantique des Langages de Programmation 2009 2010 5 / 23

Introduction Est-ce qu on l utilise dans le monde réel? La sémantique jouit d un intérêt économique réel. L informatique embarquée, utilisée de plus en plus fréquemment dans tous les appareils de la vie moderne, requiert un niveau de qualité bien plus important que les application traditionnelles de l informatique. De nombreuse applications requièrent maintenant un niveau de qualité des programmes que seules des méthodes formelles de développement et de vérification peuvent assurer. Les domaines les plus demandeurs actuellement sont ceux du transport (Matra Transport, Alsthom, Dassault-Aviation) des télécommunication (France-Télécom) des transactions commerciales (Bull CP8, GemPlus, Schlumberger) Un exemple concret d utilisation des méthodes formels : le développement et la validation du code du METEOR/Ligne 14 du métro. C est évident que, dans des cas comme ça, on ne peut pas avoir du code qui contient des erreurs. S. Guerrini (LIPN - Paris 13) Sémantique des Langages de Programmation 2009 2010 6 / 23

Introduction Et qu est-ce qu on fait dans le cours? Ce cours est conçu comme une introduction aux méthodes et à les techniques utilisées en sémantique des langages de programmation. Tout au long de notre travail, nous appuierons notre étude sur l exemple d un tout petit langage impérative, que nous appellerons While. Référence principal : Hanne Riis Nielson, Flemming Nielson. Semantics with applications. John Wiley & Sons, 1992. http://www.daimi.au.dk/hrn Nous tâcherons de présenter les différents aspects suivants : 1 La sémantique opérationnelle : qui présente l exécution des programmes comme un système de déduction. 2 La sémantique dénotationnelle : qui décrit les programmes comme des fonctions mathématiques. 3 La sémantique axiomatique : qui décrit les propriétés logiques assurées pour les valeurs produites par les programmes. S. Guerrini (LIPN - Paris 13) Sémantique des Langages de Programmation 2009 2010 7 / 23

Syntaxe abstraite La syntaxe Syntaxe Partie de la grammaire qui décrit les règles par lesquelles les unités linguistiques se combinent en phrases. Ensemble des règles d écriture d un programme informatique permises dans un langage de programmation et formant la grammaire de ce langage. (Dictionnaire Larousse) La syntaxe expose l alphabet des caractères utilisés et la grammaire que définit le langage c est-à-dire, les règles de construction des chaînes de caractères bien formées. Le langage définit par une grammaire ce sera l ensemble des chaînes de caractères bien formées par rapport aux règles de la grammaire. S. Guerrini (LIPN - Paris 13) Sémantique des Langages de Programmation 2009 2010 8 / 23

Syntaxe abstraite Syntaxe concrète et syntaxe abstraite La syntaxe concrète représente les suites de caractères des mot du langage. Pour analyser un langage de programmation c est fondamental que la syntaxe concrète soit non-ambiguë (unicité de l arbre de parsage) ou fournisse les règles pour gérer les cas d ambiguïté. Exemple. Dans le cas des expressions arithmétiques. Pour l expression 3 + 2 4, la syntaxe concrète doit choisir si cette expression correspond à (3 + 2) 4 où à 3 + (2 4). Ces deux possibilités en correspondant à deux arbres de parsage distingués. La syntaxe abstraite donne une structure aux données entrées. Dans la syntaxe abstraite les objets syntaxiques sont directement représentés par des arbres (ou des termes) qui sont en relation directe (ce sont isomorphes) avec les correspondants arbres de parsage. Dans ce cours on n est pas intéressés aux détailles de la syntaxe concrète et on considérera seulement la syntaxe abstraites des langages qu on analysera. S. Guerrini (LIPN - Paris 13) Sémantique des Langages de Programmation 2009 2010 9 / 23

Syntaxe abstraite Définitions compositionnelle ou inductives Une définition inductive d un ensemble X est caractérisée par la donnée d un ensemble de règles de construction des éléments de X. Parmi ces règles on distingue : Les règles de base. Qui affirment que des éléments appartiennent à X. Les règles inductives. Qui donnent un moyen de construire d autres éléments de X à partir de ceux déjà construits. L ensemble X est l ensemble des objets constructibles en partant des règles (des objets) de base par exemple : 0 N en appliquant un nombre fini des règles inductives par exemple : x + 1 N si x N C est-à-dire, l ensemble X est le plus petit ensemble d objets t.q. les objets de bases donnés par le règles de bases sont contenus en X l ensemble X est clos par rapport aux opérations de construction d objets donnée par les règles inductives. S. Guerrini (LIPN - Paris 13) Sémantique des Langages de Programmation 2009 2010 10 / 23

Syntaxe abstraite Règles inductives Les règles de construction d un ensemble inductif A ont la forme suivante (avec n = 0 dans les règles de base) : si a 1 A 1,..., a n A n, a 1 A,..., a m A alors f (a 1,...a n, a 1,...a m ) A où les A i sont des ensembles qui peuvent être définis à leur fois par induction les règles d un ou plusieurs ensemble A i peuvent utiliser des éléments de A ou d autres ensembles A j aussi, dans ce cas là on dit que ces ensembles sont définis par induction simultanée ou mutuelle et f est la description formelle de la règle (une fonction) qui donne un élément de A a partir des élément a 1,..., a n, a 1,..., a m. Pour écrire la définition d un séries d ensembles inductives A 1,..., A k on utilisera des méta-variables a i, a i 1, a i k,... pour dénoter des éléments de A i et si R 1,..., R k ce sont les règles qui définissent l ensemble A i on écriera a i ::= R 1... R k S. Guerrini (LIPN - Paris 13) Sémantique des Langages de Programmation 2009 2010 11 / 23

Syntaxe abstraite Arbres et définitions inductives La construction d un élément x d un ensemble inductif X corresponds à une arbre. 1 Si x est défini par une règle de base, alors l arbre contiens seulement une noeud a 2 si x est défini par une règle inductive a i A i, x j X = f (a 1,...a n, x 1,...x m ) X alors l arbre correspondant a une noeud f comme racine des noeuds a i (des feuilles) comme fils de f les racines des arbres des éléments x i comme fils de f S. Guerrini (LIPN - Paris 13) Sémantique des Langages de Programmation 2009 2010 12 / 23

Syntaxe abstraite Le langage While Catégories syntaxiques Num : l ensemble des numéraux ; Var : l ensemble des variables (un ensemble de noms ou identificateurs) ; Aexp : l ensemble des expressions arithmétiques ; Bexp : l ensemble des expressions booléennes ; Stm : l ensemble des assertions ou statements. Méta-variables : n Num x Var a Aexp b Bexp s Stm. La syntaxe abstraite (la définition des catégories syntaxiques) : n ::= 0 1 n 0 n 1 a ::= n x a 1 + a 2 a 1 a 2 a 1 a 2 b ::= true false a 1 = a 2 a 1 a 2 b b 1 b 2 S ::= x := a skip S 1 ; S 2 if b then S 1 else S 2 while b do S On n est pas intéressé à la définition concrète de l ensemble des identificateurs pour le variables (la catégorie Var). S. Guerrini (LIPN - Paris 13) Sémantique des Langages de Programmation 2009 2010 13 / 23

Syntaxe abstraite Induction structurelle Pour démontrer qu une propriété P est vraie de tous les éléments d un ensemble défini inductivement, il suffit de calquer le raisonnement sur la structure de l ensemble. C est-à-dire 1 pour chaque règle de base de type a X, il faut montrer P(a) 2 pour les règles inductives de la forme : Il faut montrer que a i A i, x j X = f (a 1,...a n, x 1,...x m ) X a i A i, x j X et P(x j ) = P(f (a 1,...a n, x 1,...x m)) Le principe d induction structurelle peut être démontrer en utilisant le principe d induction de l arithmétique. Par induction sur les nombres de règles qui servent à construire une élément a. C est-à-dire, par induction sur la taille de l arbre de a. S. Guerrini (LIPN - Paris 13) Sémantique des Langages de Programmation 2009 2010 14 / 23

Domaines et fonctions sémantiques Interpretation des expressions Au fin d interpréter un langage il faut trouver une fonction qui associe une signifié à chaque signifiant. signifiants : les élément syntaxique du langage signifiés : des valeurs sémantiques Le but de la sémantiques est de trouver les domaines sémantiques, c est-à-dire, les domaines des signifiés, à associer à chaque catégorie syntaxique une fonction sémantique qui associe à chaque élément d une catégorie syntaxique sont signifié, c est-à-dire, un élément du correspondant domaine sémantique. S. Guerrini (LIPN - Paris 13) Sémantique des Langages de Programmation 2009 2010 15 / 23

Interpretation des expressions Sémantique des numéraux Domaine sémantique : l ensemble des entiers Z Fonction sémantique : N : Num Z t.q., par exemple N 101 = 5 N 1 = 1 N 0 = 0 Attention. Noter les à la place des () dans les fonctions sémantiques. C est une convention! Définition inductive de la fonction sémantique : N 0 = 0 N 1 = 1 N n 0 = 2 N n N n 1 = 2 N n + 1 S. Guerrini (LIPN - Paris 13) Sémantique des Langages de Programmation 2009 2010 16 / 23

L état Introduction Interpretation des expressions L interprétation d une expression arithmétique dépend des valeurs associées aux variables qui ce trouvent dans l expression. L état c est l association d une valeur (du bon type) à chaque variable. Si les variables sont toutes de type entier, un état s c est une fonction s : Var Z. L état c est donc une élément de l ensemble : State = Var Z La fonction sémantique qu interprète les expression arithmétiques prend comme arguments une expression et un état et renvoie la valeur de l expression. Mais si on définit A : (Aexp State) Z on ne peut pas donner une interprétation directe d une expression, car on a toujours besoin d un état s pour interpréter une expression a (l argument de la fonction c est une pair (a, s)). S. Guerrini (LIPN - Paris 13) Sémantique des Langages de Programmation 2009 2010 17 / 23

Interpretation des expressions Sémantique des expressions arithmétiques On définit la fonction qu interprète les expressions arithmétique comme une fonction que prends comme argument une expression et renvoie une fonction que prend comme argument une état et renvoie la valeur de l expression. Donc, les argument de cette fonction sont dans Aexp et les valeurs sont dans State Z. A : Aexp (State Z) A n s = N n A x s = s x A a 1 +a 2 s = A a 1 s + A a 2 s A a 1 a 2 s = A a 1 s A a 2 s A a 1 a 2 s = A a 1 s A a 2 s S. Guerrini (LIPN - Paris 13) Sémantique des Langages de Programmation 2009 2010 18 / 23

Interpretation des expressions Sémantique des expressions booléennes B : Bexp (State T) T = {tt, ff } B true s = tt B false s = ff { tt B a 1 = a 2 s = ff { tt B a 1 a 2 s = ff { tt B b s = ff { tt B b 1 b 2 s = ff si A a 1 s = A a 2 s sinon si A a 1 s A a 2 s sinon si B b s = ff sinon si B b 1 s = tt et B b 2 s = tt sinon S. Guerrini (LIPN - Paris 13) Sémantique des Langages de Programmation 2009 2010 19 / 23

Propriétés de la sémantique des expressions Dépendance de l état L état est une fonction de l ensemble de toutes les variables, mais en effet seulement un nombre fini de variables apparaissent dans une expression. La valeur d une expression dépend exclusivement des valeurs des variables qui contient, et donc si on évalue une expression dans deux états qui associent les mêmes valeurs aux variables de l expression on obtient le même résultat Pour formaliser la précédente propriété on a besoin de la notion de variable libre. S. Guerrini (LIPN - Paris 13) Sémantique des Langages de Programmation 2009 2010 20 / 23

Propriétés de la sémantique des expressions Variables libres FV(n) = FV(x) = {x} FV(a 1 + a 2 ) = FV(a 1 ) FV(a 2 ) FV(a 1 a 2 ) = FV(a 1 ) FV(a 2 ) FV(a 1 a 2 ) = FV(a 1 ) FV(a 2 ) Lemma Soient s et s deux états t.q. x FV(a) : s x = s x Alors, A a s = A a s FV(true) = FV(false) = FV(a 1 = a 2 ) = FV(a 1 ) FV(a 2 ) FV(a 1 a 2 ) = FV(a 1 ) FV(a 2 ) FV( b) = FV(b) FV(b 1 b 2 ) = FV(b 1 ) FV(b 2 ) Lemma Soient s et s deux états t.q. x FV(b) : s x = s x Alors, B b s = B b s S. Guerrini (LIPN - Paris 13) Sémantique des Langages de Programmation 2009 2010 21 / 23

Propriétés de la sémantique des expressions Compositionalité Les expressions sont obtenu par composition des autres sous-expressions. La sémantique d une expression est défini par induction structurelle et donc la valeur d une expression est obtenue par composition des valeurs de ses sous-expressions. De plus, la valeur d une expression ne dépend que des valeurs des sous-expressions et pas de l effective structure des sous-expressions : Exemple : dans un état s t.q. sx = 1 et sy = 2 A (x + y) y s = 6 A x + y s = 3 A 11 s = 3 A 11 y s = 6 en replacent la sous-expression x + y avec une expression 11 de la même valeur, la valeur de l expression ne change pas. Pour formaliser la précédente propriété il faut formaliser d abord la notion de substitution. S. Guerrini (LIPN - Paris 13) Sémantique des Langages de Programmation 2009 2010 22 / 23

Substitutions Introduction Propriétés de la sémantique des expressions On peut replacer une variable avec une expression dans une autre expression n[a 0/y] = n { a 0 x[a 0/y] = x si x = y sinon (a 1 + a 2)[a 0/y] = (a 1[a 0/y]) + (a 2[a 0/y]) (a 1 a 2)[a 0/y] = (a 1[a 0/y]) (a 2[a 0/y]) (a 1 a 2)[a 0/y] = (a 1[a 0/y]) (a 2[a 0/y]) true[a 0/y] = true false[a 0/y] = true (a 1 = a 2)[a 0/y] = (a 1[a 0/y]) + (a 2[a 0/y]) (a 1 a 2)[a 0/y] = (a 1[a 0/y]) (a 2[a 0/y]) ( b)[a 0/y] = (b[a 0/y]) (b 1 b 2)[a 0/y] = (b 1[b 0/y]) (b 2[b 0/y]) Il y à aussi une sorte de substitution, ou de mise à jour, pour les états. { v si x = y (s[y v]) x = s x sinon Lemma A a[a 0 /y] s = A a (s[a a 0 s]) B b[a 0 /y] s = B b (s[a a 0 s]) Corollary Si A a 1 s = A a 2 s A a[a 1 /y] s = A a[a 2 /y] s B b[a 1 /y] s = B b[a 2 /y] s S. Guerrini (LIPN - Paris 13) Sémantique des Langages de Programmation 2009 2010 23 / 23