Partie II Sémantique.

Slides:



Advertisements
Présentations similaires
La boucle for : init7.c et init71.c
Advertisements

Introduction: Concepts de la programmation
Spécification et qualité du logiciel
Calculs de complexité d'algorithmes
Calcul propositionnel
Chap 1 Grammaires et dérivations.
Introduction : Compilation et Traduction
CSI3525: Concepts des Langages de Programmation Notes # 5: Langages de Programmation Fonctionelle I: Introduction au Scheme.
Les bases de l’Algorithmique
Principes de programmation (suite)
Points importants de la semaine Les commentaires. Les variables. Les instructions conditionnelles. Les instructions itératives (les boucles).
Semaine #1 INF155 par Frédérick Henri.
CPI/BTS 2 Programmation Web Introduction au PHP
18/10/2004 P. Van Roy, InfoT4, S5 1 Informatique T4 Solutions au Test du 18 octobre Peter Van Roy Département dIngénierie Informatique, UCL
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
Analyse lexicale Généralités Expressions rationnelles Automates finis
Programmation logique Logique des prédicats du premier ordre
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
Sémantique axiomatique
Algorithmique et Programmation
Paradigmes de Programmation
© 2007 P. Van Roy. All rights reserved. 1 FSAB1402: Informatique 2 Sémantique Formelle Peter Van Roy Département dIngénierie Informatique, UCL
Introduction à la programmation (Java)
2/11/2004 P. Van Roy, InfoT4, S7 1 Informatique T4 (FSAC1450) Sémantique Peter Van Roy Département dIngénierie Informatique, UCL
Rappels de logique des prédicats du 1er ordre
Principes de programmation (suite)
Semaine #1 INF130 par Frédérick Henri.
Points importants de la semaine Les constantes. Les boucles. Les opérateurs relationnels Les opérateurs logiques.
1 CSI3525: Concepts des Languages de Programmation Notes # 4: Description Semantique des Languages.
CSI3525: Concepts des Languages de Programmation
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Chapitre 8 Structure de contrôle.
Chapitre 3 Syntaxe et sémantique.
Sémantique dénotationnelle
CSI 1502 Principes fondamentaux de conception de logiciels
Instructions de contrôle
Structures de données IFT-2000 Abder Alikacem La récursivité Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009.
Modélisation des opérations Spécifier les transformations détat que lon attend des services de la machine Létat dune machine entièrement déterminée par.
P. Van Roy, LINF LINF1251: Sémantique Formelle Peter Van Roy Département d’Ingénierie Informatique, UCL
Structures de données IFT-2000 Abder Alikacem La récursivité Département d’informatique et de génie logiciel Édition Septembre 2009.
Structures alternative et répétitive
Programmation procédurale Transformations
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
Paradigmes des Langages de Programmation
Cours Architecture des Systèmes Informatiques
Paradigmes des Langages de Programmation
O-notation 1. Introduction 2. O-notation 3. Opérations 3.1 Somme 3.2 Produit 4. Règles générales 5. Exemple 6.Analyse des algorithmes récursifs 6.1 Dilatation.
Programmation fonctionnelle Lambda-calcul
Boucles et Tests For( in ) { } While( ) { } Les exécutions conditionnelles (if.. else) peuvent être évitées avec des indexations logiques. Exemples: y=numeric(length(x));
Algorithmique et programmation en
Créer des packages.
CSI3525: Concepts des Langages de Programmation Notes # 13: Introduction au SmallTalk.
D.E ZEGOUR Ecole Supérieure d’Informatique. Problèmes de décision Concepts de base Expressions régulières Notation particulière pour exprimer certaines.
Le langage Racket (Lisp)
Cours n° 3 Traitements en Java
Introduction et Généralités sur l’Algorithmique
1 PHP 5 Notions fondamentales (niveau 1 – cours #2) Formation continue – Cégep de Sainte-Foy.
Introduction au langage C : Structures de contrôle 1 ère année Génie Informatique Dr Daouda Traoré Université de Ségou
La récursivité Mireille Goud HEG Vd AlgSD - Résurisivité.
6/10/2005 © 2005 P. Van Roy. All rights reserved. 1 FSAB1402: Informatique 2 Récursion sur les Listes Peter Van Roy Département d’Ingénierie Informatique,
Chap 1 Grammaires et dérivations.
Scripts et fonctions Instructions de contrôle
LOGIQUE ET PROGRAMMATION LOGIQUE
Philippe Gandy - 8 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Initiation aux bases de données et à la programmation événementielle
1 Spécifications de Problèmes. 2 Plan Définition Motivation Qualités attendues Types de formalismes Rappels du cours de programmation Spécifications structurées.
Chap. 3 Récursion et induction. Les définitions par récurrence consistent à construire des objets finis, à partir d'autres, selon certaines règles. Les.
Java Réalisé par: Mouna POKORA. PLAN: Définition : Historique: Caractéristiques: un langage orienté objet: un langage interprété : un langage portable:
L ES INSTRUCTIONS DE L ECTURE, E CRITURE ET A FFECTATION Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie – Université.
Transcription de la présentation:

Partie II Sémantique

Qu’est-ce que c’est ? La sémantique donne le sens d’un langage Pour un langage de programmation, elle permet de prévoir le comportement du programme Pour un langage séquentiel, on suppose que le seul comportement observable est le résultat final.

A quoi ca sert ? La sémantique permet de: décider ce que doit faire un programme dans des cas complexes calculer si des programmes sont équivalents, ce qui permet à un compilateur de remplacer l’un par l’autre. dériver la plupart des analyses de programmes construire des compilateurs fiables

Types de sémantique Sémantique opérationnelle : décrit comment un programme peut s’exécuter Sémantique dénotationnelle : donne un objet (p.ex. une fonction des données vers les résultats) comme sens d’un programme Sémantique axiomatique : donne des règles pour raisonner sur les programmes

Liens les 3 types de sémantique ont leur utilité: la sémantique opérationnelle facilite la construction de compilateurs la sémantique dénotationnelle donne les concepts du langage la sémantique axiomatique est la plus utile pour les programmeurs On peut passer de l’une à l’autre en démontrant leur équivalence.

Sémantique Opérationnelle Structurée

Sémantique opérationnelle Sémantique opérationnelle = on donne le sens du programme en donnant un ensemble d’exécutions possibles. + Avantages : + intuition claire + facilité de construire un interpréteur + traitement du non-déterminisme - Inconvénients fréquents : - non compositionnel : on ne peut pas donner de sens à certaines parties - peu abstrait : difficile de prouver que 2 programmes sont équivalents. difficile de construire un compilateur optimisant.

Sémantique Opérationnelle Structurée On évite les inconvients habituels en ajoutant: Compositionalité : On donne des règles d’inférences qui donnent les exécutions possibles en fonction de celles des composants. Abstraction : On ajoute des règles de similarités disant quelles exécutions sont équivalentes.

Système de déduction Une règle d’inférence est de la forme : prémisses conclusion « Si on a prouvé F1 ... Fn on peut déduire F0 ». (Ici les Fi décriront des exécutions possibles) - S’il n’y a pas de prémisses, on l’appelle un axiome. - Une règle peut contenir des méta-variables càd des variables qui représentent n’importe quel texte d’une catégorie syntaxique donnée. On l’appelle alors un schéma de règle. - Une preuve est un arbre fini composé de règles d’inférences ; elle a une conclusion à la racine, appelée théorème. - La théorie d’un système de déduction est l’ensemble des théorèmes.

Exemple : un système de déduction pour la syntaxe Les formules sont de la forme T : VN (le texte T dérive de VN). Chaque règle non contextuelle, par exemple S if E then S1 else S2 peut se traduire en une règle d’inférence : E : expression S1 : instruction S2 : instruction if E then S1 else S2 : instruction

Exemple : déduction syntaxique Une preuve dans ce système est un arbre syntaxique : Les règles d’inférences peuvent aussi vérifier des conditions de contexte, p.ex. les types :

Sémantique Opérationnelle Structurée : Définition Les formules qui nous intéressent: e1  e2 « dans l’état e1 par un pas d’exécution on arrive dans l’état  e2 »

Etats Les états doivent contenir l ’information nécessaire à l ’exécution : la valeur des variables le point d’exécution dans le programme (ici, on le représente par la partie du programme restant à exécuter) l’état de la pile de récursion etc.

Exemple : expressions Pascal on ne traite d’abord que des expressions sans variables et sans effet de bord, donc la mémoire n’est pas (encore) nécessaire.

Règles de congruence : on peut simplifier n ’importe quelle sous-expression en Pascal : de calcul : pour chaque opérateur Pascal, on donne des règles pour calculer la valeur du résultat à partir de la valeur des arguments par exemple : not true  false not false  true

Exemple 7 + (4 * 5)  7 + 20  27 le premier pas est la règle de congruence pour le 2ème argument; sa prémisse est justifiée par la règle de calcul pour *. le second pas est le calcul de +.

Expressions avec mémoire Un état a maintenant 2 composantes: l’expression à évaluer; l’état de la mémoire : une fonction Identificateur  Valeur de congruence : on peut simplifier une sous-expression de calcul : (not true, m)  (false, m) (not false, m)  (true, m) de recherche de valeur en mémoire: (id, m)  (m(id) , m)

Exemple : expression recherche congruence congruence calcul * Donc l’expression s’évalue à 30 en 5 étapes.

Instructions Affectation : 1. (e, m) (e’, m ’) congruence (id := e, m) (id := e’, m ’) calcul := 2. (id := n, m) (skip, update (id, n, m)) instruction vide Conditionnelle : 1. (e, m) (e’, m) (if e then S1 else S2m) (if e’ then S2 else S2m) 2.1 (if true then S1 else S2, m) (S1, m) 2.2 (if false then S1 else S2, m) (S2, m) abréviation (if e then S1, m) (if e then S1 else skip, m) Boucle : (while e do S, m)  (if e then begin S ; while e do S end, m) Séquence : (S1, m)  (S’ 1, m’) (S1 ; S2, m)  (S’1 ; S2, m’) (skip ; S, m)  (S, m) e : expr id : identificateur n : const

Système de transitions Les règles de la SOS définissent une machine à états infinis, qu’on appelle aussi un système de transitions

Questions importantes 1. Il y a-t-il plusieurs suites de flèches partant d’un même état ? (déterminisme) 2. Certaines de ces suites sont-elles infinies ? (terminaison) 3. Aboutissent-elles toutes au même état ? (confluence) 4. Quelle forme ont les états finals ? Les état finals corrects ? Déf. : C final = il n’y a pas de C’ : C  C’ (forme normale) 5. Les flèches préservent-elles les types ?

Equivalence sémantique La SOS détaille les calculs, donc peu de programme sont équivalents Deux programmes P,Q sont équivalents ssi: ils mènent aux mêmes états finaux ils bouclent dans les mêmes circonstances

Exemple if e then S1 else S2 if not(e) then S2 else S1 1. Si (e, m) * (true, m’) alors 1) (if e then S1 else S2, m) * (if true then S1 else S2, m’) (S1, m’) 2) (e, m) * (true, m’) (not(e), m) * (not(true), m’) * (false, m’) (if not(e) then S2 else S1, m) (if false then S2 else S1, m’) 2. si (e, m) * (false, m’) : preuve symétrique Exemple congruence 2.1 calcul not 2.2.