SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE...
-
Upload
folquet-simonnet -
Category
Documents
-
view
104 -
download
1
Transcript of SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE...
![Page 1: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/1.jpg)
SEG 2506CONSTRUCTION DE LOGICIEL
INSTRUCTEUR : HUSSEIN AL OSMAN
LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS:
GREGOR V. BOCHMANN (HTTPS://WWW.SITE.UOTTAWA.CA/~BOCHMANN/)
JIYING ZHAO (HTTP://WWW.SITE.UOTTAWA.CA/~JYZHAO/)
![Page 2: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/2.jpg)
SECTIONS DU COURSSection 0: Introduction
Section 1: Software development processes + Domain Analysis
Section 2: Requirements + Behavioral Modeling (Activity Diagrams)
Section 3: More Behavioral Modeling (State Machines)
Section 4: More Behavioral Modeling (Case Study)
Section 5: Petri Nets
Section 6: Introduction to Compilers
Section 7: Lexical Analysis
Section 8: Finite State Automata
Section 9: Practical Regular Expressions
Section 10: Introduction to Syntax Analysis
Section 11: LL(1) Parser
Section 12: More on LL Parsing (Error Recovery and non LL(1) Parsers)
Section 13: LR Parsing
Section 14: Introduction to Concurrency
Section 15: More on Concurrency
Section 16: Java Concurrency
Section 17: Process Scheduling
Section 18: Web Services
![Page 3: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/3.jpg)
SECTION 0 SYLLABUS
3SEG2506 – Hivers 2013 - Hussein Al Osman
![Page 4: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/4.jpg)
BIENVENUE À SEG2506
4SEG2506 – Hivers 2013 - Hussein Al Osman
![Page 5: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/5.jpg)
INFORMATIONS DU COURS
Professeur: Hussein Al Osman
Courriel: [email protected]
Bureau: SITE4043
Heures de bureau: à déterminer
Site Web: Campus Virtuel (https://maestro.uottawa.ca)
Classes: Lundi 13:00 - 14:30 TBT 327
Mercredi 11:30 – 13:00 TBT 327
Laboratoires: Mercredi 19:00 – 22:00 STE 2060
5SEG2506 – Hivers 2013 - Hussein Al Osman
![Page 6: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/6.jpg)
ÉVALUATION
Devoirs (4) 25%
Laboratoires (9) 15%
Examen Mi- Session 20%
Examen Final 40%
Les devoirs en retard seront acceptés jusqu’à 24 heures après la date limite, avec une pénalité de moins 30%.
6SEG2506 – Hivers 2013 - Hussein Al Osman
![Page 7: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/7.jpg)
LABORATOIRES
Neuf labos en total
Trois labos formels (avec rapport)
• Entre 3 à 4% pour chacun
Les autres sont informels (sans rapport)
• 1% pout chacun• Vous montrez votre travail à la fin à l’AE
7SEG2506 – Hivers 2013 - Hussein Al Osman
![Page 8: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/8.jpg)
LABORATOIRES INFORMELS
Votre note est proportionnelle au nombre des tâches réussites:
• Toutes les tâches sont réussies: 1%• Plus que la moitié des tâches sont réussies: 0.75%• La moitié des tâches sont réussies: 0.5%• Vous avez au moins essayé (considérant que vous vous êtes
présentés dès le début de la session): 0.25%
8SEG2506 – Hivers 2013 - Hussein Al Osman
![Page 9: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/9.jpg)
SUJETS MAJEURS DU COURS
Chapitre 1: Introduction et modélisation comportementale
• Introduction aux processus de développement de logiciel• Modèle Cascade• Modèle Itératif (ou incrémental)• Modèle Agile
• Modélisation comportementale• Cas d'utilisation UML(vu précédemment)• Diagrammes de séquences UML(vu précédemment)• Diagrammes d’activités UML (très utiles pour modéliser le
comportement concurrent)
• Machines d’états UML (modélise le comportement d’un seul objet)
• SDL
9SEG2506 – Hivers 2013 - Hussein Al Osman
![Page 10: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/10.jpg)
SUJETS MAJEURS DU COURS
Chaptire 2: Compilateur, langages formels et grammaires
• Analyse lexique (convertir une séquence de caractères à une séquence d’entités lexicales, ou bien tokens en Anglais)
• Langages formels• Expressions régulières (méthode pour décrire des chaînes de
caractères)
• Automates finies déterministes et non-déterministes
• Analyse syntaxique• Grammaire non contextuelle (décrit le syntaxe d’un langage de
programmation)
• Arbres syntaxique• Analyse syntaxique
10SEG2506 – Hivers 2013 - Hussein Al Osman
![Page 11: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/11.jpg)
SUJETS MAJEURS DU COURS
Chaptire 3: Concurrence
• Concurrence logique et physique• Ordonnance des processus• Exclusion mutuelle pour l'accès à des ressources partagées• Concurrence en Java• Patron de conception et des considérations de performance
11SEG2506 – Hivers 2013 - Hussein Al Osman
![Page 12: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/12.jpg)
SUJETS MAJEURS DU COURS
Chapitre 4: Nouveaux sujets! Nous allons voter sur quel(s) sujet(s ) on va couvrir (étant donné que nous avons terminé les sujets décrits précédemment)
• Programmation mobile (spécialement Android)• Service web• Les composantes de J2EE • Spring Framework• Modèle Agile de développent (spécialement SCRUM)• Autres suggestions…
12SEG2506 – Hivers 2013 - Hussein Al Osman
![Page 13: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/13.jpg)
RÈGLEMENTS DU COURS
Devoirs en retard
• Les devoirs en retard seront acceptés jusqu’à 24 heures après la date limite, avec une pénalité de moins 30%.
13SEG2506 – Hivers 2013 - Hussein Al Osman
![Page 14: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/14.jpg)
RÈGLEMENTS DU COURSPlagiat
• Le plagiat est une infraction grave académique qui ne sera pas toléré.
• Notez que la personne qui fournit des solutions à copier a également commis une infraction car il(elle) est un(e) participant(e) actif(ve) dans le plagiat.
• La personne qui copie et la personne qui laisse copier seront réprimandés également selon les règles de l'Université d'Ottawa.
• S'il vous plaît, référer à ce lien pour plus d'informations: http://www.uottawa.ca/academic/info/regist/crs/0305/home_5_FR.htm
14SEG2506 – Hivers 2013 - Hussein Al Osman
![Page 15: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/15.jpg)
RÈGLEMENTS DU COURS
Présence
• La présence en classe est obligatoire. Selon les règlements scolaires, les étudiants qui ne se présentent pas pour 80% des cours ne seront pas autorisés à passer les examens finaux.
• Toutes les composantes du cours (ex: rapports de laboratoire, travaux, etc.) doivent être complétées, sinon les étudiants peuvent recevoir une INC comme note finale (équivalente à un F).
• L’absence d'une séance de laboratoire ou d'un examen en raison de la maladie sera excusée seulement si vous fournissez un certificat du services de santé (100 Marie Curie, 3e étage) dans la semaine qui suit votre absence.
15SEG2506 – Hivers 2013 - Hussein Al Osman
![Page 16: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/16.jpg)
SECTION 1 PROCESSUS DE DÉVELOPPENT DE LOGICIEL
ANALYSE DU DOMAINE
SEG2506 – Hivers 2013 - Hussein Al Osman 16
![Page 17: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/17.jpg)
SUJETS DE LA SÉANCE
Ce cours touchera brièvement ces deux sujets:
• Processus de développent de logiciel• Analyse du domaine
SEG2506 – Hivers 2013 - Hussein Al Osman 17
![Page 18: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/18.jpg)
SUJET 1
PROCESSUS DE DÉVELOPPENT DE LOGICIEL
SEG2506 – Hivers 2013 - Hussein Al Osman 18
![Page 19: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/19.jpg)
CYCLE DE VIE
La cycle de vie d’un produit
• depuis la création d'une idée pour un produit à travers
• analyse du domaine• collecte des exigences• conception de l'architecture et spécification• programmation et vérification• livraison et le déploiement• maintenance and évolution• retraite
SEG2506 – Hivers 2013 - Hussein Al Osman 19
![Page 20: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/20.jpg)
CYCLE DE VIE
SEG2506 – Hivers 2013 - Hussein Al Osman 20
![Page 21: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/21.jpg)
BESOIN POUR DES MODÈLES
Les symptômes d'insuffisance : la crise de logiciel
• temps prévu et coût dépassé• attentes des utilisateurs n’est pas atteintes• mauvaise qualité
La taille et valeur économique des applications logicielles nécessite des "modèles de processus"
SEG2506 – Hivers 2013 - Hussein Al Osman 21
![Page 22: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/22.jpg)
PROCESSUS COMME UNE «BOÎTE NOIRE»
Produit
Processus
Exigencesinformelles
SEG2506 – Hivers 2013 - Hussein Al Osman 22
![Page 23: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/23.jpg)
PROBLÈMES
L'hypothèse est que les exigences peuvent être pleinement compris avant le développement
Malheureusement l'hypothèse presque jamais valide
Interaction avec le client ne se produit qu'au début (exigences) et la fin (après la livraison)
SEG2506 – Hivers 2013 - Hussein Al Osman 23
![Page 24: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/24.jpg)
PROCESSUS COMME UNE «BOÎTE BLANCHE»
Produit
Processus
Exigences informelles
réaction
SEG2506 – Hivers 2013 - Hussein Al Osman 24
![Page 25: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/25.jpg)
AVANTAGES
Réduire les risques en améliorant la visibilité
Autoriser les changements de projet pendant que le projet avance
• Basés sur la réaction du client
SEG2506 – Hivers 2013 - Hussein Al Osman 25
![Page 26: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/26.jpg)
LES ACTIVITÉS PRINCIPALES
Elles doivent être réalisées indépendamment du modèle
Le modèle affecte simplement le flux entre les activités
SEG2506 – Hivers 2013 - Hussein Al Osman 26
![Page 27: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/27.jpg)
MODÈLE CASCADE
Inventé dans les années 1950 pour les grands systèmes de défense aérienne, popularisé dans les années 1970
Organise les activités dans un flux séquentiel
• On standardise les sorties des différentes activités
Existe en de nombreuses variantes, tous partageant le style de flux séquentiel
SEG2506 – Hivers 2013 - Hussein Al Osman 27
![Page 28: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/28.jpg)
MODÈLE CASCADE Analyse du domaine
Collection des exigences
Conception
Programmation et vérification des modules
Intégration et vérification du système
Livraison, déploiement, et maintenance
SEG2506 – Hivers 2013 - Hussein Al Osman 28
![Page 29: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/29.jpg)
POINTS FORTS DU CASCADEFacile à comprendre, facile à utiliser
Fournit la structure pour les personnels inexpérimenté
Les étapes sont bien comprises
Crée des exigences stables
Facilite la gestion to projet
Fonctionne bien lorsque la qualité est plus importante que le coût ou le calendrier (plus ou moins)
SEG2506 – Hivers 2013 - Hussein Al Osman 29
![Page 30: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/30.jpg)
FAIBLESSES DU CASCADE
Toutes les exigences doivent être connus d'avance
Livrables de chaque phase sont considérés statique- affect négativement la flexibilité
Peut donner une fausse impression de progrès
Ne reflète pas la vrais nature de développent de logiciel: résolution des problèmes d’une façon itératif
L'intégration est un big bang à la fin
Peu de chances pour que le client voie et verifie le système (avant qu'il soit trop tard)
SEG2506 – Hivers 2013 - Hussein Al Osman 30
![Page 31: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/31.jpg)
QUAND UTILISER CASCADE
Presque jamais!!
Mais, rarement, lorsque:
• Les exigences sont très bien connus• Définition du produit est stable• La technologie est très bien comprise• Nouvelle version d'un produit existant (peut-être!)• Portage d'un produit existant à une nouvelle plate-forme
SEG2506 – Hivers 2013 - Hussein Al Osman 31
![Page 32: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/32.jpg)
CASCADE – AVEC RÉACTION Analyse du domaine
Collection des exigences
Conception
Programmation et vérification des modules
Livraison, déploiement, et maintenance
Intégration et vérification du système
SEG2506 – Hivers 2013 - Hussein Al Osman 32
![Page 33: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/33.jpg)
PROCESSUS DE DÉVELOPPEMENT ITÉRATIF
Aussi appelé processus de développement incrémental
Développer le système par cycle répété (itérations)
• Chaque cycle est responsable du développement d'une petite portion de la solution (tranche de fonctionnalité)
Contraste avec cascade:
• Cascade est un processus itératif particulier avec un seul cycle
SEG2506 – Hivers 2013 - Hussein Al Osman 33
![Page 34: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/34.jpg)
PROCESSUS DE DÉVELOPPEMENT ITÉRATIF
Planification pour l'itération
Collecte d’exigences
Conception et mise a jours de l’architecture
Implémentation
Analyse du domain et Planification initial
VerificationEvaluation (impliquant l’utilisateur)
Déploiement
Cycle
SEG2506 – Hivers 2013 - Hussein Al Osman 34
![Page 35: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/35.jpg)
PROCESSUS AGILEInsatisfaction avec les processus de développement des années 1980 et 1990 (après des faillites successive) a résulté dans la création de méthodes agiles. Ces méthodes:
• Concentre sur le code plutôt que la conception• Sont basés sur une approche itérative pour le développement de
logiciels• Sont supposé d’aider a produire des logiciels de rapidement• Ces logiciels doivent être capable d’évoluer rapidement avec les
changements dans les exigences
L'objectif de ces méthodes est de réduire les frais généraux (overhead) dans le processus de développement (par exemple limiter la documentation) et à être en mesure de répondre rapidement à l'évolution des exigences
SEG2506 – Hivers 2013 - Hussein Al Osman 35
![Page 36: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/36.jpg)
MANIFESTE AGILENous découvrons des meilleures façons pour développement de logiciels. Grâce à ce travail, nous sommes rendu-compte que:
Cependant, les items sur la droite sont utiles, main nous accordant plus d’importance sur les items à gauche
Plus utile Moins utile
Interaction entre les individus
Processus et outils
Logiciel qui fonctionne Documentation compréhensive
Collaboration avec le client Négociations prolongées sur les contrats
Réagir au changement Suivre un plan
SEG2506 – Hivers 2013 - Hussein Al Osman 36
![Page 37: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/37.jpg)
LES PRINCIPES DES MÉTHODES AGILES
Règle DescriptionParticipation du client Les clients devraient être impliqués tout au long du processus de
développement. Leur rôle est de fournir et de prioriser les exigences et d'évaluer les itérations déjà complétées.
Livraison incrémentielle
Le logiciel est développé par incréments avec le client spécifiant les exigences à inclure dans chaque incrément.
Individus et non processus
Les compétences de l'équipe de développement doivent être reconnus et exploités. Membres de l'équipe avoir la liberté de développer leurs propres méthodes de travail sans processus normatifs.
Acceptez les changement
Supposez que les exigences du système vont changer et concevez alors le système pour accommoder ces changements futurs.
Maintenez la simplicité Concentrer sur la simplicité dans l’architecture du logiciel que vous développez et dans le processus de développement. Lorsque c’est possible, éliminer les complexités de votre système.
SEG2506 – Hivers 2013 - Hussein Al Osman 37
![Page 38: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/38.jpg)
PROCESSUS SCRUM
(Backlog du Produit) (Backlog d’un Sprint) (Portion du logiciel déjà compléter)
30 jours
SEG2506 – Hivers 2013 - Hussein Al Osman 38
![Page 39: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/39.jpg)
PROBLÈMES AVEC LES MÉTHODES AGILES
Il peut être difficile de maintenir l'intérêt des clients qui sont impliqués dans le processus
Membres de l'équipe peuvent être inadaptées à l’intensité qui caractérise les méthodes agiles
Le minimisation de documentation: presque rien n'est capturé, le code est la seule autorité
SEG2506 – Hivers 2013 - Hussein Al Osman 39
![Page 40: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/40.jpg)
SUJET 2
ANALYSE DU DOMAINE
SEG2506 – Hivers 2013 - Hussein Al Osman 40
![Page 41: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/41.jpg)
MODÉLISATION DU DOMAINE
Le but de l'analyse de domaine est de comprendre le domaine du problème indépendamment du système particulier, nous voulons développer.
Nous ne cherchons pas à définir la frontière entre le système et l'environnement.
Nous nous concentrons sur les concepts et la terminologie du domaine avec une portée plus large que le futur système.
SEG2506 – Hivers 2013 - Hussein Al Osman 41
![Page 42: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/42.jpg)
ACTIVITÉS ET RÉSULTATS DE L’ANALYSE DU DOMAINE1. Un dictionnaire de termes définissant la terminologie et
concepts communs du domaine de problème
2. Description du domaine de problème d'un point de vue de modélisation conceptuel
• Nous utilisons normalement des diagrammes de classes UML (avec aussi peu de détails possible)
• Rappelez-vous, nous ne concevons pas le système, mais on établies seulement la relation entre les entités
3. Décrivez brièvement les principales interactions entre l'utilisateur et le système
SEG2506 – Hivers 2013 - Hussein Al Osman 42
![Page 43: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/43.jpg)
EXEMPLE – TERMINAL DE POINT DE VENTE
SEG2506 – Hivers 2013 - Hussein Al Osman 43
![Page 44: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/44.jpg)
EXEMPLE – DÉFINITION DU PROBLÈME
Nous voulons concevoir le logiciel pour un simple Terminal de Point de Vente qui fonctionne comme suit:
• Affiche la somme d'argent à payer pour les marchandises qui vont être achetés par l’utilisateur
• Demande à l'utilisateur d'insérer une carte bancaire (débit ou crédit)
• Si l'utilisateur insère une carte de débit, il est invité à choisir le type de compte
• Demande à l'utilisateur d'entrer un numéro d'identification• Vérifie le numéro d'identification contre celui qui est stocké
sur la puce• Communique avec la banque associée avec la carte afin
d'effectuer la transaction
SEG2506 – Hivers 2013 - Hussein Al Osman 44
![Page 45: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/45.jpg)
EXEMPLE – DICTIONNAIRE DES TERMES (1)
Terminal Point de Vente: machine qui permet de complété une transaction de vente en utilisant une carte financière…
Carte de crédit: carte de paiement plastique issue aux utilisateurs comme système de paiement. Il permet à son titulaire de payer des biens et des services basés sur la promesse du titulaire de repayer…
Carte de débit: Carte de paiement plastique qui fournit au titulaire d'accès électronique à son compte bancaire…
SEG2506 – Hivers 2013 - Hussein Al Osman 45
![Page 46: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/46.jpg)
EXEMPLE – DICTIONNAIRE DES TERMES (2)Banque: institution financière qui issue des cartes financières et où l'utilisateur a au moins un compte dans lequel il ou elle peut retirer ou déposer de l'argent…
Compte bancaire: un compte financier entre un utilisateur et une institution financière ...
Utilisateur: un client qui possède au moins une carte financière et l’avantage de l'utiliser un terminal de point de vente…
Numéro d’identification: mot de passe numérique secret partagé entre un utilisateur et un système qui peut être utilisé pour authentifier l'utilisateur au système…
SEG2506 – Hivers 2013 - Hussein Al Osman 46
![Page 47: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/47.jpg)
EXEMPLE – DOMAINE DU PROBLÈME
NombreIdentification
CarteFinanciere
Banque
Utilisateur
CarteDebit CarteCredit
CompteBancaire*
1
1..2
*
1
1..*TerminalPdv
*
SEG2506 – Hivers 2013 - Hussein Al Osman 47
![Page 48: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/48.jpg)
EXEMPLE – INTERACTION PRINCIPALES
Entrées au Terminal PDV: insérez de la carte financière, entrez le nombre d’identification, spécifiez le type de compte, confirmez la vente…
Sotie du Terminal PDV: message d’erreur (concernant le nombre d’identification ou bien les fonds), confirmation de la vente…
SEG2506 – Hivers 2013 - Hussein Al Osman 48
![Page 49: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/49.jpg)
SECTION 2
EXIGENCES
MEDULLISATION COMPARTMENTAL
49SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 50: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/50.jpg)
SUJETS
Revue de quelques notions au sujet des exigences
• Exigences du client• Exigences fonctionnelles• Exigences non-fonctionnelles
Introduction à la modélisation comportementale
• Diagrammes d’activités
50SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 51: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/51.jpg)
SUJET 1
EXIGENCES
51SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 52: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/52.jpg)
EXIGENCES
Nous allons décrire trois types d’exigences:
• Exigences du client (aussi appelé informelle)• Exigences fonctionnelles • Exigences non-fonctionnelles
52SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 53: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/53.jpg)
EXIGENCES DU CLIENT
Nous avons complété l’analyse du domaine, nous sommes prêts à passer à la prochaine étape
Nous devons savoir exactement ce que le client a besoin:
Exigences du client
• C’est l’endroit où les exigences du client sont collectées
Typiquement composé de déclarations non-techniques de haut niveau
Exemple
• Exigence 1: « Nous devons développer un portal de client en ligne »
• Exigence 2: « Le portal doit lister tous nos produits »
53SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 54: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/54.jpg)
EXIGENCES FONCTIONNELLES
Capturer le comportement prévu du système
• Peut être exprimer comme services, tâches ou fonctions que le système effectue
Les cas d’utilisation sont rapidement devenus une pratique répandue pour capturer les exigences
• Ceci est surtout vrai dans la communauté objet-orientée d’où ces notions origines
• Leur application n’est pas limitée aux systèmes objet-orientés
54SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 55: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/55.jpg)
CAS D’UTILISATION
Un cas d’utilisation définit un ensemble d’interactions but-orienté entre les acteurs externes et le système en considération
Les acteurs sont des composantes à l’extérieur du système qui interagissent avec le système
• Un acteur peut être une classe d’utilisateurs ou d’autres systèmes
Un cas d’utilisation est initié par un utilisateur qui possède un but particulier en tête, et est complété lorsque le but est atteint
Il décrit la séquence d’interactions entre les acteurs et le système qui sont nécessaires pour livrer le service qui satisfait au but
55SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 56: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/56.jpg)
DIAGRAMMES DE CAS D’UTILISATION
56SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 57: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/57.jpg)
DIAGRAMMES DE CAS D’UTILISATION
Relation d’inclusion: un fragment de cas d’utilisation qui est dupliqué en multiples cas d’utilisation
Relation d’extension: cas d’utilisation qui ajoute conditionnellement des étapes à un cas d’utilisation de première classe
• Exemple:
57SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 58: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/58.jpg)
CAS D’UTILISATION – EXEMPLE DE GUICHET AUTOMATIQUE BANCAIRE (ATM)
Acteurs:
• Client de l’ATM• Opérateur de l’ATM
Cas d’utilisation:
• Le client peut:• Retirer des fonds d’un compte chèque ou épargne• Voir la balance du compte• Transférer des fonds d’un compte à un autre
• L’opérateur de l’ATM peut:• Éteindre la machine ATM • Remplir le distributeur de monnaie de la machine• Démarrer la machine ATM
58SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 59: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/59.jpg)
CAS D’UTILISATION – EXEMPLE DE L’ATM
59SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 60: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/60.jpg)
CAS D’UTILISATION – EXEMPLE DE L’ATM
Valider le NIP est une cas d’utilisation d’inclusion
• Il ne peut pas être exécuté tout seul• Doit être exécuté en faisant partie du cas d’utilisation concret
Cependant, un cas d’utilisation concret peut être exécuté
60SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 61: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/61.jpg)
CAS D’UTILISATION – ATM – VALIDER LE NIP (1)Nom du cas d’utilisation: Valider le NIP
Sommaire: Le système valide le NIP du client
Acteur: Client de l’ATM
Précondition: L’ATM est inoccupé, affichant le message de bienvenue.
61SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 62: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/62.jpg)
CAS D’UTILISATION – ATM – VALIDER LE NIP (2)Séquence principale:
1. Le client insert sa carte ATM dans le lecteur.
2. Si le système reconnait la carte, il lit le numéro de la carte.
3. Le système demande au client son NIP.
4. Le client rentre son NIP.
5. Le système vérifie la date d’expiration de la carte et si la carte a été déclarée perdue ou volée.
6. Si la carte est valide, le système vérifie si le NIP rentré correspond au NIP de la carte maintenu par le système.
7. Si les NIP matchent, le système vérifie quels comptes sont accessibles avec la carte ATM.
8. Le système affiche les comptes du client et demande au client quel type de transaction il veut: retirer, voir ou transférer.
62SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 63: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/63.jpg)
CAS D’UTILISATION – ATM – VALIDER LE NIP (3)Séquences alternatives:
• Étape 2: Si le système ne reconnait pas la carte, il éjecte la carte
• Étape 5: Si le système détermine que la carte est expirée, le système confisque la carte.
• Étape 5: Si le système détermine que la carte a été déclarée perdue ou volée, le système confisque la carte.
• Étape 7: Si le NIP rentré par le client ne matche pas le NIP de cette carte, le système redemande le NIP.
• Étape 7: Si le client rentre un NIP incorrect trois fois, le système confisque la carte.
• Étapes 4-8: Si le client rentre « Annuler », le système annule la transaction et éjecte la carte.
Poste-condition: Le NIP du client a été validé.63SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 64: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/64.jpg)
CAS D’UTILISATION – ATM - RETIRER DES FONDS (1)Nom du cas d’utilisation: Retirer des fonds
Sommaire : Le client retire un montant spécifique de fonds d'un compte bancaire valide .
Acteur : Le client de l’ATM
Dépendance: Inclure le cas d’utilisation pour valider le NIP.
Condition: ATM est inactif , l'affichage d'un message de bienvenue.
64SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 65: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/65.jpg)
CAS D’UTILISATION – ATM - RETIRER DES FONDS (2)Séquence principale :
1. Inclure le cas d’utilisation pour valider le NIP.
2. Le client sélectionne « retrait », rentre le montant, et sélectionne le numéro de compte .
3. Le système vérifie si le client dispose de suffisamment de fonds dans le compte et si la limite quotidienne ne sera pas dépassée .
4. Si toutes les conditions sont vérifiées, le système autorise la distribution de l'argent.
5. Le système distribue le montant d’argent requis .
6. Le système imprime un reçu avec le numéro de transaction , type de transaction, le montant retiré , et le solde du compte .
7. Le système éjecte la carte .
8. Le système affiche le message de bienvenue.
65SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 66: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/66.jpg)
CAS D’UTILISATION – ATM - RETIRER DES FONDS (3)Séquences alternatives :
• Étape 3: Si le système détermine que le numéro de compte n'est pas valide , il affiche un message d'erreur et éjecte la carte.
• Étape 3: Si le système détermine que les fonds sont insuffisants dans le compte du client , il affiche une excuse et éjecte la carte .
• Étape 3: Si le système détermine que le montant de retrait quotidien maximal autorisé a été dépassé , il affiche une excuse et éjecte la carte .
• Étape 5: Si les fonds de l' ATM sont épuisées, le système affiche une excuse , éjecte la carte , et arrête le guichet automatique.
Poste-condition : les fonds du client ont été retirés .
66SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 67: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/67.jpg)
EXIGENCES NON FONCTIONNELLES
Les exigences fonctionnelles définissent ce que le système doit faire
Les exigences non fonctionnelles définissent comment le système est supposé être.
• Généralement, décrit les attributs du système tels que sécurité, fiabilité, maintenance, scalabilité, utilisabilité…
67SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 68: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/68.jpg)
EXIGENCES NON FONCTIONNELLES
Les exigences non-fonctionnelles peuvent être spécifiées dans une section distincte de la description de cas d'utilisation
• Dans l’exemple précédent, pour le cas d’utilisation « valider le NIP », il peut y avoir une exigence de sécurité que le numéro de la carte et le NIP doivent être encryptés.
Les exigences non fonctionnelles peuvent être spécifiées pour un groupe de cas d’utilisation ou pour le système entier.
• Exigence de sécurité: Le système doit encrypté le numéro de carte ATM et le NIP.
• Exigence de performance: Le système doit répondre aux sélections de l’acteur dans un délai de 5 secondes.
68SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 69: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/69.jpg)
SUJET 2
MODÉLISATION COMPORTEMENTALE
69SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 70: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/70.jpg)
MODÉLISATION DE LOGICIEL
UML définit treize types de diagrammes de base, divisées en deux catégories générales:
• Modélisation Structurelle• Modélisation Comportementale
Modèles structurels définissent l'architecture statique d'un logiciel
• Ils sont utilisés pour modéliser les «choses» qui composent un modèle - les classes, les objets, les interfaces et les composants physiques
• En outre, ils sont utilisés pour modéliser les relations et dépendances entre les éléments
70SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 71: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/71.jpg)
MODÉLISATION COMPORTEMENTALE
Les modèles comportementale capture le comportement dynamique d'un système durant son exécution pendant une période de temps
Ils fournissent une vue d'un système dont le contrôle et le séquençage sont considérées
• Soit à l'intérieur d'un objet (au moyen d'une machine à états finis) ou entre des objets (par analyse des interactions d'objets).
71SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 72: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/72.jpg)
DIAGRAMMES D’ACTIVITÉS UML
En UML un diagramme d'activité est utilisé pour afficher la séquence des actions produits par un système
Ils montrent le flux de travail dès le début jusqu’à la fin
• Détail les nombreux trajets de décision qui existent dans la progression des événements contenus dans l'activité
Très utile pour modéliser le comportement de concurrence
72SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 73: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/73.jpg)
DIAGRAMMES D’ACTIVITÉS UML
Un exemple d'un diagramme d'activité est illustrée ci-dessous
(Nous reviendrons sur ce diagramme)
73SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 74: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/74.jpg)
ACTIVITÉ
Une activité est la spécification d'une séquence paramétrée de comportement
Montré comme un rectangle aux coins arrondis renfermant toutes les actions et les flux de contrôle
74SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 75: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/75.jpg)
ACTIONS ET CONTRAINTES
Une action représente une étape unique dans une activité
Les contraintes peuvent être attachés aux actions
75SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 76: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/76.jpg)
FLUX DE CONTRÔLE
Indique le flux de contrôle d'une action à la prochaine
• Sa notation est une flèche
Nœud Initial
Nœud Final, deux types:
Nœud Final d’une Activité Nœud Final d’un Flux
76SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 77: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/77.jpg)
FLUX D’OBJETS
Un flux d'objet est un trajet le long duquel des objets peuvent passer
• Un objet est représentée par un rectangle
Un autre façon pour montrer la même chose:
77SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 78: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/78.jpg)
DÉCISION ET NŒUDS DE FUSION
Les nœuds de décision et fusion ont la même notation: une forme de diamant
Le flux de contrôle qui sort d’un nœud de décision sont associé avec des conditions
78SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 79: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/79.jpg)
NŒUDS DE FORK ET JONCTION (JOIN)
Les nœuds de fork et join ont la même notation: soit une barre horizontale ou verticale
Ils indiquent le début et la fin des threads (fils) de contrôle simultanés
• « Join » synchronise deux entrées et produit une seule sortie• Le flux de sortie de « join» ne peut pas exécuter jusqu'à ce
que toutes les flux d’entrées ont été reçues
79SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 80: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/80.jpg)
PARTITION
Représenté comme couloir de natation horizontal ou vertical
• Représente un groupe d’actions qui ont des caractéristiques communes
80SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 81: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/81.jpg)
DIAGRAMMES D’ACTIVITÉS UML
Revenant à notre exemple initial
81SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 82: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/82.jpg)
LA GESTION DES PROBLÈMES DANS LES PROJETS DE LOGICIEL
82Courtesy of uml-diagrams.org
SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 83: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/83.jpg)
PLUS SUR LES DIAGRAMMES D’ACTIVITÉS
Régions d'activité interruptible
Régions d'extension
Gestionnaires d'exceptions (Exception handlers)
83SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 84: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/84.jpg)
RÉGIONS D'ACTIVITÉ INTERRUPTIBLE
Entoure un ensemble d'actions qui peut être interrompu
Exemple ci-dessous:
• L’action « Process Order » vas exécuter jusqu’à la fin où le contrôle vas être passé vers l’action « Close Order », à moins que l’ Interruption « Cancel Request » est reçu, ce qui vas causer le contrôle d’être passé vers l’action « Cancel Order ».
84SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 85: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/85.jpg)
RÉGIONS D'EXTENSION
Une région d'extension est une zone d'activité qui exécute à plusieurs reprises pour consommer tous les éléments d'une collection d'entrée
Exemple d’un « checkout » des livres dans une bibliothèque modélisée à l'aide d'une zone d'expansion
85
Checkout Books
Find Books to Borrow
Checkout Book
Show Due Date
Place Books in Bags
SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 86: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/86.jpg)
RÉGIONS D'EXTENSION
Un autre exemple: Encodage de vidéo
86
Encode Video
Capture Video Extract Audio from Frame
Encode Video Frame
Save Encoded Video
Attach Audio to Frame
SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 87: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/87.jpg)
GESTIONNAIRES D'EXCEPTIONS
Un gestionnaire d'exception est un élément qui spécifie quoi exécuter dans le cas où l'exception spécifiée se produit pendant l'exécution du nœud protégé
En Java
• “Try block” correspond à un “Protected Node”• “Catch block” correspond à un “Handler Body Node”
87SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 88: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/88.jpg)
SECTION 3
MODÉLISATION COMPORTEMENTALE
SEG2506 – Hiver 2014 – Hussein Al Osman 88
![Page 89: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/89.jpg)
SUJETS
On va continuer avec le sujet de modélisation comportementale
On va introduire les composantes des machines d’états UML
SEG2506 – Hiver 2014 – Hussein Al Osman 89
![Page 90: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/90.jpg)
DIAGRAMME D’ACTIVITÉ VS MACHINES D’ÉTATS
Pour les diagrammes activités
• Sommet représente les Actions• Arrêt (flèche) représente une transition qui va avoir lieu après
la complétion d’une action et avant le début d’une autre (flux de contrôle)
SEG2506 – Hiver 2014 – Hussein Al Osman 90
Sommet représentant une action Flèche représentant
une transition d’une action à une autre
![Page 91: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/91.jpg)
DIAGRAMME D’ACTIVITÉ VS MACHINES D’ÉTATS
Pour les machines d’états
• Sommet représente le statut (état) d’un processus• Arrêt (flèche) représente un évènement
SEG2506 – Hiver 2014 – Hussein Al Osman 91
Sommet représentant le statut Arrêt représentant un
évènement
![Page 92: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/92.jpg)
MACHINES D’ÉTATS UML
Utilisé pour modéliser le comportement dynamique d’un processus
• Peut être utilisé pour modéliser de haut niveau le comportement général d’un système entier
• Peut être utilisé pour modéliser le comportement détaillé d’un seul objet
• Tout autre niveau de détail entre ces deux extrêmes est possible
SEG2506 – Hiver 2014 – Hussein Al Osman 92
![Page 93: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/93.jpg)
EXEMPLE D’UNE MACHINE D’ÉTATS
Exemple Pour Modéliser les états d’une porte de garage
(On va revenir à cet exemple plus tard)
SEG2506 – Hiver 2014 – Hussein Al Osman 93
![Page 94: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/94.jpg)
ÉTATS
Symbole pour un état
Un système dans un état va rester dans cet état jusqu’à l’occurrence d’un évènement qui lui cause de changer d’état
• Être dans un état veut dire que le système va se comporter d’une façon spécifique en réponse à un évènement qui se produit
Symboles pour les états initial et final
SEG2506 – Hiver 2014 – Hussein Al Osman 94
![Page 95: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/95.jpg)
ÉTATS
Plusieurs types différents d’évènements peuvent causer le passage du système d’un état à un autre
• Dans chaque état, le système se comporte d’une façon différente
SEG2506 – Hiver 2014 – Hussein Al Osman 95
![Page 96: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/96.jpg)
TRANSITIONS
Transitions sont représentées par des flèches
SEG2506 – Hiver 2014 – Hussein Al Osman 96
![Page 97: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/97.jpg)
TRANSITIONSUne transition représente un changement d’état en réponse à un évènement
• It est supposé se produire d’une façon instantanée (ça ne prend pas du temps)
Une transition peut avoir
• Un Déclencheur (Trigger): la cause de la transition qui peut être un évènement ou le passage du temps
• Une Garde (Guard): une condition qui doit être vraie pour que le déclencheur cause la transition
• Un Effet (Effect): une action qui va être invoquée directement sur le système ou l’objet modélisé lorsque la transition se produit
SEG2506 – Hiver 2014 – Hussein Al Osman 97
![Page 98: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/98.jpg)
ACTIONS D’ÉTATS
Un effet peut être associé avec une transition
Si l’état de destination est associé avec plusieurs transitions d’arrivée (plusieurs transitons arrive a cet état), et chaque transition possède le même effet:
• Ce serait mieux d’associer l’effet avec les états (au lieu des transitions)
• On peut réaliser cela en utilisant un effet d’entrée• On peut aussi ajouter un effet de sortie
SEG2506 – Hiver 2014 – Hussein Al Osman 98
![Page 99: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/99.jpg)
AUTO TRANSITION
Un état peut avoir une transition qui est dirigée vers lui-même: auto transition
Ceci est plus utile quand un effet est associé avec la transition
SEG2506 – Hiver 2014 – Hussein Al Osman 99
![Page 100: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/100.jpg)
REVENANT À NOTRE EXEMPLE INITIAL
Exemple pour modéliser les états d’une porte
SEG2506 – Hiver 2014 – Hussein Al Osman 100
![Page 101: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/101.jpg)
DÉCISIONS
Comme dans les diagrammes d’activité, on peut utiliser des nœuds de décisions (ont les appelle pseudo-états)
Les nœuds de décisions sont représentés par des symboles de diamants
• On a toujours une transition d’arrivée et deux ou plus transitions de départ
• La branche d’exécution est décidée par la condition (garde) associée avec les transitions qui sortent du nœud de décision
SEG2506 – Hiver 2014 – Hussein Al Osman 101
![Page 102: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/102.jpg)
DÉCISIONS
SEG2506 – Hiver 2014 – Hussein Al Osman 102
![Page 103: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/103.jpg)
ÉTATS COMPOSÉS
Une machine d’état peut inclure des diagrammes de sous-machine
Exemple d’une application de communication simple:
SEG2506 – Hiver 2014 – Hussein Al Osman 103
Connected
Waiting
ProcessingByte
receiveByte byteProcessed
disconnect
Disconnected
connect
closeSession
![Page 104: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/104.jpg)
ÉTATS COMPOSÉS - EXEMPLE
SEG2506 – Hiver 2014 – Hussein Al Osman 104
![Page 105: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/105.jpg)
ÉTATS COMPOSÉS - EXEMPLE
Même exemple, mais avec une représentation alternative
• Le symbole dans l’état “Check Pin” indique que les détails de la sous-machine sont spécifiés dans une autre machine d’état
SEG2506 – Hiver 2014 – Hussein Al Osman 105
![Page 106: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/106.jpg)
POINTS D’ENTRÉE
Parfois, on n’a pas besoin de commencer l’exécution par l’état initial
• Il arrive des fois qu’on veut commencer l’exécution à partir d’un point alternatif
SEG2506 – Hiver 2014 – Hussein Al Osman 106
PerformActivity
![Page 107: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/107.jpg)
POINTS D’ENTRÉE
Voici le même système qu’on vient de voir, d’un niveau plus haut
SEG2506 – Hiver 2014 – Hussein Al Osman 107
![Page 108: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/108.jpg)
POINTS DE SORTIE ALTERNATIVE
Il est aussi possible d’avoir des points de sortie alternative d’un état composé
SEG2506 – Hiver 2014 – Hussein Al Osman 108
![Page 109: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/109.jpg)
CAS D’UTILISATION – ATM – VALIDER LE NIP (1)Nom du cas d’utilisation: Valider le NIP
Sommaire: Le système valide le NIP du client
Acteur: Client de l’ATM
Précondition: L’ATM est inoccupé, affichant le message de bienvenue.
109SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 110: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/110.jpg)
CAS D’UTILISATION – ATM – VALIDER LE NIP (2)Séquence principale:
1. Le client insert sa carte ATM dans le lecteur.
2. Si le système reconnait la carte, il lit le numéro de la carte.
3. Le système demande au client son NIP.
4. Le client rentre son NIP.
5. Le système vérifie la date d’expiration de la carte et si la carte a été déclarée perdue ou volée.
6. Si la carte est valide, le système vérifie si le NIP rentré correspond au NIP de la carte maintenu par le système.
7. Si les NIP matchent, le système vérifie quels comptes sont accessibles avec la carte ATM.
8. Le système affiche les comptes du client et demande au client quel type de transaction il veut: retirer, voir ou transférer.
110SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 111: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/111.jpg)
CAS D’UTILISATION – ATM – VALIDER LE NIP (3)Séquences alternatives:
• Étape 2: Si le système ne reconnait pas la carte, il éjecte la carte
• Étape 5: Si le système détermine que la carte est expirée, le système confisque la carte.
• Étape 5: Si le système détermine que la carte a été déclarée perdue ou volée, le système confisque la carte.
• Étape 7: Si le NIP rentré par le client ne matche pas le NIP de cette carte, le système redemande le NIP.
• Étape 7: Si le client rentre un NIP incorrect trois fois, le système confisque la carte.
• Étapes 4-8: Si le client rentre « Annuler », le système annule la transaction et éjecte la carte.
Poste-condition: Le NIP du client a été validé.111SEG2506 – Hiver 2014 – Hussein Al Osman
![Page 112: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/112.jpg)
EXEMPLE MACHINE ATM
SEG2506 – Hiver 2014 – Hussein Al Osman 112
Validation du NIP:
![Page 113: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/113.jpg)
EXEMPLE MACHINE ATM
SEG2506 – Hiver 2014 – Hussein Al Osman 113
Retirage des fonds:
![Page 114: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/114.jpg)
SECTION 4
MODÉLISATION COMPORTEMENTALE
SEG2106 – Winter 2014 – Hussein Al Osman 114
![Page 115: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/115.jpg)
SUJETS
Nous allons continuer de parler la machine d’état UML
Nous allons voir un exemple complet d’étude de cas pour construction d’un logiciel simple avec concentration sur les machines d’état UML
Nous terminerons cette section avec des commentaires finaux de sagesse!
SEG2106 – Winter 2014 – Hussein Al Osman 115
![Page 116: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/116.jpg)
SÉANCE PASSÉE
Nous avons parler des machines d’état UML
• États et transitions• Effets d’état• Auto Transition• Pseudo-états de décisions• États composés• Entrées et sorties alternatives
Aujourd’hui, nous allons voir des concepts de machines d’états UML plus avancés
SEG2106 – Winter 2014 – Hussein Al Osman 116
![Page 117: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/117.jpg)
ÉTATS D’HISTOIRE
Une machine d'état décrit les aspects dynamiques d'un processus dont le comportement actuel dépend de son passé
Une machine d'état en vigueur spécifie l'ordre légal des états dont un processus peut passer au cours de sa vie
Quand une transition entre dans un état composé, l'action de la sous machine d'état recommence à son état initial
• Sauf si un point d'entrée alternatif est spécifié
Il y a des moments où vous souhaitez modéliser un processus de sorte qu'il se souvient du dernièr sous-état qui était actif avant de quitter l'état composé
SEG2106 – Winter 2014 – Hussein Al Osman 117
![Page 118: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/118.jpg)
ÉTATS D’HISTOIRE
Diagramme d’état simple d’une machine à laver:
• Événement coupure du courant électrique: transition à l’état “Power Off”
• Événement courant restauré: transition à l’état actif avant la coupure du courant pour continuer le cycle
SEG2106 – Winter 2014 – Hussein Al Osman 118
![Page 119: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/119.jpg)
RÉGIONS CONCURRENTIELLES
Les machines de sous-état séquentielles sont le genre de sous-machines les plus connues
• Dans certaines situations de modélisation, on fait appel à des sous machines concurrentielles (deux machines de sous-état ou plus qui travaillent simultanément)
Exemple des freins:
SEG2106 – Winter 2014 – Hussein Al Osman 119
![Page 120: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/120.jpg)
RÉGIONS CONCURRENTIELLES
Exemple de modélisation d’un système de maintenance qui utilise des régions concurrentielles
SEG2106 – Winter 2014 – Hussein Al Osman 120
Idle
Maintenance
Testing devices
Self diagnosing
WaitingProcessing Command
Testing
Commanding
command
commandProcessed[continue]
commandProcessed
[not continue]
maintain
diagnosisCompleted
testingCompleted
shutDown
![Page 121: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/121.jpg)
RÉGIONS ORTHOGONALES
Les régions concurrentielles sont aussi nommés régions orthogonales
Ces régions nous permettent de modéliser la relation de « ET » entre les états (par opposition à la relation « OU » de défaut)
• Ceci veut dire que dans une machine de sous-état, le système peut exister dans différents états en même temps
Analysons ce phénomène en utilisant un exemple de machine d’état d’un clavier d’ordinateur
SEG2106 – Winter 2014 – Hussein Al Osman 121
![Page 122: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/122.jpg)
EXEMPLE DU CLAVIER (1)
Exemple du clavier sans régions orthogonales
SEG2106 – Winter 2014 – Hussein Al Osman 122
![Page 123: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/123.jpg)
EXEMPLE DU CLAVIER (2)
Exemple du clavier avec régions orthogonales
SEG2106 – Winter 2014 – Hussein Al Osman 123
![Page 124: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/124.jpg)
PORTE DU GARAGE – ÉTUDE DE CAS
Contextes
• La compagnie DOORS inc. fabrique des composantes de portes de garage
• Cependant, ils ont des problèmes avec le logiciel intégré (embedded) qui contrôle le moteur (motor unit) de l’ouvre-porte automatique du garage
• Ils ont développé ce logiciel eux-mêmes• Ceci leur cause la perte de clients
• Ils ont décidé de jeter le logiciel existant et embaucher une compagnie de logiciel professionnelle pour livrer un logiciel sans problèmes (bugs)
SEG2106 – Winter 2014 – Hussein Al Osman 124
![Page 125: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/125.jpg)
EXIGENCES DU CLIENTExigences (informelles) du client:
• Exigence 1: Quand la porte du garage est fermée, elle doit s’ouvrir lorsque l’utilisateur pèse le bouton sur le système de contrôle mural ou sur la télécommande
• Exigence 2: Quand la porte du garage est ouverte, elle doit se fermer lorsque l’utilisateur pèse le bouton sur le système de contrôle mural ou sur la télécommande
• Exigence 3: La porte du garage ne doit pas se fermer sur un obstacle
• Exigence 4: Il doit y avoir un moyen pour avoir la porte du garage semi-ouverte
• Exigence 5: Le système doit accomplir un test auto-diagnostic avant d’effectuer une commande (ouvrir ou fermer) afin de s’assurer que toutes ses composantes sont fonctionnelles
SEG2106 – Winter 2014 – Hussein Al Osman 125
![Page 126: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/126.jpg)
EXIGENCES DU CLIENT
SEG2106 – Winter 2014 – Hussein Al Osman 126
Motor Unit (includes a microcontroller where the software will be
running)
Wall Mounted Controller
(a remote controller is also supported)
Sensor Unit(s)(detects obstacles, when the door is fully open and when it is fully closed)
![Page 127: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/127.jpg)
DIAGRAMME DE CAS D’UTILISATION
SEG2106 – Winter 2014 – Hussein Al Osman 127
Open Door
Close Door
Run Diagnosis
Diagramme de cas d’utilisation
include
includeGarage Door User
Garage Door System
![Page 128: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/128.jpg)
CAS D’UTILISATION: EFFECTUER UN DIAGNOSTICNom du cas d’utilisation: Effectuer un Diagnostic
Sommaire: Le système effectue un test autodiagnostic
Acteur: L’utilisateur de la porte de garage
Précondition: L’utilisateur a pesé sur la télécommande ou sur le bouton du système de contrôle mural
Séquence:
1. Vérifier si le détecteur fonctionne correctement
2. Vérifier si l’unité moteur fonctionne correctement
3. Si tout les composantes sont vérifiés avec succès, le système autorise l’exécution de la commande
Séquence alternative:
Étape 3: Un des points à vérifier échoue, et donc le système n’autorise pas l’exécution de la commande
Poste condition: L’autodiagnostic détermine que le système est opérationnel
SEG2106 – Winter 2014 – Hussein Al Osman 128
![Page 129: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/129.jpg)
CAS D’UTILISATION: OUVRIR LA PORTENom du cas d’utilisation: Ouvrir la porte
Sommaire: Ouvrir la porte du garage
Acteur: L’utilisateur de la porte du garage
Dépendance: Inclure le cas d’utilisation d’effectuer un diagnostic
Précondition: Le système de la porte du garage est opérationnel et prêt à accepter une commande
Séquence:
1. L’utilisateur pèse la télécommande ou le bouton du système de contrôle mural
2. Inclure le cas d’utilisation d’effectuer un diagnostic
3. Si la porte est actuellement en train de se fermer ou elle est déjà fermée, le système ouvre la porte
Séquence alternative:
Étape 3: Si la porte est ouverte, le système ferme la porte
Étape 3: Si la porte est en train de s’ouvrir, le système arrête la porte (la gardant semi-ouverte)
Poste-condition: La porte du garage est ouverte
SEG2e06 – Winter 2014 – Hussein Al Osman 129
![Page 130: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/130.jpg)
CAS D’UTILISATION: FERMER LA PORTENom du cas d’utilisation: Fermer la porte
Sommaire: Fermer la porte du garage
Acteur: L’utilisateur de la porte du garage
Dépendance: Inclure le cas d’utilisation d’effectuer un diagnostic
Précondition: Le système de la porte du garage est opérationnel et prêt à accepter une commande
Séquence:
1. L’utilisateur pèse la télécommande ou le bouton du système de contrôle mural
2. Inclure le cas d’utilisation d’effectuer un diagnostic
3. Si la porte est actuellement en train de s’ouvrir ou elle est déjà ouverte, le système ferme la porte
Séquence alternative:
Étape 3: Si la porte est en train de se fermer ou elle est déjà fermée, le système ouvre la porte
Étape 3: Si la porte est en train de s’ouvrir, le système arrête la porte (la gardant semi-ouverte)
Poste-condition: La porte du garage est fermée
SEG2106 – Winter 2014 – Hussein Al Osman 130
![Page 131: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/131.jpg)
MODÉLISATION COMPORTEMENTALE DE HAUT NIVEAU
SEG2106 – Winter 2014 – Hussein Al Osman 131
![Page 132: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/132.jpg)
MODÈLE STRUCTURAL DE HAUT NIVEAU
SEG2106 – Winter 2014 – Hussein Al Osman 132
Sensor«interface»
SensorEventHandler
Motor
* *
«interface»EventHandler
«interface»ControllerEventHandler
Controller
EventGenerator
WallMountedController RemoteController
![Page 133: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/133.jpg)
MODÈLE STRUCTURAL RAFFINÉ
SEG2106 – Winter 2014 – Hussein Al Osman 133
+Sensor(in id : long)+run() : void+isFunctioning() : bool#sendEvent(in eventId : int) : void
Sensor
+obstacleDetected() : void+doorClosed() : void+doorOpen() : void
«interface»SensorEventHandler
+buttonPressed() : void+obstacleDetected() : void+doorClosed() : void+doorOpen() : void+Motor()-closeDoor() : bool-openDoor() : bool+getDoorState() : DoorState+isFunctioning() : bool+run() : void
-eventGenerators: List
Motor
+Open+Opening+Closed+Closing
«enumeration»DoorState
* *
1 1
«interface»EventHandler
+buttonPressed() : void
«interface»ControllerEventHandler
+Controller(in id : long)+pressButton() : bool+run() : void#sendEvent(in eventId : int) : void
Controller
+EventGenerator(in id : long)+getId() : long+addEventHandler(in handler : EventHandler) : bool#sendEvent(in eventId : int) : void+run() : void
-id : long-eventHandlers: List
EventGenerator
+isFunctioning() : bool
WallMountedController RemoteController
![Page 134: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/134.jpg)
MODÈLE COMPORTEMENTAL RAFFINÉ – UNITÉ MOTEUR
SEG2106 – Winter 2014 – Hussein Al Osman 134
buttonPressed(),obstacleDetected() [isFunctioning()]
Open
Closing
Closed
Opening
HalfOpen
buttonPressed()buttonPressed()
buttonPressed() [isFunctioning()]
doorOpen()
doorClosed()
buttonPressed() [isFunctioning()]
Running
WaitingForRepair
buttonPressed(),[! isFunctioning()]
Timer (180 s)[! isFunctioning()]
Timer (180 s) [isFunctioning()]
![Page 135: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/135.jpg)
MODÈLE COMPORTEMENTAL RAFFINÉ – UNITÉ DÉTECTEUR
SEG2106 – Winter 2014 – Hussein Al Osman 135
CheckingForObstacles
CheckingIfDoorOpen
CheckingIfDoorClosed
[!isObstacleDetected()]
[isObstacleDetected()]
[!isDoorOpen()]
[isDoorOpen()]
Sleeping
[!isDoorClosed()]
[isDoorClosed()]
Time (20 ms)
SendingObstacleEvent
SendingOpenDoorEvent
SendingDoorClosedEvent
![Page 136: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/136.jpg)
NE VOUS-ENDORMEZ PAS!
SEG2106 – Winter 2014 – Hussein Al Osman 136
![Page 137: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/137.jpg)
PROGRAMMATION
Lorsque nous sommes satisfaits du niveau de détail dans notre modèle comportemental, nous sommes prêts à programmer
Quelques parties du code peuvent être générées directement par des outils du modèle comportemental
• Quelques modifications peuvent être nécessaires (n’utilisez pas le code sans un peu d’examination)
• Les Humains sont toujours les programmeurs les plus intelligents
SEG2106 – Winter 2014 – Hussein Al Osman 137
![Page 138: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/138.jpg)
CLASSE DE GÉNÉRATEUR D’ÉVÉNEMENT
SEG2106 – Winter 2014 – Hussein Al Osman 138
![Page 139: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/139.jpg)
CLASSE DÉTECTRICE
SEG2106 – Winter 2014 – Hussein Al Osman 139
![Page 140: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/140.jpg)
CLASSE DÉTECTRICE
SEG2106 – Winter 2014 – Hussein Al Osman 140
SensorState machine Implementation
![Page 141: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/141.jpg)
DÉMO UMPLE
UMPLE est un outil de modélisation pour permettre ce qu’on appelle la programmation modèle-orientée
• C’est ce qu’on fait dans ce cours
Vous pouvez l’utiliser pour créer des diagrammes de classe (modèles structuraux) et des machines d’état (modèles comportementaux)
Cet outil a été développé à l’Université d’Ottawa
• Une version en ligne existe sur ce lien:
http://cruise.eecs.uottawa.ca/umpleonline/• Il existe aussi un eclipse plugin pour cet outil
SEG2106 – Winter 2014 – Hussein Al Osman 141
![Page 142: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/142.jpg)
CODE UMPLE POUR MACHINE D’ÉTAT À UNITÉ MOTEURclass Motor {
status {
Running {
Open {buttonPressed[isFunctioning()]->Closing; }
Closing { buttonPressed()[isFunctioning()]->Opening;
ObstacleDetected()[isFunctioning()]->Opening;
doorClosed()->Closed;}
Closed { buttonPressed()[isFunctioning()]->Opening; }
Opening { buttonPressed()->HalfOpen;
doorOpen()->Open; }
HalfOpen{buttonPressed()->Opening;}
buttonPressed()[!isFunctioning()]->WaitingForRepair;
}
WaitingForRepair{
timer()[!isFunctioning()]->WaitingForRepair;
timer()[isFunctioning()]->Running;}
}
}SEG2106 – Winter 2014 – Hussein Al Osman 142
![Page 143: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/143.jpg)
FRAGMENTS DE CODE DE LA CLASSE MOTEUR
SEG2106 – Winter 2014 – Hussein Al Osman 143
Switching between high level states
Switching between nest states inside the Running compound state
![Page 144: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/144.jpg)
QUAND UTILISER DES MACHINES D’ÉTAT?Lorsqu’un objet ou un système passe à travers plusieur étapes d’exécution (états)
• Le comportement du système varie d’une étape à une autre
Lorsque vous pouvez identifier des événements clairs qui changent le statut du système
Ils sont idéals pour la programmation dérivée par des événements (moins de boucles et de branches, plus d’événements générés et échangés)
• Plusieurs événements sont échangés entre les objets
Lorsqu’on utilise la programmation dérivée par des événements:
• Assurez-vous de suivre les patrons Observable ou Event Notifier• Les deux sont simples (similaires à ce qu’on a fait avec l’exemple de
la porte de garage)
SEG2106 – Winter 2014 – Hussein Al Osman 144
![Page 145: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/145.jpg)
MODÉLISATION COMPORTEMENTALE EN EXCÈS
SVP modéliser avec responsabilité!!
Ne vous perdez pas du temps à modéliser chaque détail au point au vous êtes en retard
• Vous vendez des codes et
non pas des modèles
SEG2106 – Winter 2014 – Hussein Al Osman 145
![Page 146: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/146.jpg)
COMMENT FAIRE LA MODÉLISATION COMPORTEMENTALE
Soyez prudents, vous ne voulez pas modéliser en excès
• Les processus de développement de logiciel modernes essaye de minimiser la phase de modélisation (ca ne veux pas dire qu’on ne crée pas des modèles)
Pour cette raison, commencez avec un modèle à haut niveau du comportement
• Ce modèle doit montrer une vue d’ensemble claire de certaines (pas toutes nécessairement) fonctionnalités importantes du système
• Ceci serait similaire à la première machine d’état pour une porte de garage créée
SEG2106 – Winter 2014 – Hussein Al Osman 146
![Page 147: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/147.jpg)
COMMENT FAIRE LA MODÉLISATION COMPORTEMENTALE
Identifiez les zones complexes potentielles qui nécessitent plus de compréhension
• Nous minimisons les risques si nous comprenons ces composantes avant de commencer à programmer
• Modélisez ces zones complexes avec plus de détails jusqu’au point où vous êtes satisfaits qu’ils sont bien compris
Utilisez des outils pour générer le code de vos modèles existants
• Ne comptez pas sur les outils sans examination (pour le moment!)
SEG2106 – Winter 2014 – Hussein Al Osman 147
![Page 148: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/148.jpg)
CONCEPTION DES CLASSES AVEC MACHINES D'ÉTATS
Maintenez des machines d’états simple (le plus simple possible au moins)
• Les machines d’états peuvent rapidement devenir compliqués et cause de la confusion
• A tous temps, il faut suivre la loi: « Moins, c'est mieux »
Si la machine d’état devient très compliqués, considérez de divisez le processus dans plusieurs classes
Essayez de maximisez l’utilisation des états composés au lieu de dépendre sure une conception plane (flat design)
SEG2106 – Winter 2014 – Hussein Al Osman 148
![Page 149: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/149.jpg)
AUTRES EXEMPLES DE MACHINES D’ÉTAT UML
SEG2106 – Winter 2014 – Hussein Al Osman 149
On
Displaying Current Time
Displaying Alarm Time
Display Alarm
Timer (3 s)
Playing Radio
Playing CD
off
OffOn
HOn
Play CD
Play Radio
![Page 150: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/150.jpg)
AUTRES EXEMPLES DE MACHINES D’ÉTAT UML
SEG2106 – Winter 2014 – Hussein Al Osman 150
Machine d'état d’un vole
![Page 151: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/151.jpg)
AUTRES EXEMPLES DE MACHINES D’ÉTAT UML
SEG2106 – Winter 2014 – Hussein Al Osman 151
Machine d'état d’un vole (avec un état complexe)
![Page 152: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/152.jpg)
SECTION 5
MODÉLISATION COMPORTEMENTALE
CES DIAPOS SONT BASÉES SUR LES NOTES DE:DR. CHRIS LING (HTTP:/ /WWW.CSSE.MONASH.EDU.AU/~SLING/)
152SEG2106 – Winter 2014 – Hussein Al Osman
![Page 153: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/153.jpg)
SUJETS
Aujourd’hui, nous discutons d’un autre type de machine d’état:
• Les réseaux de Petri (seulement une introduction…)
Ceci sera le dernier cours sur la modélisation comportementale
• Nous commencerons la 2e section du cours la semaine prochaine
153SEG2106 – Winter 2014 – Hussein Al Osman
![Page 154: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/154.jpg)
OK, NOUS COMMENÇONS…
154SEG2106 – Winter 2014 – Hussein Al Osman
![Page 155: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/155.jpg)
INTRODUCTIONIntroduit initialement par Carl Adam Petri en 1962.
Un outil de diagramme pour modéliser la concurrence et la synchronisation dans les systèmes distribués
• Ils nous permettent de simuler rapidement un comportement complexe concurrentiel (plus rapide que de faire des prototypes!)
Similaire aux machines d’état UML déjà vues:
• Utilisé comme aide visuel de communication pour modéliser le comportement du système
Basé sur une forte fondation en mathématiques
155SEG2106 – Winter 2014 – Hussein Al Osman
![Page 156: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/156.jpg)
EXEMPLE: TERMINAL PDV (MACHINE D’ÉTAT UML)
156
idle d1 d2
OKpressed
1 digit 1 digit 1 digit 1 digitd3 d4
OK
approve
Approved
Rejected
OK
OKOK
OK
Reject
(PDV = Point de Vente; POS = Point of Sale)
SEG2106 – Winter 2014 – Hussein Al Osman
![Page 157: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/157.jpg)
EXEMPLE: TERMINAL PDV (RÉSEAU DE PETRI)
Initial
1 digit 1 digit 1 digit 1 digit
d1 d2 d3
d4
OK
OKpressed
approve
approved
OK OK OKOK
RejectRejected!
157SEG2106 – Winter 2014 – Hussein Al Osman
![Page 158: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/158.jpg)
TERMINAL PDV
Scénario 1: Normal
• Entrer les 4 chiffres et peser OK.
Scénario 2: Exceptionnel
• Entrer seulement 3 chiffres et peser OK.
158SEG2106 – Winter 2014 – Hussein Al Osman
![Page 159: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/159.jpg)
EXEMPLE: SYSTÈME PDV (JEU DE JETONS)
Initial
1 digit 1 digit 1 digit 1 digit
d1 d2 d3
d4
OK
OKpressed
approve
approved
OK OK OKOK
RejectRejected!
159SEG2106 – Winter 2014 – Hussein Al Osman
![Page 160: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/160.jpg)
LES COMPOSANTES D’UN RÉSEAU DE PETRI
Les termes sont un peu différents que les machines d’état UML
Les réseaux de Petri sont formés de trois types de composantes: places (cercles), transitions (rectangles) et arcs (flèches):
• Les Places représentent les états possibles du système• Les Transitions sont des événements ou actions qui causent
le changement d’état (attention, les transitions ne sont plus des flèches ici)
• Chaque Arc connecte simplement une place à une transition ou une transition à une place.
SEG2106 – Winter 2014 – Hussein Al Osman 160
![Page 161: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/161.jpg)
CHANGEMENT D’ÉTAT
Un changement d’état est dénoté par un mouvement de jeton(s) (points noirs) d’une place(s) à une autre place(s)
• Est causé par l’excitation d’une transition.
L’excitation représente l’occurrence d’un événement ou une prise d’action
L’excitation est dépend des conditions d’entrée, dénotée par la disponibilité d’un jeton
SEG2106 – Winter 2014 – Hussein Al Osman 161
![Page 162: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/162.jpg)
CHANGEMENT D’ÉTATUne transition est excitable ou permis lorsqu’il existe assez de jetons dans les places d’entrée.
Après l’excitation, les jetons sont transférés des places d’entrée (état précédant) aux places de sortie, dénotant le nouveau état
162SEG2106 – Winter 2014 – Hussein Al Osman
![Page 163: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/163.jpg)
EXEMPLE: DISTRIBUTEUR AUTOMATIQUE
La machine distribue deux genres de collation – 20c et 15c
Seulement deux types de monnaie peuvent être utilisés
• Pièces de 10c et pièces de 5c (ah les vieux
temps!!!)
La machine ne retourne pas de monnaie
SEG2106 – Winter 2014 – Hussein Al Osman 163
![Page 164: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/164.jpg)
EXEMPLE: DISTRIBUTEUR AUTOMATIQUE (MACHINE D’ÉTAT UML)
SEG2106 – Winter 2014 – Hussein Al Osman 164
0 centinserted
5 centsinserted
10 centsinserted
15 centsinserted
20 centsinserted
Deposit 5c
Deposit 10c
Deposit 10c
Deposit 10cD
eposit 5c
Deposit 5c
Deposit 5c
Take 20c snack bar
Take 15c snack bar
![Page 165: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/165.jpg)
EXEMPLE: DISTRIBUTEUR AUTOMATIQUE (UN RÉSEAU DE PETRI)
SEG2106 – Winter 2014 – Hussein Al Osman 165
5c
Take 15c bar
Deposit 5c
0c
Deposit 10c
Deposit 5c
10c
Deposit 10c
Deposit5c
Deposit 10c20c
Deposit5c
15c
Take 20c bar
![Page 166: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/166.jpg)
EXEMPLE: DISTRIBUTEUR AUTOMATIQUE (3 SCÉNARIOS)
Scénario 1:
• Déposer 5c, déposer 5c, déposer 5c, déposer 5c, prendre la collation de 20c.
Scénario 2:
• Déposer 10c, déposer 5c, prendre la collation de 15c.Scénario 3:
• Déposer 5c, déposer 10c, déposer 5c, prendre la collation de 20c.
166SEG2106 – Winter 2014 – Hussein Al Osman
![Page 167: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/167.jpg)
EXEMPLE: DISTRIBUTEUR AUTOMATIQUE (JEUX DE JETONS)
SEG2106 – Winter 2014 – Hussein Al Osman 167
5c
Take 15c bar
Deposit 5c
0c
Deposit 10c
Deposit 5c
10c
Deposit 10c
Deposit5c
Deposit 10c20c
Deposit5c
15c
Take 20c bar
![Page 168: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/168.jpg)
ÉTATS LOCAUX MULTIPLES
Dans le vrai monde, les événements se passent en même temps
Un système peut avoir plusieurs états locaux pour former un état global
Il est nécessaire de modéliser la concurrence et la synchronisation
168SEG2106 – Winter 2014 – Hussein Al Osman
![Page 169: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/169.jpg)
EXEMPLE: DANS UN RESTAURANT (UN RÉSEAU DE PETRI)
SEG2106 – Winter 2014 – Hussein Al Osman 169
WaiterfreeCustomer 1 Customer 2
Takeorder
Takeorder
Ordertaken
Tellkitchen
wait wait
Serve food Serve food
eating eating
![Page 170: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/170.jpg)
EXEMPLE: DANS UN RESTAURANT (DEUX SCÉNARIOS)
Scénario 1:
Le serveur
1. Prend la commande du client 1
2. Sert la table du client 1
3. Prend la commande du client 2
4. Sert la table du client 2
Scénario 2:
Le serveur
5. Prend la commande du client 1
6. Prend la commande du client 2
7. Sert la table du client 2
8. Sert la table du client 1
170SEG2106 – Winter 2014 – Hussein Al Osman
![Page 171: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/171.jpg)
EXEMPLE: DANS UN RESTAURANT (SCÉNARIO 2)
WaiterfreeCustomer 1 Customer 2
Takeorder
Takeorder
Ordertaken
Tellkitchen
wait wait
Serve food Serve food
eating eating
171SEG2106 – Winter 2014 – Hussein Al Osman
![Page 172: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/172.jpg)
EXEMPLE: DANS UN RESTAURANT (SCÉNARIO 1)
WaiterfreeCustomer 1 Customer 2
Takeorder
Takeorder
Ordertaken
Tellkitchen
wait wait
Serve food Serve food
eating eating
172SEG2106 – Winter 2014 – Hussein Al Osman
![Page 173: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/173.jpg)
STRUCTURE DE RÉSEAU
Une séquence d’événements/actions:
Exécutions concurrentielles:
e1 e2 e3
e1
e2 e3
e4 e5
173SEG2106 – Winter 2014 – Hussein Al Osman
![Page 174: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/174.jpg)
STRUCTURE DE RÉSEAU
Événements non-déterminants - conflit, choix ou décision: un choix entre e1, e2 … ou e3, e4 ...
e1 e2
e3 e4
174SEG2106 – Winter 2014 – Hussein Al Osman
![Page 175: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/175.jpg)
STRUCTURE DE RÉSEAU
Synchronisation
e1
175SEG2106 – Winter 2014 – Hussein Al Osman
![Page 176: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/176.jpg)
STRUCTURE DE RÉSEAU
Synchronisation et Concurrence
e1
176SEG2106 – Winter 2014 – Hussein Al Osman
![Page 177: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/177.jpg)
UN AUTRE EXEMPLE
Un système producteur-consommateur est formé de:
• Un producteur• Deux consommateurs• Un tampon de stockage
Avec les conditions suivantes:• Le tampon de stockage peut contenir 5 items au maximum;• Le producteur envoie 3 items dans chaque production;• Au maximum, un seule consommateur est capable d’accéder
le tampon de stockage à la fois;• Chaque consommateur enlève deux items lorsqu’il accède le
tampon de stockageSEG2106 – Winter 2014 – Hussein Al Osman 177
![Page 178: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/178.jpg)
UN SYSTÈME PRODUCTEUR-CONSOMMATEUR
ready
p1
t1
produce
idle
send
p2
t2
k=1
k=1
k=5
Storage p3
3 2 t3 t4
p4
p5
k=2
k=2
accept
accepted
consume
ready
Producteur Consommateurs
178SEG2106 – Winter 2014 – Hussein Al Osman
![Page 179: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/179.jpg)
UN EXEMPLE DE PRODUCTEUR-CONSOMMATEUR
Dans ce réseau de Petri, chaque place possède une capacité et chaque arc possède un poids.
Ceci permet à plusieurs jetons de résider dans une place afin de modéliser un comportement plus complexe.
SEG2106 – Winter 2014 – Hussein Al Osman 179
![Page 180: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/180.jpg)
PETITE PAUSE?
SEG2106 – Winter 2014 – Hussein Al Osman 180
Est-ce que vous êtes ici?
![Page 181: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/181.jpg)
PROPRIÉTÉS COMPORTEMENTALES
Accessibilité
• “Peut-on atteindre un état particulier d’un autre?”
Délimitation
• “Est-ce qu’une place de stockage peut déborder?”
Vivacité
• “Est-ce que le système meurt dans un état particulier (interblocage)?”
SEG2106 – Winter 2014 – Hussein Al Osman 181
![Page 182: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/182.jpg)
SOUVENONS-NOUS DU DISTRIBUTEUR AUTOMATIQUE (JEU DE JETON)
SEG2106 – Winter 2014 – Hussein Al Osman 182
5c
Take 15c bar
Deposit 5c
0c
Deposit 10c
Deposit 5c
10c
Deposit 10c
Deposit5c
Deposit 10c20c
Deposit5c
15c
Take 20c bar
![Page 183: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/183.jpg)
LE MARQUAGE EST UN ÉTAT ...
SEG2106 – Winter 2014 – Hussein Al Osman 183
t8
t1
p1
t2
p2
t3
p3
t4
t5
t6 p5
t7
p4
t9
M0 = (1,0,0,0,0)
M1 = (0,1,0,0,0)
M2 = (0,0,1,0,0)
M3 = (0,0,0,1,0)
M4 = (0,0,0,0,1)
Marquage initial:M0
![Page 184: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/184.jpg)
ACCESSIBILITÉ
SEG2106 – Winter 2014 – Hussein Al Osman 184
t8
t1
p1
t2
p2
t3
p3
t4
t5
t6 p5
t7
p4
t9
Initial marking:M0
M0 M1 M2 M3 M0 M2 M4t3t1 t5 t8 t2 t6
M0 = (1,0,0,0,0)
M1 = (0,1,0,0,0)
M2 = (0,0,1,0,0)
M3 = (0,0,0,1,0)
M4 = (0,0,0,0,1)
![Page 185: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/185.jpg)
ACCESSIBILITÉ
“M2 est atteignable de M1 et M4 est atteignable de M0.”
En fait, dans l’exemple du distributeur automatique, tous les marquages sont atteignables de chaque marquage.
SEG2106 – Winter 2014 – Hussein Al Osman 185
M0 M1 M2 M3 M0 M2 M4t3t1 t5 t8 t2 t6
Une séquence d’excitation:
![Page 186: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/186.jpg)
DÉLIMITATION
Un réseau de Petri est dit délimité par k (ou simplement délimité) si le nombre de jetons dans chaque place n’excède pas un nombre fini k pour n’importe quel marquage atteignable de M0 (pas de débordement).
Le réseau de Petri pour le distributeur automatique est délimité par 1.
186SEG2106 – Winter 2014 – Hussein Al Osman
![Page 187: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/187.jpg)
VIVACITÉ
Un réseau de Petri avec un marquage initial M0 est vivant si, quelque soit le marquage atteint, il est possible de procéder sans interbloquage
187SEG2106 – Winter 2014 – Hussein Al Osman
![Page 188: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/188.jpg)
UN EXEMPLE
SEG2106 – Winter 2014 – Hussein Al Osman 188
Pas de débordement, mais le système est bloqués
p1 p2
p3
p4
t1
t2
t3 t4
M0 = (1,0,0,1)
M1 = (0,1,0,1)
M2 = (0,0,1,0)
M3 = (0,0,0,1)
![Page 189: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/189.jpg)
AUTRE EXEMPLEp1
t1
p2 p3
t2 t3
p4 p5
t4 Le système est vivant mais on a un débordement
M0 = (1, 0, 0, 0, 0)
M1 = (0, 1, 1, 0, 0)
M2 = (0, 0, 0, 1, 1)
M3 = (1, 1, 0, 0, 0)
M4 = (0, 2, 1, 0, 0)
189SEG2106 – Winter 2014 – Hussein Al Osman
![Page 190: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/190.jpg)
UN RÉSEAU DE PETRI O-O
ready
produceStorage
accepted
consume
ready
Producer Consumer
send accept
190SEG2106 – Winter 2014 – Hussein Al Osman
Producer
state: ProducerState
Item produce( )
send(i: Item): void
Consumer
state: ConsumerState
accept( i: Item): void
consume(i: Item) : void
![Page 191: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/191.jpg)
PETRI NET REFERENCES• Murata, T. (1989, April). Petri nets: properties, analysis and
applications. Proceedings of the IEEE, 77(4), 541-80.
• Peterson, J.L. (1981). Petri Net Theory and the Modeling of Systems. Prentice-Hall.
• Reisig, W and G. Rozenberg (eds) (1998). Lectures on Petri Nets 1: Basic Models. Springer-Verlag.
• The World of Petri nets:http://www.daimi.au.dk/PetriNets/
SEG2106 – Winter 2014 – Hussein Al Osman 191
![Page 192: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/192.jpg)
SECTION 6
INTRODUCTION AUX COMPILATEURS
SEG2106 – Winter 2014 – Hussein Al Osman 192
![Page 193: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/193.jpg)
SUJETS
Langages naturels
• Entités lexicales• Syntax et sémantiques
Langages d’ordinateur
• Analyse lexique• Analyse syntaxique• Analyse sémantique
Compilateurs
• Exigences de base du compilateur• Processus de compilation
SEG2106 – Winter 2014 – Hussein Al Osman 193
![Page 194: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/194.jpg)
LANGAGES NATURELS - BASE
Dans un langage (naturel):
• Une phrase est une séquence de mots• Un mot (aussi appelé unité lexicale) est une séquence de
caractères (possiblement un seul)
L’ensemble de caractères utilisés dans un langage est fini (connu sous le nom d’alphabet)
L’ensemble de phrases possibles dans un langage est infini
Un dictionnaire liste tous les mots (entités lexicales) d’un langage
• Les mots sont classifiés en différentes catégories lexicales: verbe, nom, pronom, préposition….
SEG2106 – Winter 2014 – Hussein Al Osman 194
![Page 195: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/195.jpg)
LANGAGES NATURELS - BASE
La grammaire (aussi considérée l’ensemble de règles syntaxiques) est utilisée pour déterminer quelles séquences des mots sont bien formées
• Les séquences doivent avoir une structure qui obéit au règles de grammaire
Les phrases bien formées ont généralement un sens que les humains comprennent
On essaie d’apprendre aux machines notre langage naturel
SEG2106 – Winter 2014 – Hussein Al Osman 195
Avec des résultats mixtes!!
![Page 196: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/196.jpg)
ANALYSE DES PHRASESAnalyse lexicale: identification de mots formés de caractères
• Les mots sont classifiés en plusieurs catégories: articles, noms, verbes, adjectifs, prépositions, pronoms…
Analyse syntaxique: règles pour combiner des mots afin de former des phrases
Analyse du sens: difficile à formaliser
• Facile pour les humains• Difficile pour les machines (malgré l’évolution du traitement de
langage naturel)• Grand domaine de recherche pour ceux intéressés dans les
études supérieures…
SEG2106 – Winter 2014 – Hussein Al Osman 196
![Page 197: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/197.jpg)
TRAITEMENT DU LANGAGE D’ORDINATEUR
Dans les langages d’ordinateur (ou programmation), on parle d’un programme (correspondant à une phrase longue ou paragraphe)
• Séquence d’unités lexicales• Les unités lexicales sont des séquences de caractères
Les règles lexicales d’un langage déterminent quelles sont les unités lexicales valides de ce langage
• Il existe plusieurs catégories lexicales: identificateur, nombre, chaînes de caractères, opérateur…
• Les catégories lexicales sont aussi nommées « tokens »
SEG2106 – Winter 2014 – Hussein Al Osman 197
![Page 198: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/198.jpg)
TRAITEMENT DU LANGAGE D’ORDINATEUR
Les règles syntaxiques d’un langage déterminent quelles séquences d’unités lexicales sont des programmes bien formés
Le sens d’un programme bien formé est aussi appelé sémantiques
• Un programme peut être bien formé, mais ses énoncés ne font pas de sens
• Exemple:
int x = 0;
x = 1;
x = 0;
• Syntaxiquement, le code ci-haut est valide, mais quel est son sens??
SEG2106 – Winter 2014 – Hussein Al Osman 198
![Page 199: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/199.jpg)
TRAITEMENT DU LANGAGE D’ORDINATEUR
Les compilateurs doivent attraper les erreurs lexicales et syntaxique
Les compilateurs peuvent se plaindre des erreurs sémantiques communes:
public boolean test (int x){
boolean result;
if (x > 100)
result = true;
return result;
}
Vos collègues ou bien le client se plaindront du reste!!
SEG2106 – Winter 2014 – Hussein Al Osman 199
Message d’erreur:The local variable result may have not been initialized
![Page 200: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/200.jpg)
COMPILATEURS
Définition d’un compilateur
• Un programme qui traduit un programme exécutable dans un langage vers un programme exécutable dans un autre langage
• On prévoit que le programme produit par le compilateur soit meilleur que l’original
Définition d’un interpréteur
• Un programme qui lit un programme exécutable et produit les résultats qui proviennent lorsqu’on exécute ce programme
On se concentre sur les compilateurs dans ce cours (toutefois, beaucoup de concepts s’appliquent aux deux)
SEG2106 – Winter 2014 – Hussein Al Osman 200
![Page 201: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/201.jpg)
EXIGENCES DE BASE POUR LES COMPILATEURS
Le compilateur doit faire:
• Produire le code correct (code byte dans le cas de Java)• Exécuter rapidement• Le code produit doit être optimale• Achever un temps de compilation proportionnel à la taille du
programme• Bien travailler avec les débogueurs (absolument nécessaire)
Le compilateur doit avoir:
• Bonne diagnostique pour les erreurs lexicale et syntaxiques• Support pour appel dans autres langages (voir Java Native
Interface si vous êtes intéressés)
SEG2106 – Winter 2014 – Hussein Al Osman 201
![Page 202: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/202.jpg)
VUE ABSTRAITE DES COMPILATEURS
Un compilateur réalise une traduction en plusieurs étapes; par correspondance, il contient plusieurs composantes.
Généralement, un compilateur inclut (au moins) des composantes séparées pour vérifier les règles lexicales et syntaxiques:
SEG2106 – Winter 2014 – Hussein Al Osman 202
![Page 203: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/203.jpg)
PROCESSUS DE COMPILATION
SEG2106 – Winter 2014 – Hussein Al Osman 203Code de Machine
Programme Source
Analyse Lexicale
Analyse Syntaxique
Analyse Sémantique
Générateur du Code Intermédiaire
Optimiseur du Code
Générateur du Code
![Page 204: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/204.jpg)
PROCESSUS DE COMPILATION
Plus qu’un cours est requis afin de couvrir les détails des phases différentes
Dans ce cours, nous voyons seulement une introduction
• On se concentre sur l’analyse lexicale et syntaxique
SEG2106 – Winter 2014 – Hussein Al Osman 204
![Page 205: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/205.jpg)
QUELQUES DÉFINITIONS IMPORTANTES
Ces définitions, malgré qu’elles sont ennuyantes, sont importantes afin de comprendre les concepts qui seront introduits dans les prochaines séances
Commençons…
SEG2106 – Winter 2014 – Hussein Al Osman 205
![Page 206: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/206.jpg)
ALPHABET
Souvenez-vous du début de la séance (ou de la maternelle): l’alphabet est un ensemble de caractères qui sont utilisés pour former une phrase
Puisque les mathématiciens adorent les symboles Grecs, on va référer à l’alphabet avec
SEG2106 – Winter 2014 – Hussein Al Osman 206
…
![Page 207: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/207.jpg)
ALPHABET
S est un alphabet, ou un ensemble de terminaux
• Ensemble fini et consiste de tous les caractères d’entrée ou symboles qui peuvent être arrangés pour former des phrases dans un langage
Langage de programmation: généralement un ensemble d’ordinateur bien-défini comme le ASCII
SEG2106 – Winter 2014 – Hussein Al Osman 207
![Page 208: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/208.jpg)
CHAÎNES DE TERMINAUX DANS UN ALPHABET
={a,b,c,d}
Chaînes possibles de terminaux de incluent:
• aaa• aabbccdd• d• cba• abab• ccccccccccacccc• Malgré que ceci est amusant, je pense que vous saisissez
l’idée…
SEG2101 Chapter 7 208
![Page 209: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/209.jpg)
LANGAGES FORMELS
: alphabet, c’est un ensemble fini composé de tous les caractères d’entrée ou symboles
*: fermeture de l’alphabet, l’ensemble de toutes les chaînes possibles dans , incluant la chaîne vide
Un langage (formel) est un sous-ensemble spécifique de *
SEG2101 Chapter 7 209
![Page 210: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/210.jpg)
SECTION 7
ANALYSE LEXICALE
SEG2106 – Winter 2014 – Hussein Al Osman 210
![Page 211: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/211.jpg)
SUJETS
Le rôle de l’analyseur lexical
Spécification des tokens (catégories lexicales)
Expressions régulières (expression rationnelle)
Automates finies déterministes et non déterministes
SEG2106 – Winter 2014 – Hussein Al Osman 211
![Page 212: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/212.jpg)
LE RÔLE DE L’ANALYSEUR LEXICALL’analyseur lexical est la première phase du compilateur
• Rôle: lit les caractères d’entrée et produit une séquence de catégories lexicales que l’analyseur syntaxique utilise pour l’analyse syntaxique
• Enlève les espaces blancs
SEG2106 – Winter 2014 – Hussein Al Osman 212
Lexical Analyser (scanner)
Syntax Analyser (parser)
token
Get next token
Source Program
![Page 213: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/213.jpg)
ANALYSE LEXICALE
Il existe plusieurs raisons pour lesquelles on sépare la phase d’analyse de compilation en analyse lexicale et l’analyse syntaxique:
• Modèle plus simple (en couches)• Efficacité du compilateur
Des outils spécialisés ont été fabriqués afin d’aider à automatiser la construction des deux séparément
SEG2106 – Winter 2014 – Hussein Al Osman 213
![Page 214: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/214.jpg)
ENTITÉS LEXICALES
Entités lexicales: séquence de caractères dans le programme source qui est matché par le motif du token
• Une lexème (entité lexicale) est une unité lexicale de base d’un langage
• Les entités lexicales d’un langage de programmation incluent:• Identificateurs: noms de variables, méthodes, classes,
package et interfaces…
• Littérales: valeurs fixes (ex. “1”, “17.56”, “0xFFE” …)
• Opérateurs: pour opérations mathématique, Booléennes et logiques (ex. “+”, “-”, “&&”, “|” …)
• Mots spéciaux: mots-clés (ex. “if”, “for”, “public” …)
SEG2106 – Winter 2014 – Hussein Al Osman 214
![Page 215: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/215.jpg)
TOKENS, MOTIFS, ENTITÉS LEXICALES
Token: catégorie d’entités lexicales
Un motif est une règle qui décrit l’ensemble d’entités lexicales qui représentent un token (catégorie lexicale) particulier dans le programme ressource
SEG2106 – Winter 2014 – Hussein Al Osman 215
![Page 216: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/216.jpg)
EXEMPLES DE TOKENS
SEG2106 – Winter 2014 – Hussein Al Osman 216
double pi = 3.1416;La chaine des caractère pi est un lexème pour le token “identificateur”
Token Sample Lexemes
Informal Description of Pattern
type double double
if if if
booelan_operator <. <=, ==, >, >= < or <= or == or > or >=
id pi, count, d2 Letter followed by letters and digits
literal 3.1414, “test” Any alpha numeric string of characters
![Page 217: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/217.jpg)
ENTITÉS LEXICALES ET TOKEN (CATÉGORIES PLUS DÉTAILLÉS)
217
Index = 2 * count +17;
SEG2106 – Winter 2014 – Hussein Al Osman
semicolon;
int_literal17
plus_op+
variableCount
multi_op*
int_literal2
equal_sign=
variableIndex
TokensLexemes
![Page 218: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/218.jpg)
ERREURS LEXICALES
Peu d’erreurs sont perceptibles au niveau lexical seul
• L’analyseur lexical possède une vue localisée du programme ressource
On laisse les autres phases du compilateur s’occuper des erreurs
SEG2106 – Winter 2014 – Hussein Al Osman 218
![Page 219: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/219.jpg)
SPÉCIFICATION DES TOKENS
On a besoin d’une notation puissante afin de spécifier les motifs des tokens
• L’expression régulière au secours !!
Dans le processus d’étude des expressions régulières, on discute du suivant:
• Opération sur les langages• Définitions régulières• Sténographie (shorthand) notationnelle
SEG2106 – Winter 2014 – Hussein Al Osman 219
![Page 220: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/220.jpg)
RAPPEL: LANGAGES
: alphabet, c’est un ensemble fini qui consiste de tous les caractères d’entrée ou symboles
*: fermeture de l’alphabet, l’ensemble de toutes les chaînes possibles dans , incluant la chaîne vide
Un langage (formel) est un sous-ensemble spécifique de *
SEG2101 Chapter 7 220
![Page 221: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/221.jpg)
OPÉRATIONS SUR LES LANGAGES
SEG2106 – Winter 2014 – Hussein Al Osman 221
![Page 222: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/222.jpg)
OPÉRATIONS SUR LES LANGAGESFormat non-mathématique:
• L’union entre les langages L et M: l’ensemble des chaînes qui appartiennent à au moins un des deux langages
• Concaténation des langages L et M: l’ensemble de toutes les chaînes de forme st où s est une chaîne de L et t est une chaîne de M
• Intersection entre les langages L et M: l’ensemble de toutes les chaînes qui se trouvent dans les deux langages
• Fermeture Kleene (d’après Stephen Kleene): l’esemble de toutes les chaînes qui sont des concaténations de 0 ou plus de chaînes du langage original
• Fermeture positive : l’ensemble de toutes les chaînes qui sont des concaténations de 1 ou plus de chaînes du langage original
SEG2106 – Winter 2014 – Hussein Al Osman 222
![Page 223: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/223.jpg)
EXPRESSIONS RÉGULIÈRES
Une expression régulière est une notation compacte pour décrire une chaîne.
En Java, un identificateur est une lettre suivie d’un zéro ou plus de lettres ou de nombres lettre (lettre | nombre)*
|: ou
*: zéro ou plus de
SEG2106 – Winter 2014 – Hussein Al Osman 223
![Page 224: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/224.jpg)
RÈGLES
Est une expression régulière qui dénote {}, l’ensemble contenant une chaîne vide
Si a est un caractère dans , donc a est une expression régulière qui dénote {a}, l’ensemble contenant la chaîne a
Supposons r et s sont des expressions régulières qui dénotent le langage L(r) et L(s), donc
• (r) |(s) est une expression régulière qui dénote L(r)L(s).• (r)(s) est une expression régulière qui dénote L (r) L(s).• (r) * est une expression régulière qui dénote (L (r) )*.
SEG2106 – Winter 2014 – Hussein Al Osman 224
![Page 225: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/225.jpg)
CONVENTIONS DE PRÉCÉDENCE
L’opérateur unaire * possède la plus haute précédence et il est associé vers la gauche.
La concaténation possède la deuxième plus haute précédence et il est associé vers la gauche.
| possède la plus basse précédence et est associé vers la gauche.
(a)|(b)*(c)a|b*c
SEG2106 – Winter 2014 – Hussein Al Osman 225
![Page 226: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/226.jpg)
EXEMPLE D’EXPRESSIONS RÉGULIÈRES
SEG2106 – Winter 2014 – Hussein Al Osman 226
![Page 227: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/227.jpg)
PROPRIÉTÉS D’UNE EXPRESSION RÉGULIÈRE
SEG2106 – Winter 2014 – Hussein Al Osman 227
![Page 228: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/228.jpg)
DÉFINITIONS RÉGULIÈRES
Si est un alphabet de symboles de base, alors une définition régulière est une séquence de définitions de forme:
d1 r1
d2 r2
...
dn rn
Où di est un nom distinct, et chaque ri est une expression régulière à travers les symboles dans {d1,d2,…,di-1},
• i.e., les symboles de base et les noms pré-définis.SEG2106 – Winter 2014 – Hussein Al Osman 228
![Page 229: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/229.jpg)
EXEMPLE DE DÉFINITIONS RÉGULIÈRES
SEG2106 – Winter 2014 – Hussein Al Osman 229
![Page 230: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/230.jpg)
STÉNOGRAPHIE NOTATIONNELLECertaines motifs sont très fréquemment exprimés par des expressions régulières qu’il est convenable d’introduire des sténographies notationnelles pour eux
Nous avons déjà vu quelques-unes de ces sténographies:
1. Un ou plusieurs circonstances: a+ dénote l’ensemble de toutes les chaînes de un ou plusieurs a’s
2. Zéro ou plusieurs circonstances: a* dénote toutes les chaînes de zéro ou plusieurs a’s
3. Classes de caractères: la notation [abc] où a, b et c dénotent l’expression régulière a | b | c
4. Classes de caractères abréviés: la notation [a-z] dénote l’expression régulière a | b | …. | z
SEG2106 – Winter 2014 – Hussein Al Osman 230
![Page 231: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/231.jpg)
STÉNOGRAPHIES NOTATIONNELLESEn utilisant les classes de caractères, on peut décrire les identificateurs comme étant des chaînes décrites par l’expression régulière suivante:
[A-Za-z][A-Za-z0-9]*
SEG2106 – Winter 2014 – Hussein Al Osman 231
![Page 232: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/232.jpg)
AUTOMATE FINIE
Maintenant que nous avons appris les expressions régulières
• Comment peut-on savoir si une chaîne (ou entités lexicale) suit un motif d’expression régulière ou non?
Nous allons de nouveau utiliser les machines d’état!
• Cette fois, elles ne sont pas des machines d’état UML ou réseaux de petri
• Nous les appelons: Automate Finie
Le programme qui exécute cette machine d’état est appelé un Connaisseur
SEG2106 – Winter 2014 – Hussein Al Osman 232
![Page 233: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/233.jpg)
PETITE PAUSE…
SEG2106 – Winter 2014 – Hussein Al Osman 233
![Page 234: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/234.jpg)
AUTOMATE FINI
Un connaisseur pour un langage est un programme qui prend comme entrée une chaîne x et répond
• “Oui” si x est une entité lexicale du langage• “Non” si au contraire
Nous compilons une expression régulière dans un connaisseur en construisant un diagramme appelé un automate fini
Un automate fini peut être déterministe ou non-déterministe
• Non-déterministe veut dire que plus d’une transition d’un état est possible sur le même symbole d’entrée
SEG2106 – Winter 2014 – Hussein Al Osman 234
![Page 235: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/235.jpg)
AUTOMATE FINI NON-DÉTERMINISTE (AFN)Un ensemble d’états S
Un ensemble de symboles d’entrée qui appartiennent à l’alphabet
Un ensemble de transitions qui sont déclenchées par le traitement d’un caractère
Un état simple s0 qui est reconnu comme l’état de départ (initial)
Un ensemble d’états F qui sont reconnus comme les états d’acceptation (final).SEG2106 – Winter 2014 – Hussein Al Osman 235
![Page 236: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/236.jpg)
EXEMPLE D’UN AFN
L’expression régulière suivante
(a|b)*abb
Peut être décrite en utilisant un AFN avec le diagramme suivant:
SEG2106 – Winter 2014 – Hussein Al Osman 236
![Page 237: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/237.jpg)
EXEMPLE D’UN AFN
Le diagramme précédent peut être décrit en utilisant le tableau suivant aussi
Souvenez-vous que l’expression régulière était:
(a|b)*abb
SEG2106 – Winter 2014 – Hussein Al Osman 237
![Page 238: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/238.jpg)
UN AUTRE EXEMPLE DE AFN
Un AFN qui accepte l’expression régulière suivante:
aa*|bb*
SEG2106 – Winter 2014 – Hussein Al Osman 238
![Page 239: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/239.jpg)
AUTOMATE FINI DÉTERMINISTE (AFD)
Un AFD est un cas spécial de AFN dans lequel
• Aucun état a une transition • Pour chaque état s et symbole d’entrée a, il existe au plus
une transition marqué a qui quitte s
SEG2106 – Winter 2014 – Hussein Al Osman 239
![Page 240: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/240.jpg)
UN AUTRE EXEMPLE DE AFD
Pour la même expression régulière vu précédemment
(a|b)*abb
SEG2106 – Winter 2014 – Hussein Al Osman 240
![Page 241: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/241.jpg)
AFN VS AFD
Toujours avec l’expression régulière: (a|b)*abb
SEG2106 – Winter 2014 – Hussein Al Osman 241
NFA:
DFA:
![Page 242: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/242.jpg)
EXEMPLE DE AFD
Connaisseur pour un identificateur:
SEG2106 – Winter 2014 – Hussein Al Osman 242
![Page 243: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/243.jpg)
TABLEAUX POUR LE CONNAISSEUR
Pour changer l’expression régulière, nous pouvons simplement changer de tableaux…
SEG2106 – Winter 2014 – Hussein Al Osman 243
![Page 244: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/244.jpg)
CODE POUR LE CONNAISSEUR
244
![Page 245: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/245.jpg)
SECTION 8
AUTOMATE À ÉTAT FINI
SEG2106 – Winter 2014 – Hussein Al Osman 245
![Page 246: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/246.jpg)
SUJETS
Algorithme pour créer des AFNs à partir d’expressions régulières
Algorithme pour convertir les AFNs au AFDs
Algorithme pour minimiser les AFDs
Plusieurs exemples….
SEG2106 – Winter 2014 – Hussein Al Osman 246
![Page 247: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/247.jpg)
CRÉER DES AUTOMATES FINIS DÉTERMINISTES (AFD)
Afin de créer un AFD, on doit effectuer le suivant:
• Créer un automate fini non-déterministe (AFN) à partir d’une expression régulière
• Convertir le AFN en AFD
SEG2106 – Winter 2014 – Hussein Al Osman 247
![Page 248: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/248.jpg)
RÈGLES POUR LA CRÉATION DE AFN
A | B
AB
A*
SEG2106 – Winter 2014 – Hussein Al Osman 248
1 2A B
3
2 3ε
41ε A
ε
ε
A
B
2 3
4 5
1 6
ε ε
ε ε
![Page 249: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/249.jpg)
EXEMPLES DE CRÉATION DE AFNx | yz
Selon les règles de précédence, ceci est équivalent à:
x | (yz)
Ceci possède la même forme que
A | B:
Et B peut être représenté tel que:
Mettant le tout ensemble:
SEG2106 – Winter 2014 – Hussein Al Osman 249
1 2y z
3
1 6
A
B
2 3
4 5
ε ε
ε ε
y z
1
x2 3
4 6
ε ε
ε ε5
7
![Page 250: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/250.jpg)
EXEMPLES DE CRÉATION DE AFN
(x | y)*
Nous avons vu A*:
Donc, (x | y)*:
SEG2106 – Winter 2014 – Hussein Al Osman 250
εε A
ε
ε
ε81
ε
ε
ε
2 7
x
y
3 4
5 6
ε ε
ε ε
![Page 251: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/251.jpg)
EXEMPLES DE CRÉATION DE AFN
abb
SEG2106 – Winter 2014 – Hussein Al Osman 251
![Page 252: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/252.jpg)
EXEMPLES DE CRÉATION DE AFN
a*bb
SEG2106 – Winter 2014 – Hussein Al Osman 252
2 3ε
41ε a
ε
ε
5bb
6
![Page 253: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/253.jpg)
EXEMPLES DE CRÉATION DE AFN
(a|b)*bc
SEG2106 – Winter 2014 – Hussein Al Osman 253
ε70
ε
ε
ε
1 6
a
b
2 3
4 5
ε ε
ε ε
cb8 99
![Page 254: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/254.jpg)
RAPPEL DU TABLEAU DE TRANSITION
SEG2106 – Winter 2014 – Hussein Al Osman 254
a b c
0 3 5,8 -
1 3 5 -
2 3 - -
3 3 5,8 -
4 - 5 -
5 3 5,8 -
6 3 5,8 -
8 - - 9
9 - - -
ε70 ε
ε
ε
1 6
a
b
2 3
4 5
ε ε
ε ε
cb8 99
![Page 255: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/255.jpg)
CONVERSION D’UN AFN EN UN AFD
L’algorithme de construction de sous-ensembles est utile pour simuler un AFN à partir d’un programme d’ordinateur
Dans le tableau de transition d’un AFN, chaque entrée est un ensemble d’états
Dans le tableau de transition d’un AFD, chaque entrée est un seul état.
Idée générale concernant la conversion de AFN en AFD: chaque état AFD correspond à un ensemble d’états AFN
SEG2106 – Winter 2014 – Hussein Al Osman 255
![Page 256: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/256.jpg)
ALGORITHME DE CONSTRUCTION DE SOUS-ENSEMBLES
Algorithme: Construction de sous-ensembles – Utilisé pour construire un AFD à partir d’un AFN
Entrée: Un AFN “N”
Sortie: Un AFD “D” qui accepte le même langage
SEG2106 – Winter 2014 – Hussein Al Osman 256
![Page 257: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/257.jpg)
ALGORITHME DE CONSTRUCTION DE SOUS-ENSEMBLES
Méthode:
• Soit s un état dans “N” et “T” un ensemble d’états, et utilisons les opérations suivantes:
SEG2106 – Winter 2014 – Hussein Al Osman 257
Operation Definition
ε-closure(s) Ensembles des états dans N qui peuvent être atteints de l’état s avec des transitions ε
ε-closure(T) Ensembles des états dans N qui peuvent être atteints de l’ensemble des états T avec des transitions ε
move(T,a) Ensembles des états dans N qui peuvent être atteints de l’ensemble des états T avec une seule transition a
![Page 258: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/258.jpg)
CONSTRUCTION DE SOUS-ENSEMBLES (ALGORITHME PRINCIPAL)
SEG2106 – Winter 2014 – Hussein Al Osman 258
![Page 259: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/259.jpg)
CONSTRUCTION DE SOUS-ENSEMBLES(COMPUTATION À FERMETURE-Ε)
SEG2106 – Winter 2014 – Hussein Al Osman 259
![Page 260: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/260.jpg)
EXEMPLE DE CONVERSION
ÉtatsD={A,B,C}, où
• A = (1,2,3,5,8)• B = (2,3,4,5,7,8)• C = (2,3,5,6,7,8)
SEG2106 – Winter 2014 – Hussein Al Osman 260
ε81
ε
ε
ε
2 7
x
y
3 4
5 6
ε ε
ε ε
x y
A B C
B B C
C B C
Expression Régulière:(x | y)*
![Page 261: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/261.jpg)
EXEMPLE DE CONVERSION
SEG2106 – Winter 2014 – Hussein Al Osman 261
Expression Régulière:(x | y)*
x
A
B
C
B
C
A
y
x
xy
y
x y
A B C
B B C
C B C
![Page 262: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/262.jpg)
AUTRE EXEMPLE DE CONVERSION
Expression Régulière:
(a | b)*abb
SEG2106 – Winter 2014 – Hussein Al Osman 262
![Page 263: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/263.jpg)
AUTRE EXEMPLE DE CONVERSION
Expression Régulière:
(a | b)*abb
SEG2106 – Winter 2014 – Hussein Al Osman 263
![Page 264: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/264.jpg)
AUTRE EXEMPLE DE CONVERSION
Expression Régulière:
(a | b)*abb
SEG2106 – Winter 2014 – Hussein Al Osman 264
![Page 265: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/265.jpg)
MINIMISER LE NOMBRE D’ÉTATS D’UN AFD
Minimiser le nombre d’états d’un AFD en trouvant tous les groupes d’états qui peuvent être distingués par une chaîne de caractères d’entrée
Chaque groupe d’états qui ne peut pas être distingué est fusionné en un état simple
SEG2106 – Winter 2014 – Hussein Al Osman 265
![Page 266: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/266.jpg)
MINIMISER LE NOMBRE D’ÉTATS D’UN AFD
Algorithme: Minimiser le nombre d’états d’un AFD
Entrée: Un AFD “D” avec un ensemble d’états S
Sortie: Un AFD “M” qui accepte le même langage que “D” mais qui possède le plus bas nombre d’états possible
SEG2106 – Winter 2014 – Hussein Al Osman 266
![Page 267: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/267.jpg)
MINIMISER LE NOMBRE D’ÉTATS D’UN AFD
Méthode:
1. Construire une partition initiale Π de l’ensemble d’états avec deux groupes:
• Le groupe d’états acceptants • Tous les autres groupes d’états
2. Partitionner Π en Πnew (en utilisant la procédure montrée dans la diapo suivante)
3. Si Πnew != Π, répéter l’étape (2). Sinon, aller à l’étape (4)
4. Choisir un état dans chaque groupe de la partition Π comme étant représentant du groupe
5. Enlever les états morts
SEG2106 – Winter 2014 – Hussein Al Osman 267
![Page 268: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/268.jpg)
PROCÉDURE POUR CONSTRUIRE UNE NOUVELLE PARTITION
pour chaque groupe G de Π
Partitionnez G à des sous groupes où deux états s et t de G sont dans le même sous groupe si et seulement si
pour tous symboles d’entré ‘a’, les états s et t ont des transitions ‘a’ à des états dans le même groupe de Π
/* dans le pire cas, un état va être tout seule*/
Remplace G dans Πnew par l’ensemble de tous les sous groupes formés
endSEG2106 – Winter 2014 – Hussein Al Osman 268
![Page 269: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/269.jpg)
EXEMPLE DE MINIMISATION DE AFN
SEG2106 – Winter 2014 – Hussein Al Osman 269
B Ca
DAc a a
E
F
b
a
bbb
F
Π=A, B, C, D, E
F
A
B, C, D, E
F
A
B, C, D, E
F
![Page 270: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/270.jpg)
EXEMPLE DE MINIMISATION DE AFN
AFD minimisé, où:
• 1: A• 2: B, C, D, E• 3: F
SEG2106 – Winter 2014 – Hussein Al Osman 270
21c
a
3
b
3
![Page 271: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/271.jpg)
SECTION 9
EXPRESSIONS RÉGULIÈRES PRATIQUES
SEG2106 – Winter 2014 – Hussein Al Osman 271
![Page 272: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/272.jpg)
SUJETS
Notations pratiques qui sont souvent utilisées dans les expressions régulières
Quelques exercices de pratique
SEG2106 – Winter 2014 – Hussein Al Osman 272
![Page 273: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/273.jpg)
TRUCS POUR LES EXPRESSIONS RÉGULIÈRES PRATIQUES
Nous verrons des trucs pour les expressions régulières pratiques qui sont supportées par la plupart des librairies de regex
Souvenez-vous, les expressions régulières ne sont pas utilisées uniquement dans le contexte des compilateurs
• Nous les utilisons souvent pour extraire l’information d’un texte
Exemple: Imaginez que vous cherchez dans un fichier log qui accumule des entrées depuis deux mois pour un motif d’erreur particulier
• Sans les expressions régulières, ceci sera une tâche ennuyante
SEG2106 – Winter 2014 – Hussein Al Osman 273
![Page 274: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/274.jpg)
MATCHER LES CHIFFRES
Afin de matcher un chiffre simple, comme on a vu précédemment, on peut utiliser l’expression régulière suivante:
[0-9]
Cependant, puisque l’opération de matcher un chiffre est une opération connue, on peut utiliser la notation suivante:
\d
Un slash est un caractère d’échappement utilisé pour le distinguer de la lettre d
Similairement, afin de matcher un caractère non-chiffre, on peut utiliser la notation:
\D
SEG2106 – Winter 2014 – Hussein Al Osman 274
![Page 275: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/275.jpg)
CARACTÈRES ALPHANUMÉRIQUES
Afin de matcher un caractère alphanumérique, on peut utiliser la notation:
[a-zA-Z0-9]
Ou on peut utiliser le raccourci suivant:
\w
Similairement, on peut représenter n’importe quel caractère non-alphanumérique comme suit:
\W
SEG2106 – Winter 2014 – Hussein Al Osman 275
![Page 276: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/276.jpg)
GÉNÉRIQUE (WILDCARD)
Un caractère générique est défini pour matcher n’importe quel caractère simple (lettre, chiffre, espace blanc …)
Il est représenté par le caractère . (point)
Alors, afin de matcher un point, vous devez utiliser le caractère d’échappement: \.
SEG2106 – Winter 2014 – Hussein Al Osman 276
![Page 277: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/277.jpg)
EXCLUSION
Nous avons déjà vu que [abc] est équivalent à (a | b | c)
Mais, parfois on veut matcher tout sauf un ensemble de caractères
Pour accomplir ceci, on peut utiliser la notation: [^abc]
• Ceci matche n’importe quel caractère simple sauf a, b ou c
Cette notation peut aussi être utilisée avec les classes de caractères abréviés
• [^a-z] matche n’importe quel caractère sauf les lettres minuscules
SEG2106 – Winter 2014 – Hussein Al Osman 277
![Page 278: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/278.jpg)
RÉPÉTITIONS
Comment peut-on matcher une lettre ou une chaîne qui se répète plusieurs fois en rang:
• Ex. ababab
Jusqu’à maintenant, nous avons implémenter des répétitions à travers trois mécanismes:
• Concaténation: simplement concaténer la chaîne ou le caractère avec lui-même (ne fonctionne pas si vous ne connaissez pas le nombre exact de répétitions)
• Fermeture étoile Kleene: pour matcher des lettres ou des chaînes répétés 0 ou plusieurs fois
• Fermeture positive: pour matcher des lettres ou des chaînes répétés 1 ou plusieurs fois
SEG2106 – Winter 2014 – Hussein Al Osman 278
![Page 279: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/279.jpg)
RÉPÉTITIONS
On peut aussi spécifier une gamme de combien de fois une lettre ou une chaîne peuvent être répétés
Exemple, si on veut matcher des chaînes de répétition de la lettre a entre 1 et 3 fois, on peut utiliser la notation: a {1,3}
• Alors, a {1,3} matche la chaîne aaa
On peut aussi spécifier un nombre exact de répétitions au lieu d’une gamme
• ab {3} matche la chaîne ababab
SEG2106 – Winter 2014 – Hussein Al Osman 279
![Page 280: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/280.jpg)
CARACTÈRES OPTIONNELS
Le concept du caractère optionnel est plus ou moins similaire à l’étoile kleene
• L’opérateur étoile matche 0 ou plus cas de l’opérande• L’opérateur optionnel, représenté par ? (point
d’interrogation), matche 0 ou un cas de l’opérande
Exemple: le motif ab?c matchera soit les chaînes "abc" ou "ac" parce que b est considéré optionnel.
SEG2106 – Winter 2014 – Hussein Al Osman 280
![Page 281: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/281.jpg)
ESPACE BLANC
Souvent, on veut facilement identifier les espaces blancs
• Soit pour les enlever ou pour identifier le début ou la fin de mots
Les espaces blanc les plus utilisés avec les expressions régulières:
• Espace _, la caractère de tabulation \t, la nouvelle ligne \n et le retour chariot \r
Un caractère spécial d’espace blanc \s matchera n’importe quel espace blanc spécifiez ci-haut
Similairement, vous pouvez matcher n’importe quel caractère d’espace non-blanc en utilisant la notation \SSEG2106 – Winter 2014 – Hussein Al Osman 281
![Page 282: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/282.jpg)
QUELQUES EXERCICES
Étant donné la phrase:
• Error, computer will now shut down…
Développez une expression régulière qui matchera tous les mots dans la phrase
Réponse:
\w*
SEG2106 – Winter 2014 – Hussein Al Osman 282
![Page 283: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/283.jpg)
QUELQUES EXERCICES
Étant donné la phrase:
• Error, computer will now shut down…
Développez une expression régulière qui matchera tous les caractères non-alphanumériques
Réponse:
\W*
SEG2106 – Winter 2014 – Hussein Al Osman 283
![Page 284: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/284.jpg)
QUELQUES EXERCICES
Étant donné le fichier log:
• [Sunday Feb. 2 2014] Program starting up• [Monday Feb. 3 2014] Entered initialization phase• [Tuesday Feb. 4 2014] Error 5: cannot open XML file• [Thursday Feb. 6 2014] Warning 5: response time is too slow• [Friday Feb. 7 2014] Error 9: major error occurred, system will
shut down
Matcher n’importe quel message d’erreur ou d’alerte qui termine par le terme “shut down”
Réponse:
(Error|Warning).*(shut down)
SEG2106 – Winter 2014 – Hussein Al Osman 284
![Page 285: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/285.jpg)
QUELQUES EXERCICES
Étant donné le fichier log:
• [Sunday Feb. 2 2014] Program starting up• [Monday Feb. 3 2014] Entered initialization phase• [Tuesday Feb. 4 2014] Error 5: cannot open XML file• [Thursday Feb. 6 2014] Warning 5: response time is too slow• [Friday Feb. 7 2014] Error 9: major error occurred, system will
shut down
Matcher n’importe quel erreur ou alerte entre le 1 et 6 février
Réponse:
\[\w* Feb\. [1-6] 2014\] (Error|Warning)
SEG2106 – Winter 2014 – Hussein Al Osman 285
![Page 286: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/286.jpg)
SECTION 10
INTRODUCTION À L’ANALYSE SYNTAXIQUE
SEG2106 - Hussein Al Osman - Winter 2014 286
![Page 287: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/287.jpg)
SUJETS
Grammaires non-contextuelles
Dérivations
Arbres Syntaxiques
Ambiguïté
Analyse syntaxique descendante
Récursivité gauche
SEG2106 - Hussein Al Osman - Winter 2014 287
![Page 288: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/288.jpg)
LE RÔLE DE L’ANALYSEUR SYNTAXIQUE
SEG2106 - Hussein Al Osman - Winter 2014 288
![Page 289: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/289.jpg)
GRAMMAIRES NON-CONTEXTUELLES
Une grammaire non-contextuelles (GNC) se consiste de:
• Terminaux• Non-terminaux• Symbole de début• Productions
Un langage qui peut être généré par une grammaire non-contextuelle est appelé un langage non-contextuel
SEG2106 - Hussein Al Osman - Winter 2014 289
![Page 290: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/290.jpg)
GRAMMAIRES NON-CONTEXTUELLES
Terminaux: sont les symboles de base d’où les chaînes sont formées
• Ceux-ci sont les tokens qui ont été produits par l’Analyseur Lexical
Non-terminaux: sont des variables syntactiques qui dénote une série des chaînes de symbole de grammaire
• Un de ces non-terminaux est distingué comme étant le symbole de départ
Les productions d’une grammaire spécifient la manière dont le terminal et non-terminal peuvent être combinés afin de former des chaînes
SEG2106 - Hussein Al Osman - Winter 2014 290
![Page 291: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/291.jpg)
EXEMPLE DE GRAMMAIRE
SEG2106 - Hussein Al Osman - Winter 2014 291
La grammaire avec les productions suivantes définit des expressions arithmétiques simples
〈 expr 〉 ::= 〈 expr 〉 〈 op 〉 〈 expr 〉〈 expr 〉 ::= id 〈 expr 〉 ::= num 〈 op 〉 ::= + 〈 op 〉 ::= - 〈 op 〉 ::= * 〈 op 〉 ::= /
Dans cette grammaire, les symboles terminaux sontnum, id + - * /
Les symboles non-terminaux sont 〈 expr 〉 et 〈 op 〉 , et 〈 expr 〉 est le symbole de départ
![Page 292: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/292.jpg)
DÉRIVATIONS
〈 expr 〉 〈 expr 〉〈 op 〉〈 expr 〉est lue “expr derives expr op expr”
〈 expr 〉 〈 expr 〉〈 op 〉〈 expr 〉 id 〈 op 〉〈 expr 〉 id * 〈 expr 〉 id*id
est appelée une dérivation de id*id d’après expr.
SEG2106 - Hussein Al Osman - Winter 2014 292
![Page 293: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/293.jpg)
DÉRIVATIONS
Si A::= est une production et et sont des chaînes arbitraires de symboles de grammaire, on peut dire que:
A
Si 12... n, on dit que 1 dérive n.
SEG2106 - Hussein Al Osman - Winter 2014 293
![Page 294: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/294.jpg)
DÉRIVATIONS
veut dire “dérive en une seule étape.”
veut dire “dérive en zéro ou plusieurs étapes.”
• si et donc
veut dire “dérive en une ou plusieurs étapes.”
Si S , où peut contenir des non-terminaux, alors on dit que est en forme propositionnelle
• Si ne contient pas des non-terminaux, on dit que est une phrase
SEG2106 - Hussein Al Osman - Winter 2014 294
*
*
*
+
*
![Page 295: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/295.jpg)
DÉRIVATIONSG: grammaire
S: symbole de départ
L(G): le langage généré par G
Les chaînes dans L(G) peuvent contenir uniquement des symboles terminaux de G
Une chaîne de terminaux w est dite étant dans L(G) si et seulement si Sw
La chaîne w est appelée une phrase de G
Un langage qui peut être généré par une grammaire est connu comme étant un langage non-contextuel
• Si deux grammaires génèrent le même langage, les grammaires sont connues comme étant équivalentes
SEG2106 - Hussein Al Osman - Winter 2014 295
+
![Page 296: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/296.jpg)
DÉRIVATIONS
Nous avons déjà vu les règles de production suivantes:
〈 expr 〉 ::= 〈 expr 〉〈 op 〉〈 expr 〉 | id | num
〈 op 〉 ::= + | - | * | /
La chaîne id+id est une phrase de grammaire ci-haut parce que
〈 expr 〉 〈 expr 〉 op 〈 expr 〉 id op 〈 expr 〉 id + 〈 expr 〉 id + id
On écrit 〈 expr 〉 id+id
SEG2106 - Hussein Al Osman - Winter 2014 296
*
![Page 297: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/297.jpg)
ARBRE SYNTAXIQUE
SEG2106 - Hussein Al Osman - Winter 2014 297
expr
exprexpr op
id + idCeci est appelé:Dérivation à gauche
![Page 298: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/298.jpg)
DEUX ARBRES SYNTAXIQUES
Considérons encore une fois l’expression arithmétique de grammaire.
Pour la ligne de code:
x+2*y
(nous ne considérons pas le point-virgule pour le moment)
SEG2106 - Hussein Al Osman - Winter 2014 298
Grammaire:〈 expr 〉 ::= 〈 expr 〉〈 op 〉〈 expr 〉 | id | num〈 op 〉 ::= + | - | * | /
Analyseur Lexical
x+z*yAnalyseur Syntaxique
id+id*idArbre syntaxique(parse tree)
![Page 299: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/299.jpg)
DEUX ARBRES SYNTAXIQUES
Considérons encore une fois l’expression arithmétique de grammaire.
La phrase id + id * id possède deux dérivations à gauche distinctes:
SEG2106 - Hussein Al Osman - Winter 2014 299
〈 expr 〉 〈 expr 〉〈 op 〉〈 expr 〉 id 〈 op 〉〈 expr 〉 id + 〈 expr 〉 id + 〈 expr 〉〈 op 〉
〈 expr 〉 id + id 〈 op 〉〈 expr 〉 id + id * 〈 expr 〉 id + id * id
〈 expr 〉 〈 expr 〉〈 op 〉〈 expr 〉 〈 expr 〉〈 op 〉〈 expr 〉〈 op 〉
〈 expr 〉 id 〈 op 〉〈 expr 〉〈 op 〉〈 expr 〉 id + 〈 expr 〉〈 op 〉〈 expr 〉 id + id 〈 op 〉〈 expr 〉 id + id * 〈 expr 〉 id + id * id
Grammaire:〈 expr 〉 ::= 〈 expr 〉〈 op 〉〈 expr 〉 | id | num〈 op 〉 ::= + | - | * | /
![Page 300: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/300.jpg)
DEUX ARBRES SYNTAXIQUES
SEG2106 - Hussein Al Osman - Winter 2014 300
expr op expr
+
id * id
exprexpr op
expr
id
expr op expr
id + id
expr
exprexpr op
* id
Equivalent à:id+(id*id)
Equivalent à:(id+id)*id
Grammaire:〈 expr 〉 ::= 〈 expr 〉〈 op 〉〈 expr 〉 | id | num〈 op 〉 ::= + | - | * | /
![Page 301: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/301.jpg)
PRÉCÉDENCE
L’exemple précédent surligne un problème dans la grammaire:
• Il n’impose pas la précédence• Il n’implique pas l’ordre d’évaluation
On peut améliorer les règles de production pour ajouter la précédence
SEG2106 - Hussein Al Osman - Winter 2014 301
![Page 302: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/302.jpg)
APPLIQUER LA MISE À JOUR DE PRÉCÉDENCE
La phrase id + id * id possède seulement une seule dérivation à gauche maintenant:
SEG2106 - Hussein Al Osman - Winter 2014 302
〈 expr 〉 〈 expr 〉 + 〈 term 〉 〈 term 〉 + 〈 term 〉 〈 factor 〉 + 〈 term 〉 id + 〈 term 〉 id + 〈 term 〉 * 〈 factor 〉 id + 〈 factor 〉 * 〈 factor 〉 id + id * 〈 factor 〉 id + id * id
Grammaire:〈 expr 〉 ::= 〈 expr 〉 + 〈 term 〉 | 〈 expr 〉 - 〈 term 〉 | 〈 term 〉〈 term 〉 ::= 〈 term 〉 * 〈 factor 〉 | 〈 term 〉 / 〈 factor 〉 |〈 factor 〉〈 factor 〉 ::= num | id
factor
expr
term
termexpr +
id
id
term factor*
factor
id
![Page 303: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/303.jpg)
AMBIGUÏTÉ
Une grammaire qui produit plus qu’un arbre syntaxique pour une phrase est connue comme étant ambiguë.
Exemple:
Considérez la déclaration suivante:
Elle possède deux dérivations
• C’est une ambiguïté non-contextuelle
SEG2106 - Hussein Al Osman - Winter 2014 303
![Page 304: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/304.jpg)
AMBIGUÏTÉ
Une grammaire qui produit plus qu’un arbre syntaxique pour une phrase est connue comme étant ambiguë
SEG2106 - Hussein Al Osman - Winter 2014 304
![Page 305: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/305.jpg)
ÉLIMINER L’AMBIGUÏTÉ
Parfois, une grammaire ambiguë peut être réécrite afin d’éliminer l’ambiguïté.
• Ex. “matcher chaque « else » avec « then » le plus proche”• Ceci est probablement l’intention du programmeur
SEG2106 - Hussein Al Osman - Winter 2014 305
![Page 306: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/306.jpg)
FAIRE LE PLAN DANS UN EXEMPLE JAVA
Dans Java, les règles de grammaire sont un peu différentes de l’exemple précédent
Ci-dessous est une version (très simplifiée) de ces règles
<stmnt> ::= <matched>
| <unmatched>
<matched> ::= if ( <expr> ) <matched> else <matched>
| other stmnts
<unmatched> ::= if ( <expr> ) < stmnt >
| if ( <expr> ) <matched> else <unmatched>
SEG2106 - Hussein Al Osman - Winter 2014 306
![Page 307: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/307.jpg)
FAIRE LE PLAN DANS UN EXEMPLE JAVA
Pour la portion de code suivante
if (x==0)
if (y==0)
z = 0;
else
z = 1;
Après avoir exécuter l’analyseur lexical, nous obtenons la liste de tokens suivante:
if ( id == num ) if (id == num) id = num ; else id = num ;
SEG2106 - Hussein Al Osman - Winter 2014 307
![Page 308: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/308.jpg)
FAIRE LE PLAN DANS UN EXEMPLE JAVAChaîne de tokens de donnée:
if ( id == num ) if (id == num) id = num ; else id = num ;
Construire l’arbre syntaxique:
SEG2106 - Hussein Al Osman - Winter 2014 308
stmnt
( )expr matchedif else matched
( )expr stmntif
umatched
matched
![Page 309: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/309.jpg)
FAIRE LE PLAN DANS UN EXEMPLE JAVA (AUTRE EXEMPLE)
Chaîne de tokens de donnée:
if ( id == num ) else id = num ;
Construire l’arbre syntaxique:
SEG2106 - Hussein Al Osman - Winter 2014 309
( )expr matchedif else matched
stmnt
matched
![Page 310: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/310.jpg)
ANALYSE SYNTAXIQUE DESCENDANTE
Une analyse syntaxique descendante commence avec la racine de l’arbre syntaxique, marquée avec le symbole de départ
Pour construire un arbre syntaxique, on répète les étapes suivantes jusqu’à ce que les feuille de l’arbre syntaxique matche la chaîne de données
1. À un nœud marqué par A, sélectionnez une production A::=α et construisez l’enfant approprié pour chaque symbole de α
2. Lorsqu’un terminal ajouté à l’arbre syntaxique ne matche pas la chaîne de données, reculer
3. Trouvez le non-terminal suivant à être developper
SEG2106 - Hussein Al Osman - Winter 2014 310
![Page 311: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/311.jpg)
ANALYSE SYNTAXIQUE DESCENDANTE
L’analyse syntaxique descendante peut être vue comme une tentative pour trouver une dérivation à gauche pour une chaîne de données
Exemple:
SEG2106 - Hussein Al Osman - Winter 2014 311
Chaîne de donnéescad
Grammaire:
On a besoin de reculer!
<S> ::= c<A>d<A> ::= ab | a
![Page 312: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/312.jpg)
GRAMMAIRE DE L’EXPRESSION
Rappelez-vous de notre grammaire pour les expressions simples:
Considérez la chaîne de données:
id – num * id
SEG2106 - Hussein Al Osman - Winter 2014 312
![Page 313: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/313.jpg)
EXEMPLE
313
Reference Grammar
![Page 314: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/314.jpg)
EXEMPLEUne autre analyse syntaxique possible pour id – num * id
Si l’analyseur syntaxique fait les mauvais choix, l’expansion ne se termine pas
• Ceci n’est pas une bonne propriété pour l’analyseur syntaxique• Les analyseurs syntaxiques devraient se terminer, finalement…
SEG2106 - Hussein Al Osman - Winter 2014 314
![Page 315: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/315.jpg)
RÉCURSIVITÉ GAUCHE
Une grammaire est récursive à gauche si:
“Elle possède un non-terminal A de façon qu’il
existe une dérivation AA pour une chaîne ”
Les analyseurs syntaxiques descendants ne
peuvent pas traiter la récursivité gauche dans
une grammaire
SEG2106 - Hussein Al Osman - Winter 2014 315
+
![Page 316: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/316.jpg)
ÉLIMINER LA RÉCURSIVITÉ GAUCHEConsidérez le fragments de grammaire:
Où α et β ne commence pas par 〈 foo 〉On peut réécrire ceci comme:
Où 〈 bar 〉 est un nouveau non-terminal
Ce Fragment ne contient pas de récursivité gauche
SEG2106 - Hussein Al Osman - Winter 2014 316
![Page 317: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/317.jpg)
EXEMPLENotre grammaire d’expressions contient deux cas de récursivité gauche
Appliquer la transformation nous donne
Avec cette grammaire, un analyseur descendant va
• Se terminer (assurément)• Reculer pour quelques données
SEG2106 - Hussein Al Osman - Winter 2014 317
![Page 318: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/318.jpg)
ALGORITHMES PRÉDICTIFS
Nous avons vu que les analyseurs descendants doivent reculer lorsqu’ils choisissent la mauvaise production
Conséquemment, nous devons utiliser les algorithmes prédictifs afin d’éviter de reculer
On vas voir deux analyseurs prédictifs:
• LL(1): scanner de gauche à droite, dérivation gauche, 1-token look ahead
• LR(1): scanner de gauche à droite, dérivation droite, 1-token look ahead
SEG2106 - Hussein Al Osman - Winter 2014 318
![Page 319: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/319.jpg)
SECTION 11
ANALYSEUR SYNTAXIQUE LL(1)
SEG2106 - Hussein Al Osman - Winter 2014 319
![Page 320: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/320.jpg)
SUJETS
Grammaire LL(1)
Éliminer la récursivité gauche
Factorisation gauche
Les ensembles FIRST et FOLLOW
Tableaux syntaxiques
Analyseur syntaxique LL(1)
Plusieurs exemples…
SEG2106 - Hussein Al Osman - Winter 2014 320
![Page 321: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/321.jpg)
RÉVISION: LE RÔLE DE L’ANALYSEUR SYNTAXIQUE
SEG2106 - Hussein Al Osman - Winter 2014 321
![Page 322: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/322.jpg)
ANALYSEURS SYNTAXIQUES PRÉDICTIFS
Nous avons vu que les analyseurs syntaxiques descendants ont besoin de reculer lorsqu’ils choisissent la mauvaise production
Nous voulons éviter de reculer.
Les analyseurs syntaxiques prédictifs sont utiles dans ce cas
• LL(1): scanning de gauche à droite, dérivation à gauche, 1-token d’avance
• LR(1): scanning de gauche à droite, dérivation è droite, 1-token d’avance
SEG2106 - Hussein Al Osman - Winter 2014 322
![Page 323: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/323.jpg)
GRAMMAIRE LL(1)
Afin d’utiliser les analyseurs syntaxiques LL(1), la grammaire non-contextuelle doit être:
• Non ambigüe (nous avons déjà discuté de l’ambiguïté)• Sans récursivité gauche (nous avons déjà discuté de
l’élimination de la récursivité gauche)• Factorisée à gauche (nous allons discuté de la
factorisation gauche aujourd’hui)
SEG2106 - Hussein Al Osman - Winter 2014 323
GrammaireNon-Contextuelle
Elimination d’ambiguïté
Elimination de récursivité
gauche
Factorisation à gauche
Grammaire LL(1)
Les méthodes ci-hauts convertissent plusieurs grammaires en forme LL(1) mais pas toutes… Il existe plusieurs exceptions.
![Page 324: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/324.jpg)
RÉVISION: RÉCURSIVITÉ GAUCHE
Une grammaire est récursive à gauche si:
“Elle possède un non-terminal A de sorte
qu’il existe une dérivation AA pour une
chaîne ”
Les analyseurs syntaxiques descendants
ne peuvent pas traiter la récursivité
gauche dans une grammaireSEG2106 - Hussein Al Osman - Winter 2014 324
+
![Page 325: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/325.jpg)
ÉLIMINER LA RÉCURSIVITÉ GAUCHEConsidérez le fragment de grammaire:
Où α et β ne commencent pas par 〈 foo 〉On peut réécrire ceci de la façon suivante:
Où 〈 bar 〉 est un non-terminal
Ce fragment ne contient aucune récursivité gauche
SEG2106 - Hussein Al Osman - Winter 2014 325
![Page 326: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/326.jpg)
FACTORISATION GAUCHE
Pour toutes deux productions Aα | β, on veut avoir une façon distincte pour choisir la bonne production à étendre
On définit FIRST(α) comme étant l’ensemble de terminaux qui apparaissent en début d’une chaîne quelconque dérivée de α
Pour un terminal w, on peut dire que:
w FIRST(α) iff α ∈ wzSEG2106 - Hussein Al Osman - Winter 2014 326
*
![Page 327: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/327.jpg)
FACTORISATION GAUCHE
Maintenant, retournons à nos deux productions: Aα et Aβ, on veut:
FIRST(α) ∩ FIRST(β) = f
Ceci permet à l’analyseur syntaxique de faire le bon choix avec une vue d’avance d’un seul symbole
SEG2106 - Hussein Al Osman - Winter 2014 327
![Page 328: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/328.jpg)
FACTORISATION GAUCHEÉtant donné cette grammaire:
L’analyseur syntaxique ne peut pas choisir entre les productions 1, 2 et 3 étant donné un token d’entrée de num ou id
FIRST(1) ∩ FIRST(2) ∩ FIRST(3) ≠ f
La factorisation gauche est nécessaire pour résoudre ce problème!SEG2106 - Hussein Al Osman - Winter 2014 328
12345678
![Page 329: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/329.jpg)
FACTORISATION GAUCHE
Alors, comment ça fonctionne?
Pour chaque non-terminal A, trouvez le plus long préfixe α commun à deux de ses alternatives ou plus
Si α ≠ ε, alors remplacez toutes les productions A
A αβ1| αβ2| αβ3| … | αβn
Par
A α A’
A’β1| β2| β3| … | βn
Où A’ est un nouveau non-terminal
Répétez jusqu’à ce qu’aucune deux alternatives pour un non-terminal simple possède un préfixe commun
SEG2106 - Hussein Al Osman - Winter 2014 329
![Page 330: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/330.jpg)
FACTORISATION GAUCHEDonc, dans notre grammaire:
Lorsqu’on effectue la factorisation gauche (sur expr et term), on obtient:
SEG2106 - Hussein Al Osman - Winter 2014 330
![Page 331: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/331.jpg)
ANALYSEUR SYNTAXIQUE LL(1)
On sait maintenant comment prendre une grammaire non-contextuelle et la transformer en en grammaire LL(1) (au moins on peut essayer…)
SEG2106 - Hussein Al Osman - Winter 2014 331
GrammaireNon-Contextuelle
Elimination d’ambiguïté
Elimination de récursivité
gauche
Factorisation à gauche
Grammaire LL(1)
![Page 332: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/332.jpg)
ANALYSEUR SYNTAXIQUE LL(1)
On veut implémenter un analyseur syntaxique LL(1) qui est capable d’analyser le syntaxe d’une chaîne de donnée de tokens sans reculer
• Évidemment, étant donné que la grammaire est compatible avec cet analyseur syntaxique
Afin d’effectuer ceci, on doit trouver deux ensembles pour chaque non-terminal:
• FIRST (on a déjà parlé de cet ensemble brièvement)• FOLLOW
SEG2106 - Hussein Al Osman - Winter 2014 332
![Page 333: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/333.jpg)
CALCUL DE L’ENSEMBLE FIRST
Règles pour calculer l’ensemble FIRST:
1. FIRST(terminal){terminal}
2. Si Aaα, et a est un terminal:
FIRST(A){a}
3. Si ABα, et la règle Bε N’EXISTE PAS:
FIRST(A)FIRST(B)
4. Si ABα, et la règle Bε EXISTE:
FIRST(A)[FIRST(B)- ε] υ FIRST(α)
SEG2106 - Hussein Al Osman - Winter 2014 333
![Page 334: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/334.jpg)
CALCUL DE L’ENSEMBLE FIRSTAppliquons ces règles à un exemple.
Étant donné la grammaire:
<S> ::= <A><B><A> ::= a<B> ::= b
FIRST(A) = {a} (on applique la 2e règle)
FIRST(B) = {b} (on applique la 2e règle)
FIRST(S) = FIRST(A)
= {a} (on applique la 3e règle)
SEG2106 - Hussein Al Osman - Winter 2014 334
1) FIRST(terminal){terminal}
2) Si Aaα, et a est un terminal: FIRST(A){a}
3) Si ABα, et la règle Bε N’EXISTE PAS:FIRST(A)FIRST(B)
4) Si ABα, et la règle Bε EXISTE:FIRST(A)[FIRST(B)- ε] υ FIRST(α)
![Page 335: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/335.jpg)
CALCUL DE L’ENSEMBLE FIRSTUn autre exemple…
Étant donné la grammaire:
<S> ::= <A><B><A> ::= a | ε<B> ::= b
FIRST(A) = {a, ε} (2e règle)
FIRST(B) = {b} (2e règle)
FIRST(S) = [FIRST(A)- ε] υ FIRST(B) = {a, b} (4e règle)
SEG2106 - Hussein Al Osman - Winter 2014 335
1) FIRST(terminal){terminal}
2) Si Aaα, et a est un terminal: FIRST(A){a}
3) Si ABα, et la règle Bε N’EXISTE PAS:FIRST(A)FIRST(B)
4) Si ABα, et la règle Bε EXISTE:FIRST(A)[FIRST(B)- ε] υ FIRST(α)
![Page 336: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/336.jpg)
CALCUL DE L’ENSEMBLE FOLLOW
Règles pour calculer l’ensemble FOLLOW:
1. FOLLOW(S){$} (où S est le symbole de départ)
2. Si A αB:
FOLLOW(B) FOLLOW(A)
3. Si AαBC, et la règle Cε N’EXISTE PAS:
FOLLOW(B)FIRST(C)
4. Si AαBC, et la règle Cε EXISTE:
FOLLOW(B)[FIRST(C)- ε] υ FOLLOW(A)
SEG2106 - Hussein Al Osman - Winter 2014 336
![Page 337: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/337.jpg)
CALCUL DE L’ENSEMBLE FOLLOWAppliquons ces règles à un exemple.
Étant donné la grammaire:
<S> ::= <A><B><A> ::= a<B> ::= b
FOLLOW(S) = {$} (1e règle)
FOLLOW(A) = FIRST(B)
= {b} (3e règle)
FOLLOW(B) = FOLLOW (S)
= {$} (2e règle)
SEG2106 - Hussein Al Osman - Winter 2014 337
1) FOLLOW(S){$}
2) Si A αB: FOLLOW(B) FOLLOW(A)
3) Si AαBC, et la règle Cε N’EXISTE PAS:FOLLOW(B)FIRST(C)
4) Si AαBC, et la règle Cε EXISTE:FOLLOW(B)[FIRST(C)- ε] υ FOLLOW(A)
![Page 338: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/338.jpg)
CALCUL DE L’ENSEMBLE FOLLOWUn autre exemple…
Étant donné la grammaire:
<S> ::= <A><B><A> ::= a<B> ::= b | ε
FOLLOW(S) = {$} (1e règle)
FOLLOW(A) = [FIRST(B)- ε]υFOLLOW(S)
= {b, $} (4e règle)
FOLLOW(B) = FOLLOW (S)
= {$} (2e règle)
SEG2106 - Hussein Al Osman - Winter 2014 338
1) FOLLOW(S){$}
2) Si A αB: FOLLOW(B) FOLLOW(A)
3) Si AαBC, et la règle Cε N’EXISTE PAS:FOLLOW(B)FIRST(C)
4) Si AαBC, et la règle Cε EXISTE:FOLLOW(B)[FIRST(C)- ε] υ FOLLOW(A)
![Page 339: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/339.jpg)
FIRST ET FOLLOWCalculons FIRST et FOLLOW pour chaque non-terminal dans notre fameuse grammaire:
Trouvez ceux qui sont faciles en premier:
FIRST(factor)={num, id}
FIRST(term’)={*, /, ε}
FIRST(expr’)={+, -, ε}
Ensuite, trouvez ceux qui sont plus difficiles:
FIRST(term)=FIRST(factor)={num, id}
FIRST(expr)=FIRST(term)={num, id}
SEG2106 - Hussein Al Osman - Winter 2014 339
Grammaire
1) FIRST(terminal){terminal}
2) Si Aaα, et a est un terminal: FIRST(A){a}
3) Si ABα, et la règle Bε N’EXISTE PAS:FIRST(A)FIRST(B)
4) Si ABα, et la règle Bε EXISTE:FIRST(A)[FIRST(B)- ε] υ FIRST(α)
“Règles” de FIRST
![Page 340: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/340.jpg)
FIRST ET FOLLOWCalculons FIRST et FOLLOW pour chaque non-terminal dans notre fameuse grammaire:
Commencez avec ceux qui sont faciles:
FOLLOW(expr)={$}
FOLLOW(expr’)=FOLLOW(expr)={$}
SEG2106 - Hussein Al Osman - Winter 2014
340
Grammaire
1) FOLLOW(S){$}
2) Si A αB: FOLLOW(B) FOLLOW(A)
3) Si AαBC, et la règle Cε N’EXISTE PAS:FOLLOW(B)FIRST(C)
4) Si AαBC, et la règle Cε EXISTE:FOLLOW(B)[FIRST(C)- ε] υ FOLLOW(A)
“Règles” de FOLLOW
![Page 341: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/341.jpg)
FIRST ET FOLLOWCalculons FIRST et FOLLOW pour chaque non-terminal dans notre fameuse grammaire:
Trouvez ceux qui sont plus difficiles:
FOLLOW(term)=[FIRST(expr’)-ε]υFOLLOW(expr)
= {+, -, $}
FOLLOW(factor)=[FIRST(term’)-ε]υFOLLOW(term)
= {*, /, +, -, $}
FOLLOW(term’)= FOLLOW(term)
= {+, -, $}
SEG2106 - Hussein Al Osman - Winter 2014 341
Grammaire
341
1) FOLLOW(S){$}
2) Si A αB: FOLLOW(B) FOLLOW(A)
3) Si AαBC, et la règle Cε N’EXISTE PAS:FOLLOW(B)FIRST(C)
4) Si AαBC, et la règle Cε EXISTE:FOLLOW(B)[FIRST(C)- ε] υ FOLLOW(A)
“Règles” de FOLLOW
![Page 342: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/342.jpg)
FIRST ET FOLLOW
Résumé:
En utilisant ces ensembles, on construit un tableau syntaxique
• Ce tableau syntaxique est nécessaire pour effectuer l’analyse syntaxique LL(1)
SEG2106 - Hussein Al Osman - Winter 2014 342
FIRST(expr)= {num, id}FIRST(expr’)= {+, -, ε}FIRST(term)= {num, id}FIRST(term’)= {*, /, ε}FIRST(factor)= {num, id}
FOLLOW(expr)={$}FOLLOW(expr’)={$}FOLLOW(term)= {+, -, $}FOLLOW(term’)= {+, -, $}FOLLOW(factor)= {*, /, +, -, $}
![Page 343: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/343.jpg)
TABLEAU SYNTAXIQUE
SEG2106 - Hussein Al Osman - Winter 2014 343
FIRST(expr)= {num, id}FIRST(expr’)= {+, -, ε}FIRST(term)= {num, id}FIRST(term’)= {*, /, ε}FIRST(factor)= {num, id}
FOLLOW(expr)={$}FOLLOW(expr’)={$}FOLLOW(term)= {+, -, $}FOLLOW(term’)= {+, -, $}FOLLOW(factor)= {*, /, +, -, $}
num id + - * / $
expr
expr’
term
term’
factor
GrammarFIRST Sets FOLLOW Sets
On ajoute deux données associées avec num et id
![Page 344: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/344.jpg)
TABLEAU SYNTAXIQUE
SEG2106 - Hussein Al Osman - Winter 2014 344
FIRST(expr)= {num, id}FIRST(expr’)= {+, -, ε}FIRST(term)= {num, id}FIRST(term’)= {*, /, ε}FIRST(factor)= {num, id}
FOLLOW(expr)={$}FOLLOW(expr’)={$}FOLLOW(term)= {+, -, $}FOLLOW(term’)= {+, -, $}FOLLOW(factor)= {*, /, +, -, $}
num id + - * / $
expr <expr><term><expr’>
<expr><term><expr’>
expr’
term
term’
factor
GrammarFIRST Sets FOLLOW Sets
On ajoute deux entrées associées avec num et id
![Page 345: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/345.jpg)
TABLEAU SYNTAXIQUE
SEG2106 - Hussein Al Osman - Winter 2014 345
FIRST(expr)= {num, id}FIRST(expr’)= {+, -, ε}FIRST(term)= {num, id}FIRST(term’)= {*, /, ε}FIRST(factor)= {num, id}
FOLLOW(expr)={$}FOLLOW(expr’)={$}FOLLOW(term)= {+, -, $}FOLLOW(term’)= {+, -, $}FOLLOW(factor)= {*, /, +, -, $}
num id + - * / $
expr <expr><term><expr’>
<expr><term><expr’>
expr’
term
term’
factor
GrammarFIRST Sets FOLLOW Sets
Remplir le expr’ de la même façon
![Page 346: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/346.jpg)
TABLEAU SYNTAXIQUE
SEG2106 - Hussein Al Osman - Winter 2014 346
FIRST(expr)= {num, id}FIRST(expr’)= {+, -, ε}FIRST(term)= {num, id}FIRST(term’)= {*, /, ε}FIRST(factor)= {num, id}
FOLLOW(expr)={$}FOLLOW(expr’)={$}FOLLOW(term)= {+, -, $}FOLLOW(term’)= {+, -, $}FOLLOW(factor)= {*, /, +, -, $}
num id + - * / $
expr <expr><term><expr’>
<expr><term><expr’>
expr’ <expr’>+<expr>
<expr’>-<expr>
term
term’
factor
GrammarFIRST Sets FOLLOW Sets
Remplir le expr’ de la même façon
![Page 347: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/347.jpg)
TABLEAU SYNTAXIQUE
SEG2106 - Hussein Al Osman - Winter 2014 347
FIRST(expr)= {num, id}FIRST(expr’)= {+, -, ε}FIRST(term)= {num, id}FIRST(term’)= {*, /, ε}FIRST(factor)= {num, id}
FOLLOW(expr)={$}FOLLOW(expr’)={$}FOLLOW(term)= {+, -, $}FOLLOW(term’)= {+, -, $}FOLLOW(factor)= {*, /, +, -, $}
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
expr’ <expr’>+<expr>
<expr’>-<expr>
term
term’
factor
GrammarFIRST Sets FOLLOW Sets
Qu’en est-il de epsilon? On utilise l’ensemble FOLLOW pour ajouter une règle epsilon…
![Page 348: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/348.jpg)
TABLEAU SYNTAXIQUE
SEG2106 - Hussein Al Osman - Winter 2014 348
FIRST(expr)= {num, id}FIRST(expr’)= {+, -, ε}FIRST(term)= {num, id}FIRST(term’)= {*, /, ε}FIRST(factor)= {num, id}
FOLLOW(expr)={$}FOLLOW(expr’)={$}FOLLOW(term)= {+, -, $}FOLLOW(term’)= {+, -, $}FOLLOW(factor)= {*, /, +, -, $}
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
expr’ <expr’>+<expr>
<expr’>-<expr>
<expr’>ε
term
term’
factor
GrammarFIRST Sets FOLLOW Sets
Qu’en est-il de epsilon? On utilise l’ensemble FOLLOW pour ajouter une règle epsilon…
![Page 349: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/349.jpg)
TABLEAU SYNTAXIQUE
SEG2106 - Hussein Al Osman - Winter 2014 349
FIRST(expr)= {num, id}FIRST(expr’)= {+, -, ε}FIRST(term)= {num, id}FIRST(term’)= {*, /, ε}FIRST(factor)= {num, id}
FOLLOW(expr)={$}FOLLOW(expr’)={$}FOLLOW(term)= {+, -, $}FOLLOW(term’)= {+, -, $}FOLLOW(factor)= {*, /, +, -, $}
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
expr’ <expr’>+<expr>
<expr’>-<expr>
<expr’>ε
term
term’
factor
GrammarFIRST Sets FOLLOW Sets
Pas d’epsilon, on utilise l’ensemble FIRST
![Page 350: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/350.jpg)
TABLEAU SYNTAXIQUE
SEG2106 - Hussein Al Osman - Winter 2014 350
FIRST(expr)= {num, id}FIRST(expr’)= {+, -, ε}FIRST(term)= {num, id}FIRST(term’)= {*, /, ε}FIRST(factor)= {num, id}
FOLLOW(expr)={$}FOLLOW(expr’)={$}FOLLOW(term)= {+, -, $}FOLLOW(term’)= {+, -, $}FOLLOW(factor)= {*, /, +, -, $}
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
expr’ <expr’>+<expr>
<expr’>-<expr>
<expr’>ε
term <term><factor><term’>
<term><factor><term’
>
term’
factor
GrammarFIRST Sets FOLLOW Sets
Pas d’epsilon, on utilise l’ensemble FIRST
![Page 351: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/351.jpg)
TABLEAU SYNTAXIQUE
SEG2106 - Hussein Al Osman - Winter 2014 351
FIRST(expr)= {num, id}FIRST(expr’)= {+, -, ε}FIRST(term)= {num, id}FIRST(term’)= {*, /, ε}FIRST(factor)= {num, id}
FOLLOW(expr)={$}FOLLOW(expr’)={$}FOLLOW(term)= {+, -, $}FOLLOW(term’)= {+, -, $}FOLLOW(factor)= {*, /, +, -, $}
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
expr’ <expr’>+<expr>
<expr’>-<expr>
<expr’>ε
term <term><factor><term’>
<term><factor><term’
>
term’
factor
GrammarFIRST Sets FOLLOW Sets
Celle-ci possède un epsilon, on utilise les ensembles FIRST et FOLLOW
![Page 352: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/352.jpg)
TABLEAU SYNTAXIQUE
SEG2106 - Hussein Al Osman - Winter 2014 352
FIRST(expr)= {num, id}FIRST(expr’)= {+, -, ε}FIRST(term)= {num, id}FIRST(term’)= {*, /, ε}FIRST(factor)= {num, id}
FOLLOW(expr)={$}FOLLOW(expr’)={$}FOLLOW(term)= {+, -, $}FOLLOW(term’)= {+, -, $}FOLLOW(factor)= {*, /, +, -, $}
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
expr’ <expr’>+<expr>
<expr’>-<expr>
<expr’>ε
term <term><factor><term’>
<term><factor><term’
>
term’ <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor
GrammarFIRST Sets FOLLOW Sets
Celle-ci possède un epsilon, on utilise les ensembles FIRST et FOLLOW
![Page 353: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/353.jpg)
TABLEAU SYNTAXIQUE
SEG2106 - Hussein Al Osman - Winter 2014 353
FIRST(expr)= {num, id}FIRST(expr’)= {+, -, ε}FIRST(term)= {num, id}FIRST(term’)= {*, /, ε}FIRST(factor)= {num, id}
FOLLOW(expr)={$}FOLLOW(expr’)={$}FOLLOW(term)= {+, -, $}FOLLOW(term’)= {+, -, $}FOLLOW(factor)= {*, /, +, -, $}
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
expr’ <expr’>+<expr>
<expr’>-<expr>
<expr’>ε
term <term><factor><term’>
<term><factor><term’
>
term’ <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor
GrammarFIRST Sets FOLLOW Sets
Remplir la rangée pour factor…
![Page 354: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/354.jpg)
TABLEAU SYNTAXIQUE
SEG2106 - Hussein Al Osman - Winter 2014 354
FIRST(expr)= {num, id}FIRST(expr’)= {+, -, ε}FIRST(term)= {num, id}FIRST(term’)= {*, /, ε}FIRST(factor)= {num, id}
FOLLOW(expr)={$}FOLLOW(expr’)={$}FOLLOW(term)= {+, -, $}FOLLOW(term’)= {+, -, $}FOLLOW(factor)= {*, /, +, -, $}
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
expr’ <expr’>+<expr>
<expr’>-<expr>
<expr’>ε
term <term><factor><term’>
<term><factor><term’
>
term’ <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id
GrammarFIRST Sets FOLLOW Sets
Remplir la rangée pour factor…
![Page 355: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/355.jpg)
TABLEAU SYNTAXIQUE
SEG2106 - Hussein Al Osman - Winter 2014 355
FIRST(expr)= {num, id}FIRST(expr’)= {+, -, ε}FIRST(term)= {num, id}FIRST(term’)= {*, /, ε}FIRST(factor)= {num, id}
FOLLOW(expr)={$}FOLLOW(expr’)={$}FOLLOW(term)= {+, -, $}FOLLOW(term’)= {+, -, $}FOLLOW(factor)= {*, /, +, -, $}
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
expr’ <expr’>+<expr>
<expr’>-<expr>
<expr’>ε
term <term><factor><term’>
<term><factor><term’
>
term’ <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id
GrammarFIRST Sets FOLLOW Sets
On ajoute des tirets aux cellules restantes pour indiquer: aucun entrées
![Page 356: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/356.jpg)
TABLEAU SYNTAXIQUE
SEG2106 - Hussein Al Osman - Winter 2014 356
FIRST(expr)= {num, id}FIRST(expr’)= {+, -, ε}FIRST(term)= {num, id}FIRST(term’)= {*, /, ε}FIRST(factor)= {num, id}
FOLLOW(expr)={$}FOLLOW(expr’)={$}FOLLOW(term)= {+, -, $}FOLLOW(term’)= {+, -, $}FOLLOW(factor)= {*, /, +, -, $}
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’
>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
GrammarFIRST Sets FOLLOW Sets
![Page 357: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/357.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Afin d’implémenter un analyseur syntaxique LL(1), on doit utiliser les structures de données suivantes:
• Tableau syntaxique (peut être implémenté avec un tableau 2D ou autres structures plus sophistiquées)
• Pile (qui contiendra les dérivations)• Liste (qui contiendra le flux de token de donnée)
SEG2106 - Hussein Al Osman - Winter 2014 357
![Page 358: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/358.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:id - num * id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
$
Liste de flux des tokens
Pile de dérivations
Table Syntaxique
![Page 359: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/359.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:id - num * id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
Commencez en poussant le symbole de départ (but) dans la pile
$
![Page 360: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/360.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:id - num * id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
Commencez en poussant le symbole de départ (but) dans la pile
$
expr
![Page 361: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/361.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:id - num * id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
Sur la tête du flux de données, on a idSur le sommet de la pile, on a exprEn utilisant le tableau syntaxique, on établit la règle: <expr><term><expr’>
$
expr
![Page 362: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/362.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:id - num * id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
DÉPILE expr et PILE term et expr’
$
expr
![Page 363: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/363.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:id - num * id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
Sur la tête du flux de données, on a idSur le sommet de la pile, on a termEn utilisant le tableau syntaxique, on établit la règle: <term><factor><term’>
$
expr’
term
![Page 364: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/364.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:id - num * id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
DÉPILE term et PILE factor et term’
$
expr’
term
![Page 365: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/365.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:id - num * id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
$
expr’
term’
factor
Sur la tête du flus de données, on a idSur le sommet de la pile, on a factorEn utilisant le tableau syntaxique, on établit la règle: <factor>id
![Page 366: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/366.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:id - num * id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
$
expr’
term’
id
Lorsqu’on a un terminal sur le sommet de la pile, on vérifie s’il matche la tête de la listeSinon le syntaxe ne suit pas la grammaireSi oui, ENLEVER la tête de la liste et DÉPILER
![Page 367: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/367.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:- num * id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
$
expr’
term’
Lorsqu’on a un terminal sur le sommet de la pile, on vérifie s’il matche la tête de la listeSinon le syntaxe ne suit pas la grammaireSi oui, ENLEVER la tête de la liste et DÉPILER
![Page 368: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/368.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:- num * id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
$
expr’
term’
Sur la tête du flux de données, on a -Sur le sommet de la pile, on a term’En utilisant le tableau syntaxique, on établit la règle: <term’>εAlors, il faut tout simplement dépiler
![Page 369: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/369.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:- num * id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
$
expr’
Et on continue de la même façon…
![Page 370: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/370.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:- num * id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
$
expr
-
Et on continue de la même façon…
![Page 371: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/371.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:num * id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
$
expr
Et on continue de la même façon…
![Page 372: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/372.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:num * id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
$
expr’
term
Et on continue de la même façon…
![Page 373: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/373.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:num * id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
$
expr’
term’
factor
Et on continue de la même façon…
![Page 374: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/374.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:num * id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
$
expr’
term’
num
Et on continue de la même façon…
![Page 375: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/375.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:* id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
$
expr’
term’
Et on continue de la même façon…
![Page 376: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/376.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:* id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
$
expr’
term
*
Et on continue de la même façon…
![Page 377: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/377.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
$
expr’
term
Et on continue de la même façon…
![Page 378: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/378.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
$
expr’
term’
factor
Et on continue de la même façon…
![Page 379: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/379.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
$
expr’
term’
id
Et on continue de la même façon…
![Page 380: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/380.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:$
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
$
expr’
term’
Et on continue de la même façon…
![Page 381: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/381.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:$
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
$
expr’
Et on continue de la même façon…
![Page 382: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/382.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:$
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
$
On a vérifié que la chaîne de données est une phrase de la grammaire!!
![Page 383: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/383.jpg)
SECTION 12
ENCORE SUR L’ANALYSE SYNTAXIQUE LL
SEG2106 – Winter 2014 – Hussein Al Osman 383
![Page 384: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/384.jpg)
SUJETS
Grammaire Non LL(1)
Recouvrement d’erreur
Analyseur LL(k)
SEG2106 – Winter 2014 – Hussein Al Osman 384
![Page 385: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/385.jpg)
GRAMMAIRE NON LL(1)Considérez la grammaire:
<stmt> ::= if <expr> then <stmt>
| if <expr> then <stmt> else <stmt>
On a besoin de factorisation gauche, ce qui donne:
<stmt> ::= if <expr> then <stmt><stmt’>
<stmt’> ::= else <stmt> | ε
Cherchons les ensembles FIRST et FOLLOW
FIRST(stmt) = {if} FIRST(stmt’)={else, ε}
FOLLOW(stmt) = {$, else} FOLLOW(stmt’)={$, else}
SEG2106 – Winter 2014 – Hussein Al Osman 385
Note: Ceci est une grammaire partielle (utilisée pour démontrer un concept), c’est la raison pour laquelle on n’a pas spécifié les règles de production associée avec expr. Conséquemment, ses
ensembles FIRST et FOLLOW ne seront pas calculés.
![Page 386: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/386.jpg)
GRAMMAIRE NON LL(1)
SEG2106 – Winter 2014 – Hussein Al Osman 386
if then else $
stmt
stmt’
FOLLOW(stmt) = {$, else} FOLLOW(stmt’)={$, else}…
FIRST(stmt) = {if}FIRST(stmt’)={else, ε}…
<stmt> ::= if <expr> then <stmt><stmt’>
<stmt’> ::= else <stmt> | ε
![Page 387: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/387.jpg)
GRAMMAIRE NON LL(1)
SEG2106 – Winter 2014 – Hussein Al Osman 387
if then else $
stmt <stmt>if <expr> then <stmt><stmt’>
- - -
stmt’
FOLLOW(stmt) = {$, else} FOLLOW(stmt’)={$, else}…
FIRST(stmt) = {if}FIRST(stmt’)={else, ε}…
<stmt> ::= if <expr> then <stmt><stmt’>
<stmt’> ::= else <stmt> | ε
![Page 388: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/388.jpg)
GRAMMAIRE NON LL(1)
SEG2106 – Winter 2014 – Hussein Al Osman 388
if then else $
stmt <stmt>if <expr> then <stmt><stmt’>
- - -
stmt’ <stmt’>else <stmt>
FOLLOW(stmt) = {$, else} FOLLOW(stmt’)={$, else}…
FIRST(stmt) = {if}FIRST(stmt’)={else, ε}…
<stmt> ::= if <expr> then <stmt><stmt’>
<stmt’> ::= else <stmt> | ε
![Page 389: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/389.jpg)
GRAMMAIRE NON LL(1)
SEG2106 – Winter 2014 – Hussein Al Osman 389
if then else $
stmt <stmt>if <expr> then <stmt><stmt’>
- - -
stmt’ <stmt’>else <stmt>
<stmt’> ε
FOLLOW(stmt) = {$, else} FOLLOW(stmt’)={$, else}…
FIRST(stmt) = {if}FIRST(stmt’)={else, ε}…
<stmt> ::= if <expr> then <stmt><stmt’>
<stmt’> ::= else <stmt> | ε
![Page 390: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/390.jpg)
GRAMMAIRE NON LL(1)
SEG2106 – Winter 2014 – Hussein Al Osman 390
if then else $
stmt <stmt>if <expr> then <stmt><stmt’>
- - -
stmt’ - - <stmt’>else <stmt>,
<stmt’> ε
<stmt’> ε
FOLLOW(stmt) = {$, else} FOLLOW(stmt’)={$, else}…
FIRST(stmt) = {if}FIRST(stmt’)={else, ε}…
<stmt> ::= if <expr> then <stmt><stmt’>
<stmt’> ::= else <stmt> | ε
![Page 391: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/391.jpg)
GRAMMAIRE NON LL(1)
On envisage un problème parce que, pour un token d’entrée else et un sommet de pile de stmt, on ne sait pas quelle production choisir:
• <stmt’>else <stmt>• <stmt’>ε
Conséquemment, ceci n’est pas une grammaire LL(1)
SEG2106 – Winter 2014 – Hussein Al Osman 391
if then else $
stmt <stmt>if <expr> then <stmt><stmt’>
- - -
stmt’ - - <stmt’>else <stmt>,
<stmt’> ε
<stmt’> ε
![Page 392: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/392.jpg)
RECOUVREMENT D’ERREUR LL(1)
Qu’est-ce qui arrive lorsque l’analyseur syntaxique découvre une erreur?
• Approche 1: arrêter toute activité d’analyse syntaxique et afficher un message d’erreur
• Approche 2: essayer de continuer l’analyse syntaxique (si possible) et vérifier s’il y a plus d’erreurs le long du chemin
Quelle approche votre compilateur choisit-il?
SEG2106 – Winter 2014 – Hussein Al Osman 392
Jamais!
![Page 393: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/393.jpg)
RECOUVREMENT D’ERREUR LL(1)
Une erreur est détectée lorsque:
• Le terminal au sommet de la pile ne matche pas le prochain symbole d’entrée
• La cellule du tableau d’analyse syntaxique de laquelle on est supposé tirer la prochaine production est vide
Que fait l’analyseur syntaxique?
• Il rentre dans le mode de panique du recouvrement d’erreur• Basé sur l’idée de sauter des symboles sur l’entrée jusqu’à
ce qu’un token dans l’ensemble SYNCH est trouvé
SEG2106 – Winter 2014 – Hussein Al Osman 393
![Page 394: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/394.jpg)
RECOUVREMENT D’ERREUR LL(1)
Soit S un ensemble de tokens appelé ensemble de synchronisation (SYNCH)
Soit s S ∊ s est appelé un token de synchronisation
Question à un million de dollars: comment construire l’ensemble de synchronisation?
• Plusieurs heuristiques ont été proposés• On couvrira une méthode simple
Placez tous les symboles de FOLLOW(A) dans l’ensemble SYNCH pour le non-terminal A
• Si on saute des tokens jusqu’à ce qu’un élément de FOLLOW(A) est détecté et on pop A de la pile, c’est probable que l’analyse syntaxique continue.
SEG2106 – Winter 2014 – Hussein Al Osman 394
![Page 395: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/395.jpg)
RECOUVREMENT D’ERREUR LL(1)
Le mode de panique du recouvrement d’erreur peut être implémenté en utilisant l’ensemble de SYNCH comme suit:
1. S’il y a un non-terminal au sommet de la pile, jeter les tokens d’entrée jusqu’à ce que vous trouvez un token qui appartient à l’ensemble SYNCH, ensuite dépilez le non-terminal
2. S’il y a un terminal au sommet de la pile, on peut essayer de le dépiler afin de déterminer si on peut continuer
• Assumez que la chaîne d’entrée manque ce terminal
SEG2106 – Winter 2014 – Hussein Al Osman 395
![Page 396: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/396.jpg)
RECOUVREMENT D’ERREUR LL(1) - EXEMPLE
SEG2106 – Winter 2014 – Hussein Al Osman 396SEG2106 - Hussein Al Osman - Winter 2014 396
FIRST(expr)= {num, id}FIRST(expr’)= {+, -, ε}FIRST(term)= {num, id}FIRST(term’)= {*, /, ε}FIRST(factor)= {num, id}
FOLLOW(expr)={$}FOLLOW(expr’)={$}FOLLOW(term)= {+, -, $}FOLLOW(term’)= {+, -, $}FOLLOW(factor)= {*, /, +, -, $}
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - -
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε
term <term><factor><term’>
<term><factor><term’
>
- - - - -
term’ - - <term’>ε
<term’>ε
<term’>*<term>
<term’>/<term>
<term’>ε
factor factor num factor id - - - - -
GrammarFIRST Sets FOLLOW Sets
![Page 397: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/397.jpg)
RECOUVREMENT D’ERREUR LL(1) - EXEMPLE
SEG2106 – Winter 2014 – Hussein Al Osman 397SEG2106 - Hussein Al Osman - Winter 2014 397
FIRST(expr)= {num, id}FIRST(expr’)= {+, -, ε}FIRST(term)= {num, id}FIRST(term’)= {*, /, ε}FIRST(factor)= {num, id}
FOLLOW(expr)={$}FOLLOW(expr’)={$}FOLLOW(term)= {+, -, $}FOLLOW(term’)= {+, -, $}FOLLOW(factor)= {*, /, +, -, $}
GrammarFIRST Sets FOLLOW Sets
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’
>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 398: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/398.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:id * / / + num
$
expr
+ id $
Chaînes d’erreurs
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 399: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/399.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:id * / / + num
$
expr’
term
+ id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 400: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/400.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:id * / / + num
$
expr’
term'
factor
+ id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 401: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/401.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:id * / / + num
$
expr’
term'
id
+ id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 402: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/402.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:* / / + num
$
expr’
term'
+ id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 403: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/403.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:* / / + num
$
expr’
term
*
+ id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 404: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/404.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:/ / + num
$
expr’
term
+ id $
Erreur: la cellule correspondant à la rangée term et la colonne / est vide!Commencez à jeter les tokens, jusqu’à ce que vous trouvez un token synch num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 405: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/405.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:/ + num
$
expr’
term
+ id $
Erreur: la cellule correspondant à la rangée term et la colonne / est vide!Commencez à jeter les tokens, jusqu’à ce que vous trouvez un token synch num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 406: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/406.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:+ num
$
expr’
term
+ id $
Erreur: la cellule correspondant à la rangée term et la colonne / est vide!Commencez à jeter les tokens, jusqu’à ce que vous trouvez un token synch num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 407: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/407.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:+ num
$
expr’
term
+ id $
On a trouvé un token synch!
Dépilez term de la pile et essayez de continuer…
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 408: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/408.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:+ num
$
expr’
+ id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 409: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/409.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:+ num
$
expr
+
+ id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 410: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/410.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:num
$
expr
+ id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 411: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/411.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:num
$
expr'
term
+ id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 412: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/412.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:num
$
expr'
term'
factor
+ id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 413: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/413.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:num
$
expr'
term’
num
+ id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 414: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/414.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:
$
expr'
term’
+ id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 415: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/415.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:
$
expr'
+ id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 416: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/416.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:
$
expr
+
+ id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 417: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/417.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:
$
expr
id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 418: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/418.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:
$
expr'
term
id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 419: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/419.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:
$
expr'
term'
factor
id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 420: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/420.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:
$
expr'
term'
id
id $
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 421: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/421.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:
$
expr'
term'
$
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 422: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/422.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:
$
expr'
$
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 423: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/423.jpg)
ANALYSE SYNTAXIQUE UTILISANT LL(1)
Exemple:
$
$
On a fait notre mieux pour continuer l’analyse syntaxique
num id + - * / $
expr <expr><term><expr'>
<expr><term><expr'>
- - - - (s)
expr’ - - <expr’>+<expr>
<expr’>-<expr>
- - <expr’>ε (s)
term <term><factor><term’>
<term><factor><term’>
(s) (s) - - (s)
term’ - - <term’>ε (s)
<term’>ε (s)
<term’>*<term>
<term’>/<term>
<term’>ε (s)
factor factor num factor id (s) (s) (s) (s) (s)
![Page 424: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/424.jpg)
ANALYSEURS SYNTAXIQUES LL(K)
On a déjà étudier l’analyseur syntaxique LL(1)
• Avec 1 token d’avance
On va brièvement parler des analyseurs syntaxiques LL(k)
• Avec “k” tokens d’avance• Ceci est utile puisque pas toutes les grammaires sont
compatibles avec LL(1)
SEG2106 – Winter 2014 – Hussein Al Osman 424
![Page 425: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/425.jpg)
ANALYSEURS SYNTAXIQUES LL(K)
Considérez la grammaire suivante:
<Z> ::= <X><Y><Z>| a | ac
<Y> ::= c | ε
<X> ::= a | b<Y>c
Les ensembles First et Follow:
FIRST(Z)={a,b} FOLLOW(Z)={$}
FIRST(Y)={c, ε} FOLLOW(Y)={a,b,c}
FIRST(X)={a,b} FOLLOW(X)={a,b,c}
SEG2106 – Winter 2014 – Hussein Al Osman 425
![Page 426: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/426.jpg)
ANALYSEURS SYNTAXIQUES LL(K)
<Z> ::= <X><Y><Z>| a | ac
<Y> ::= c | ε
<X> ::= a | b<Y>c
SEG2106 – Winter 2014 – Hussein Al Osman 426
GrammaireFIRST(Z)={a,b}
FIRST(Y)={c, ε}
FIRST(X)={a,b}
FOLLOW(Z)={$}
FOLLOW(Y)={a,b,c}
FOLLOW(X)={a,b,c}
FIRST FOLLOW
a b c $
X
Y
Z
![Page 427: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/427.jpg)
ANALYSEURS SYNTAXIQUES LL(K)
<Z> ::= <X><Y><Z>| a | ac
<Y> ::= c | ε
<X> ::= a | b<Y>c
SEG2106 – Winter 2014 – Hussein Al Osman 427
GrammaireFIRST(Z)={a,b}
FIRST(Y)={c, ε}
FIRST(X)={a,b}
FOLLOW(Z)={$}
FOLLOW(Y)={a,b,c}
FOLLOW(X)={a,b,c}
FIRST FOLLOW
a b c $
X Xa XbYc - -
Y
Z
![Page 428: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/428.jpg)
ANALYSEURS SYNTAXIQUES LL(K)
<Z> ::= <X><Y><Z>| a | ac
<Y> ::= c | ε
<X> ::= a | b<Y>c
SEG2106 – Winter 2014 – Hussein Al Osman 428
GrammaireFIRST(Z)={a,b}
FIRST(Y)={c, ε}
FIRST(X)={a,b}
FOLLOW(Z)={$}
FOLLOW(Y)={a,b,c}
FOLLOW(X)={a,b,c}
FIRST FOLLOW
a b c $
X Xa XbYc - -
Y Yε Yε Yc,Yε
-
Z
![Page 429: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/429.jpg)
ANALYSEURS SYNTAXIQUES LL(K)
<Z> ::= <X><Y><Z>| a | ab
<Y> ::= c | ε
<X> ::= a | b<Y>c
SEG2106 – Winter 2014 – Hussein Al Osman 429
GrammaireFIRST(Z)={a,b}
FIRST(Y)={c, ε}
FIRST(X)={a,b}
FOLLOW(Z)={$}
FOLLOW(Y)={a,b,c}
FOLLOW(X)={a,b,c}
FIRST FOLLOW
a b c $
X Xa XbYc - -
Y Yε Yε Yc,Yε
-
Z ZaZab
ZXYZ - -
N’est une grammaire LL(1)
![Page 430: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/430.jpg)
ANALYSEURS SYNTAXIQUES LL(K)
On a démontré que la grammaire ci-dessus n’est pas LL(1)
Peut-être qu’elle est une grammaire LL(2)
• Récréez les ensembles FIRST(α) en considérant un maximum de DEUX terminaux qui apparaissent en premier dans une chaîne dérivée de α
• Récréez les ensembles FOLLOW (α) en considérant un maximum de DEUX terminaux qui apparaissent après α dans une forme propositionnelle
SEG2106 – Winter 2014 – Hussein Al Osman 430
<Z> ::= <X><Y><Z>| a | ac
<Y> ::= c | ε
<X> ::= a | b<Y>c
Grammaire
![Page 431: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/431.jpg)
SECTION 13
ANALYSE SYNTAXIQUE LR
SEG2106 – Winter 2014 – Hussein Al Osman 431
![Page 432: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/432.jpg)
SUJETS
Analyse Syntaxique Ascendante
Dérivation à Droite
Opérations Décalage et Réduction
Analyseurs Syntaxiques LR
SEG2106 – Winter 2014 – Hussein Al Osman 432
![Page 433: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/433.jpg)
ANALYSE SYNTAXIQUE DESCENDANTE
Jusqu’à maintenant, nous avons étudié l’analyse syntaxique descendante en détails
Cependant, nous n’avons pas encore vu l’analyse syntaxique descendante avec dérivation à droite
• Nous avons exclusivement travaillé avec la dérivation à gauche
• Nous éliminons toujours les non-terminaux dans l’arbre syntaxique de gauche à droite
SEG2106 – Winter 2014 – Hussein Al Osman 433
![Page 434: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/434.jpg)
DÉRIVATION À DROITE
<expr> <term><expr’>
<term>+<expr>
<term>+<term><expr’>
<term>+<term>
<term>+<factor><term’>
<term>+<factor>
<term>+id
<factor><term’>+id
<factor>+id
id+id
SEG2106 – Winter 2014 – Hussein Al Osman 434
Grammaire
Chaîne de donnée:id+id
Dérivation
![Page 435: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/435.jpg)
ANALYSE SYNTAXIQUE ASCENDANTE
Un analyseur syntaxique ascendant construit un arbre syntaxique commençant par la chaîne de données
• La chaîne de donnée constituera les feuilles de l’arbre
Un nœud parent A peut être ajouté à l’arbre si:
• Il existe plusieurs nœuds voisins « sans parents » (n1, n2, … nn) pour lesquels il existe une production:
<A> ::= n1n2 … nn
• A est ajouté comme étant le parent des noeuds n1, n2, … nn
Cette action est appelée RÉDUCTIONSEG2106 – Winter 2014 – Hussein Al Osman 435
![Page 436: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/436.jpg)
ANALYSE SYNTAXIQUE ASCENDANTE
Exemple:
Soit la grammaire:
<A> ::= a<B>
<B> ::= b | cd<B>
Et la chaîne de donnée:
acdcdb
SEG2106 – Winter 2014 – Hussein Al Osman 436
On peut construire l’arbre syntaxique comme suit:
a c d c d b
B
B
B
AOn a atteint le
symbole de départ!
![Page 437: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/437.jpg)
ANALYSEUR SYNTAXIQUE LR
L’analyseur syntaxique LR est un analyseur syntaxique ascendant
Il fournit une mécanisme pour construire un arbre syntaxique par incréments, sans reculer
Avantages de l’analyse syntaxique LR (contre l’analyse syntaxique LL):
• Pas besoin d’éliminer la récursivité gauche• Pas besoin de factorisation gauche
L’exemple précédent de l’analyseur syntaxique ascendant manque cette qualité prédictive
• Voir l’exemple sur la diapo suivante…
SEG2106 – Winter 2014 – Hussein Al Osman 437
![Page 438: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/438.jpg)
ANALYSEUR SYNTAXIQUE ASCENDANT NON PRÉDICTIF
SEG2106 – Winter 2014 – Hussein Al Osman 438
Exemple:
Soit la grammaire:
<A> ::= a<B> | acd
<B> ::= b | cd<B>
Et la même chaîne de donnée:
acdcdb
On peut construire l’arbre syntaxique comme suit:
a c d c d b
A
On a atteint le symbole de départ trop tôt!
On n’a pas effectuer le restant de la chaîne…
![Page 439: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/439.jpg)
DE RETOUR AUX ANALYSEURS SYNTAXIQUES LR
Les analyseurs syntaxiques LR comptent sur deux actions principales qu’ils effectuent durant l’analyse syntaxique:
• Décalage: avance la chaîne de donnée par un seul symbole• Réduction: on a déjà discuté de cette action précédemment
(prendre un groupe de symboles et les réduire en un non-terminal)
Si la chaîne de donnée ne contient pas d’erreurs (est une phrase de la grammaire):
• L’analyseur syntaxique continue à effectuer ces actions jusqu’à ce que toute la donnée soit consommée
• A ce point, l’arbre syntaxique est complété, et le symbole de départ se trouve dans sa racine
SEG2106 – Winter 2014 – Hussein Al Osman 439
![Page 440: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/440.jpg)
ANALYSEURS SYNTAXIQUES LR
Les analyseurs syntaxiques LR DOIVENT savoir quand décaler et quand réduire…
• Cette qualité les rend prédictifs• Les empêche de reculer (évite de deviner)
Les analyseurs syntaxiques LR regardent souvent à l’avant (à droite) vers le symbole scanné suivant, avant de décider quoi faire avec les symboles scannés précédents
SEG2106 – Winter 2014 – Hussein Al Osman 440
![Page 441: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/441.jpg)
DÉCALAGE ET RÉDUCTION
Les analyseurs syntaxiques LR séparent la forme propositionnelle en deux parties:
• La partie analysée: séquence de terminaux et non-terminaux
• La partie non-analysée: séquence de terminaux
Par exemple, pour la forme propositionnelle suivante:
a A b c d
SEG2106 – Winter 2014 – Hussein Al Osman 441
Partie analysée
Partie non-analysée
marqueur
![Page 442: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/442.jpg)
DÉCALAGE ET RÉDUCTION
Alors, on définit l’opération:
• Décalage: on bouge le marqueur vers la droite
a A b c d
• Réduction: on remplace une chaîne qui se trouve dans la portion droite de la partie analysée par son équivalent non-terminal
Supposez qu’on a une production:
<Z> ::= <A>bc
SEG2106 – Winter 2014 – Hussein Al Osman 442
a A b c d a Z d
![Page 443: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/443.jpg)
UTILISER LE DÉCALAGE ET LA RÉDUCTION
Soit la grammaire suivante:
<E> ::= <T> + <E> | <T>
<T> ::= id*<T> | id | ( <E> )
En utilisant les opérations décalage et réduction, analysez la chaîne de donnée suivante:
id*id+id
SEG2106 – Winter 2014 – Hussein Al Osman 443
![Page 444: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/444.jpg)
UTILISER LE DÉCALAGE ET LA RÉDUCTION
Grammaire
<E> ::= <T> + <E> | <T>
<T> ::= id*<T> | id | ( <E> )
SEG2106 – Winter 2014 – Hussein Al Osman 444
Sentential Form Action
id * id + id Shift
id * id + id Shift
id * id + id Shift
id * id + id Reduce using Tid
id * T + id Reduce using Tid*T
T + id Shift
T + id Shift
T + id Reduce using Tid
T + T Reduce using ET
T + E Reduce using ET+E
E
![Page 445: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/445.jpg)
UTILISER LE DÉCALAGE ET LA RÉDUCTION INCORRECTEMENT
Grammaire
<E> ::= <T> + <E> | <T>
<T> ::= id*<T> | id | ( <E> )
SEG2106 – Winter 2014 – Hussein Al Osman 445
Sentential Form Action
id * id + id Shift
id * id + id Reduce using Tid
T * id + id Shift
T * id + id Shift
T * id + id Reduce using Tid
T * T + id Reduce TE
T * E + id Shift
T * E + id Shift
T * E + id Reduce using Tid
T * E + T We are stuck!
Une seule mauvaise opération et c’est finit…
![Page 446: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/446.jpg)
ANALYSEUR SYNTAXIQUE LR
Nous savons maintenant comment décaler et réduire!
Mais nous ne savons pas quand décaler et quand réduire
• Lorsque nous savons ceci, nous atteignons notre but de ne jamais reculer
SEG2106 – Winter 2014 – Hussein Al Osman 446
![Page 447: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/447.jpg)
« HANDLE »
On réduit si le portion droite de la partie analysée est un « handle » valide
• Sinon, on décale
Propriétés du « handle »:
1. Doit matcher le côté droit d’une production
2. Nous permet éventuellement d’atteindre le symbole de départ
Réduire le « handle » doit constituer une étape dans le sens inverse d’une dérivation droite descendante
SEG2106 – Winter 2014 – Hussein Al Osman 447
![Page 448: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/448.jpg)
« HANDLE »
SEG2106 – Winter 2014 – Hussein Al Osman 448
<E> <T>+<E>
<T>+<T>
<T>+id
id*<T>+id
id*id+id
<E> ::= <T> + <E>
| <T>
<T> ::= id*<T>
| id
| ( <E> )
GrammaireDérivation
Chaîne de donnée:id*id+id
![Page 449: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/449.jpg)
DÉCALAGE, RÉDUCTION ET « HANDLE »
Grammaire
<E> ::= <T> + <E> | <T>
<T> ::= id*<T> | id | ( <E> )
SEG2106 – Winter 2014 – Hussein Al Osman 449
Sentential Form Action
id * id + id Shift
id * id + id Shift
id * id + id Shift
id * id + id Reduce using Tid
id * T + id Reduce using Tid*T
T + id Shift
T + id Shift
T + id Reduce using Tid
T + T Reduce using ET
T + E Reduce using ET+E
E
<E> <T>+<E>
<T>+<T>
<T>+id
id*<T>+id
id*id+id
Dérivation:
![Page 450: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/450.jpg)
SECTION 14
INTRODUCTION À LA CONCURRENCE
SEG2106 – Winter 2014 – Hussein Al Osman 450
![Page 451: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/451.jpg)
SUJETS
Concepts de la concurrence
Concurrence au niveau sous-programme
Sémaphores
SEG2106 – Winter 2014 – Hussein Al Osman 451
![Page 452: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/452.jpg)
CONCEPT DE LA CONCURRENCE
La concurrence peut être atteinte à différents niveaux:
• Niveau d’instruction• Niveau de déclaration• Niveau d’unité• Niveau de programme
L’exécution concurrentielle d’unités de programmes peut être effectuée:
• Physiquement sur des processeurs séparés,• ou Logiquement dans un mode de temps tranché sur un
système d’ordinateur à processeur
SEG2106 – Winter 2014 – Hussein Al Osman 452
![Page 453: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/453.jpg)
POURQUOI ÉTUDIER LA CONCURRENCE?
Les systèmes d’ordinateur résolvent des problèmes du monde réel, où les événements se passent en même temps:
• Les réseaux de chemins de fer (beaucoup de trains qui circulent, mais qui doivent se synchroniser sur les sections partagées du chemin)
• Les systèmes d’exploitation, avec plusieurs processus qui se déroulent en même temps
• Les serveurs Web
Les ordinateurs à processeurs multiples ou multi-cœurs sont maintenant très populaire
• Ceci nécessite un logiciel qui d’utilise effectivement ce type de hardware
SEG2106 – Winter 2014 – Hussein Al Osman 453
![Page 454: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/454.jpg)
CONCURRENCE À NIVEAU SOUS-PROGRAMME
Une tâche est une unité de programme qui peut être exécutée avec concurrence avec d’autres unités du même programme
• Chaque tâche dans un programme peut fournir un thread de contrôle
Une tâche peut communiquer avec une autre tâche à travers:
• Des variables non-locales partagées• Le passage de message• Des paramètres
SEG2106 – Winter 2014 – Hussein Al Osman 454
![Page 455: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/455.jpg)
SYNCHRONISATION
Un mécanisme pour contrôler l’ordre dans lequel les tâches exécutent
La synchronisation coopérative est requise entre la tâche A et la tâche B lorsque:
• La tâche A doit attendre la tâche B pour compléter une activité spécifique avant que la tâche A puisse continuer l’exécution
• Rappel du problème de réseaux de petri producteur-consommateur
La synchronisation compétitive est requise entre deux tâches lorsque:
• Les deux tâches ont besoin d’utiliser une ressource qui ne peut pas être utilisée simultanément
SEG2106 – Winter 2014 – Hussein Al Osman 455
![Page 456: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/456.jpg)
LE BESOIN DE LA SYNCHRONISATION COMPÉTITIVE
SEG2106 – Winter 2014 – Hussein Al Osman 456
Temps
Tache B
Tache A
Valeur de Total = 3
ChercheTotal
Ajoute 1 Stocke Total
ChercheTotal
Multipliepar 2
StockeTotal
4 6
![Page 457: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/457.jpg)
SECTION CRITIQUE
Un segment de code, dans laquelle le thread peut faire:
• Le changement de variables communes,• La mise à jour d’un tableau,• L’écriture sur un document,• Ou la mise à jour de ressources partagées
L’exécution de sections critiques par les threads est mutuellement exclusive dans le temps
SEG2106 – Winter 2014 – Hussein Al Osman 457
![Page 458: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/458.jpg)
ÉTATS DE TÂCHES (THREAD)
Nouveau: il a été créé, mais n’a pas encore commencer son exécution
Exécutable ou prêt: il est prêt à exécuter, mais n’exécute pas couramment
Exécution: il exécute couramment, il possède un processeur et son code est en train de s’exécuter
Bloqué: il exécutait, mais son exécution a été interrompue par un événement parmi plusieurs
Mort: il n’est plus actif dans aucun sens
SEG2106 – Winter 2014 – Hussein Al Osman 458
![Page 459: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/459.jpg)
SÉMAPHORES
Un Sémaphore est une technique utilisée pour contrôler l’accès à une ressource commune pour plusieurs tâches
• C’est une structure de donnée qui consiste d’un nombre entier et une file qui stocke les descripteurs de tâches
Une tâche qui a besoin de faire accès à une section critique a besoin « d’acquérir » le sémaphore
SEG2106 – Winter 2014 – Hussein Al Osman 459
![Page 460: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/460.jpg)
SÉMAPHORES
Deux opérations sont toujours associées avec les Sémaphores
L’Opération “P” est utilisée pour chercher la sémaphore, et “V” pour la relâcher
• P (proberen, qui veut dire tester et diminuer l’entier)• V (verhogen, qui veut dire augmenter) l’operation
Alternativement, ces opérations sont appelées: wait et release
SEG2106 – Winter 2014 – Hussein Al Osman 460
![Page 461: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/461.jpg)
SÉMAPHORES
Les systèmes d’opération distinguent souvent entre les sémaphores comptants et binaires
La valeur du nombre entier d’un sémaphore comptant peut varier avoir n’importe quel valeur
La valeur du nombre entier d’un sémaphore binaire peut seulement varier entre 0 et 1
SEG2106 – Winter 2014 – Hussein Al Osman 461
![Page 462: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/462.jpg)
SÉMAPHORES
La stratégie générale pour utiliser un sémaphore binaire afin de contrôler l’accès à une section critique est comme suit:
Semaphore aSemaphore;
P(aSemaphore);Critical section();V(aSemaphore);
SEG2106 – Winter 2014 – Hussein Al Osman 462
![Page 463: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/463.jpg)
SYNCHRONISATION AVEC SÉMAPHORE
wait(aSemaphore);
if conteur de aSemaphore’s > 0 thenDecremente conteur de aSemaphore
elseFixe l’etat de la tache à bloquéMet la tache dans la file de aSemaphore
end
SEG2106 – Winter 2014 – Hussein Al Osman 463
![Page 464: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/464.jpg)
SYNCHRONISATION AVEC SÉMAPHORE
release(aSemaphore);
if file de aSemaphore vide thenincrémente conteur de aSemaphore
elseFixe l’etat de la tache dans la tete du file à prêtFait un opération de défile
end
SEG2106 – Winter 2014 – Hussein Al Osman 464
![Page 465: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/465.jpg)
PRODUCTEUR ET CONSOMMATEUR
SEG2106 – Winter 2014 – Hussein Al Osman 465
![Page 466: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/466.jpg)
AJOUTER LA SYNCHRONISATION COMPÉTITIVE
SEG2106 – Winter 2014 – Hussein Al Osman 466
![Page 467: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/467.jpg)
SYNCHRONISATION COMPÉTITIVE (II)
SEG2106 – Winter 2014 – Hussein Al Osman 467
![Page 468: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/468.jpg)
INTER-BLOCAGES
Une loi passée par la législature de Kansas vers le début du 20e siècle:
“…… Lorsque deux trains s’approchent à un croisement, les deux doivent s’arrêter complétement et aucun d’eux ne peut démarrer jusqu’à ce que l’autre est parti. ……”
SEG2106 – Winter 2014 – Hussein Al Osman 468
![Page 469: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/469.jpg)
INTER-BLOCAGES
SEG2106 – Winter 2014 – Hussein Al Osman 469
Classic case of traffic deadlock. This is a gridlock where not vehicle can
move forward to clear the traffic jam
![Page 470: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/470.jpg)
CONDITIONS POUR UN INTER-BLOCAGEExclusion mutuelle: le fait de permettre à un seul processus d’avoir accès à une ressource dédiée
Tenir-et-attendre: il doit y avoir un processus qui tiens au moins une ressource et attend d’acquérir des ressources additionnelles qui sont couramment tenus par d’autres processus
Pas de préemption: le manque de réallocation temporaire de ressources, peut être relâchée volontairement seulement
Attente circulaire: chaque processus impliqué dans l’impasse attend un autre processus de relâcher volontairement la ressource
SEG2106 – Winter 2014 – Hussein Al Osman 470
![Page 471: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/471.jpg)
EXEMPLE D’INTER-BLOCAGE
SEG2106 – Winter 2014 – Hussein Al Osman 471
BinarySemaphore s1, s2;
Task A: wait(s1) // access resource 1 wait (s2) // access resource 2 release(s2) release(s1)end task
Task B: wait(s2) // access resource 2 wait(s1) // access resource 1 release(s1) release(s2)end task
![Page 472: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/472.jpg)
STRATÉGIE POUR MANIPULER LES INTER-BLOCAGESPrévention: éliminer une des conditions nécessaires
Évitement: éviter si le système connait à l’avance la séquence de recherche de ressources associée avec chaque processus actif
Détection: détecter en construisant des graphiques de ressource dirigée et chercher les cycles
Recouvrement: lorsque détecté, il doit être démêlé et le système doit retourner à son état normal le plus rapidement possible
• Terminaison du processus• Préemption de ressources
SEG2106 – Winter 2014 – Hussein Al Osman 472
![Page 473: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/473.jpg)
SECTION 15
PLUS SUR LA CONCURRENCE
SEG2101 Chapter 10 473
![Page 474: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/474.jpg)
SUJETS
Moniteur
Exemples sur les moniteurs
Passage de messages asynchrone
Passage de messages synchrone
Introduction aux Threads Java
SEG2101 Chapter 10 474
![Page 475: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/475.jpg)
MONITEUR
Un moniteur est un ensemble de routines qui sont protégés par un verrou d’exclusion mutuelle
• Aucune routine dans le moniteur peut s’exécuter par un thread jusqu'à ce que ce thread obtient le verrou
Tout autre thread doit attendre le thread qui exécute couramment afin d’abandonner le contrôle du verrou
SEG2101 Chapter 10 475
![Page 476: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/476.jpg)
MONITEUR
Un thread peut se suspendre à l’intérieur d’un moniteur et ensuite attendre qu’un événement se passe
• Si ceci se passe, alors un autre thread a l’opportunité de rentrer dans le moniteur
Habituellement, un thread se suspend en attendant une condition
• Durant l’attente, le thread abandonne temporairement son accès exclusif
• Il doit le réacquérir après que la condition soit remplie
SEG2101 Chapter 10 476
![Page 477: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/477.jpg)
MONITEUR VS SÉMAPHORE
Un sémaphore est une construction plus simplifiée que le moniteur parce qu’il s’agit seulement d’un verrou qui protège une ressource partagée
• Pas un ensemble de routines comme le moniteur
Une tâche doit acquérir (ou attendre pour) un sémaphore avant d’accéder une ressource partagée
Une tâche doit simplement faire appel à une routine (ou procédure) dans le moniteur afin d’accéder une ressource partagée
• Lorsque terminé, vous n’avez rien à relâcher• Rappelez-vous que vous devez relâcher des sémaphores (si
vous oubliez inter-blocage)
SEG2101 Chapter 10 477
![Page 478: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/478.jpg)
SYNCHRONISATION COMPÉTITIVE
Une des spécifications les plus importantes des moniteurs est que l’information partagée réside dans le moniteur
• Tous les codes de synchronisation sont centralisés dans une seule location
Le moniteur garantit la synchronisation en permettant l’accès à une seule tâche à la fois
• Rappelez-vous que par l’utilisation des sémaphores comptants, nous sommes capables de permettre l’accès à plusieurs tâches, et non nécessairement une seule
Les appels aux procédures du moniteur sont implicitement filés si le moniteur est occupé au moment de l’appel
SEG2101 Chapter 10 478
![Page 479: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/479.jpg)
SYNCHRONISATION COOPÉRATIVE
Malgré que l’accès mutuellement exclusif à l’information partagée soit intrinsèque avec un moniteur:
• La coopération entre les processus est toujours la tâche du programmeur
Le programmeur doit garantir qu’un tampon partagé ne passe pas par un débordement
SEG2101 Chapter 10 479
![Page 480: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/480.jpg)
EXEMPLE D’UTILISATION D’UN MONITEUR
SEG2101 Chapter 10 480
Task A
Task B
Task C
Task D
procedure_1
procedure_2
procedure_3
procedure_4
Monitor
Queue
Call procedure_1
Monitor Owner: none
![Page 481: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/481.jpg)
EXEMPLE D’UTILISATION D’UN MONITEUR
SEG2101 Chapter 10 481
Task A
Task B
Task C
Task D
procedure_1
procedure_2
procedure_3
procedure_4
Monitor
Queue
Call procedure_1
Monitor Owner: none
![Page 482: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/482.jpg)
EXEMPLE D’UTILISATION D’UN MONITEUR
SEG2101 Chapter 10 482
Task A
Task B
Task C
Task D
procedure_1
procedure_2
procedure_3
procedure_4
Monitor
Queue
Monitor Owner: Task A
![Page 483: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/483.jpg)
EXEMPLE D’UTILISATION D’UN MONITEUR
SEG2101 Chapter 10 483
Task A
Task B
Task C
Task D
procedure_1
procedure_2
procedure_3
procedure_4
Monitor
Queue
Call procedure_2
Monitor Owner: Task A
![Page 484: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/484.jpg)
EXEMPLE D’UTILISATION D’UN MONITEUR
SEG2101 Chapter 10 484
Task A
Task B
Task C
Task D
procedure_1
procedure_2
procedure_3
procedure_4
Monitor
Task C
Queue
Monitor Owner: Task A
![Page 485: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/485.jpg)
EXEMPLE D’UTILISATION D’UN MONITEUR
SEG2101 Chapter 10 485
Task A
Task B
Task C
Task D
procedure_1
procedure_2
procedure_3
procedure_4
Monitor
Task C
QueueCall procedure_4
Monitor Owner: Task A
![Page 486: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/486.jpg)
EXEMPLE D’UTILISATION D’UN MONITEUR
SEG2101 Chapter 10 486
Task A
Task B
Task C
Task D
procedure_1
procedure_2
procedure_3
procedure_4
Monitor
Task CTask B
Queue
Monitor Owner: Task A
![Page 487: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/487.jpg)
EXEMPLE D’UTILISATION D’UN MONITEUR
SEG2101 Chapter 10 487
Task A
Task B
Task C
Task D
procedure_1
procedure_2
procedure_3
procedure_4
Monitor
Task CTask B
Queue
return
Monitor Owner: Task A
![Page 488: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/488.jpg)
EXEMPLE D’UTILISATION D’UN MONITEUR
SEG2101 Chapter 10 488
Task A
Task B
Task C
Task D
procedure_1
procedure_2
procedure_3
procedure_4
Monitor
Task CTask B
Queue
Monitor Owner: none
![Page 489: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/489.jpg)
EXEMPLE D’UTILISATION D’UN MONITEUR
SEG2101 Chapter 10 489
Task A
Task B
Task C
Task D
procedure_1
procedure_2
procedure_3
procedure_4
Monitor
Task B
Queue
Monitor Owner: Task C
![Page 490: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/490.jpg)
EXEMPLE D’UTILISATION D’UN MONITEUR
SEG2101 Chapter 10 490
Task A
Task B
Task C
Task D
procedure_1
procedure_2
procedure_3
procedure_4
Monitor
Task B
Queue
Monitor Owner: Task C
return
![Page 491: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/491.jpg)
EXEMPLE D’UTILISATION D’UN MONITEUR
SEG2101 Chapter 10 491
Task A
Task B
Task C
Task D
procedure_1
procedure_2
procedure_3
procedure_4
Monitor
Task B
Queue
Monitor Owner: none
![Page 492: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/492.jpg)
EXEMPLE D’UTILISATION D’UN MONITEUR
SEG2101 Chapter 10 492
Task A
Task B
Task C
Task D
procedure_1
procedure_2
procedure_3
procedure_4
Monitor
Queue
Monitor Owner: Task B
![Page 493: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/493.jpg)
EXEMPLE: UN TAMPON PARTAGÉMONITOR: BufferMonitor
const bufferSize = 100
buffer = array [0.. bufferSize-1]
next_in = 0, next_out = 0, filled = 0
procedure void deposit (item )
begin
while filled == bufferSize then
wait() // blocks thread in the monitor
end
buffer[next_in] = item
next_in = (next_in + 1) mod bufferSize
filled = filled + 1
signal() // free a task that has been waiting on a condition
end procedure
SEG2101 Chapter 10 493
![Page 494: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/494.jpg)
EXEMPLE: UN TAMPON PARTAGÉ
procedure Item fetch()
begin
while filled == 0 then
wait() // blocks thread in the monitor
end
item = buffer[next_out]
next_out = (next_out + 1) mod bufferSize
filled = filled - 1
signal() // free a task that has been waiting on a condition
return item
end procedure
SEG2101 Chapter 10 494
![Page 495: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/495.jpg)
EXEMPLE: UN TAMPON PARTAGÉ
PRODUCER
Task Producer
begin
Loop Forever
// produce new item
…
bufferMonitor.deposit(newItem)
end
End Task
CONSUMER
Task Consumer
begin
Loop Forever
newItem = bufferMonitor.fetch()
// consume new item
…
end
End Task
SEG2101 Chapter 10 495
![Page 496: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/496.jpg)
PASSAGE DE MESSAGES
Le passage de messages veut dire qu’un processus envoie un message à un autre processus et ensuite continue son traitement local
• Le message peut prendre du temps pour arriver à l’autre processus
Le message peut être stocké dans la file de donnée du processus de destination
• Si le dernier n’est pas immédiatement prêt à recevoir le message
SEG2101 Chapter 10 496
![Page 497: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/497.jpg)
PASSAGE DE MESSAGESLe message est reçu par le processus de destination, lorsque:
• Ce dernier arrive à un point dans son traitement local où il est prêt à recevoir des messages.
Ceci est connu comme le passage de messages asynchrone (parce que l’envoi et la réception ne se font pas en même temps)
La communication par courriel est une forme de passage de messages…
SEG2101 Chapter 10 497
![Page 498: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/498.jpg)
PASSAGE DE MESSAGES ASYNCHRONE
Opérations d’envoi et de réception bloquées:
• Un récepteur sera bloqué s’il arrive à un point où il peut recevoir des messages et aucun message est en attente.
• Un émetteur peut être bloqué s’il n’existe pas d’espace dans la file de message entre l’émetteur et le récepteur
• Cependant, dans plusieurs cas, on peut supposer des files arbitraires longues, ce qui veut dire que l’émetteur ne peut presque jamais être bloqué
SEG2101 Chapter 10 498
![Page 499: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/499.jpg)
PASSAGE DE MESSAGES ASYNCHRONE
Opérations d’envoi et de réception non-bloquées:
· Les opérations d’envoi et de réception retournent toujours immédiatement
· Elles retournent une valeur d’état qui peut indiquer qu’aucun message est arrivé au récepteur
· Le récepteur peut tester si un message attend et peut possiblement effectuer d’autres traitements.
SEG2101 Chapter 10 499
![Page 500: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/500.jpg)
PASSAGE DE MESSAGE SYNCHRONE
On suppose que l’envoi et la réception se passent en même temps
• Il n’y a souvent pas de besoin pour un tampon intermédiaire
Ceci est appelé un rendez-vous et implique une synchronisation plus proche:
• L’opération d’envoi et de réception combinée peut seulement se dérouler si les deux côtés sont prêts à accomplir leur rôle.
Le processus d’envoi peut devoir attendre le processus de réception, ou bien le processus de réception peut devoir attendre le processus d’envoi.
SEG2101 Chapter 10 500
![Page 501: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/501.jpg)
RENDEZ-VOUS
SEG2101 Chapter 10 501
![Page 502: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/502.jpg)
LES THREADS JAVA
SEG2101 Chapter 10 502
![Page 503: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/503.jpg)
THREADS MULTIPLESUn thread est un flux d’exécution, avec un début et une fin, d’une tâche dans un programme
Avec Java, des threads multiples d’un programme peuvent être lancés avec concurrence
Des threads multiples peuvent être exécutés dans des systèmes à multiprocesseurs, et des systèmes à processeur-simple
Le multithreading peut rendre le programme plus réactif, interactif, en plus d’améliorer sa performance
SEG2106 – Winter 2014 – Hussein Al Osman 503
![Page 504: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/504.jpg)
ÉTATS THREAD
SEG2106 – Winter 2014 – Hussein Al Osman 504
![Page 505: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/505.jpg)
CRÉER DES THREADS EN ÉTENDANT LA CLASSE THREAD
SEG2106 – Winter 2014 – Hussein Al Osman 505
![Page 506: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/506.jpg)
CRÉER DES THREADS EN IMPLÉMENTANT L’INTERFACE EXÉCUTABLE
SEG2106 – Winter 2014 – Hussein Al Osman 506
![Page 507: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/507.jpg)
THREAD GROUPS
Un thread group est un ensemble de threads
Certains programmes continents plusieurs threads avec des fonctions similaires
• On peut les regrouper ensemble et effectuer des opérations sur le groupe entier
Ex., on peut suspendre ou résumer tous les threads dans un groupe en même temps.
SEG2106 – Winter 2014 – Hussein Al Osman 507
![Page 508: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/508.jpg)
UTILISATION DES GROUPES DE THREAD
Construisez un thread group:
ThreadGroup g = new ThreadGroup(“thread group”);
Placez un thread dans le thread group:
Thread t = new Thread(g, new ThreadClass(),”this thread”);
Trouvez combien de threads dans un groupe sont couramment en train d’exécuter:
System.out.println(“the number of runnable threads in the group “ + g.activeCount());
Trouvez à quel groupe le thread appartient-il:
theGroup = myThread.getThreadGroup();
SEG2106 – Winter 2014 – Hussein Al Osman 508
![Page 509: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/509.jpg)
PRIORITÉS
Les priorités des threads n’ont pas besoin d’être identiques
La priorité du thread par défaut est:
• NORM_PRIORITY(5)
La priorité est un nombre entier entre 0 et 10, où:
• MAX_PRIORITY(10) • MIN_PRIORITY(0)
Vous pouvez utiliser:
• setPriority(int): changer la priorité de ce thread• getPriority(): retourner la priorité de ce thread
SEG2106 – Winter 2014 – Hussein Al Osman 509
![Page 510: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/510.jpg)
SECTION 16
CONCURRENCE JAVA
SEG2106 – Winter 2014 – Hussein Al Osman 510
![Page 511: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/511.jpg)
SUJETS
Encore plus sur les Principes de Base des Threads Java
• Sleep• Join• Interrupt
Sémaphores Java
Verrous Internes de Java
Moniteurs Implémentés avec des Verrous Internes
Moniteurs Implémentés avec des Interfaces Lock et Condition
Variables Atomiques
SEG2106 – Winter 2014 – Hussein Al Osman 511
![Page 512: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/512.jpg)
PRINCIPES DE BASE DES THREADS JAVA
Faire un thread dormir (sleep) pour plusieurs millisecondes
• Très populaire avec les applications de jeux (animation 2D ou 3D)
Thread.sleep(1000);Thread.sleep(1000, 1000); (la précision dépend du système)
• Notez que ces méthodes sont statiques• Elles génèrent un InterruptedException
SEG2106 – Winter 2014 – Hussein Al Osman 512
![Page 513: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/513.jpg)
PRINCIPES DE BASE DES THREADS JAVA
Si vous créez plusieurs threads, chacun est responsable pour des calculs
Vous pouvez attendre que le thread meurt (die)
• Avant de rassembler les résultats de ces threads
Afin d’achever ceci, on utilise la méthode « join » définie dans la classe Thread
try {thread.join();}
catch (InterruptedException e){e.printStackTrace();}
L’Exception est générée si un autre thread a interrompu le thread courant
SEG2106 – Winter 2014 – Hussein Al Osman 513
![Page 514: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/514.jpg)
EXEMPLE JOINpublic class JoinThread {
public static void main(String[] args) {
Thread thread2 = new Thread(new WaitRunnable());
Thread thread3 = new Thread(new WaitRunnable());
thread2.start();
try {thread2.join();} catch (InterruptedException e) {e.printStackTrace();}
thread3.start();
try {thread3.join(1000);} catch (InterruptedException e) {e.printStackTrace();}
}
}
SEG2106 – Winter 2014 – Hussein Al Osman 514
![Page 515: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/515.jpg)
EXEMPLE JOINpublic class WaitRunnable implements Runnable {
@Override
public void run() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
SEG2106 – Winter 2014 – Hussein Al Osman 515
![Page 516: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/516.jpg)
THREADS INTERROMPANT
Dans Java, on n’a aucune façon de forcer un Thread d’arrêter
• Si le Thread n’est pas implémenté correctement, il peut continuer son exécution indéfiniment (thread coquin!)
Mais on peut interrompre un Thread avec la méthode interrupt()
• Si le Thread dort (sleep) ou joint (join) un autre Thread, un InterruptedException est généré
• Dans ce cas, le statut interrompu du thread est remis a faux (false)
SEG2106 – Winter 2014 – Hussein Al Osman 516
![Page 517: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/517.jpg)
EXEMPLE INTERRUPTpublic class InterruptThread {
public static void main(String[] args) {
Thread thread1 = new Thread(new WaitRunnable());
thread1.start();
try {Thread.sleep(1000);}
catch (InterruptedException e){e.printStackTrace();}
thread1.interrupt();
}
SEG2106 – Winter 2014 – Hussein Al Osman 517
![Page 518: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/518.jpg)
EXEMPLE INTERRUPTprivate static class WaitRunnable implements Runnable {
@Override
public void run() {
System.out.println("Current time millis: " + System.currentTimeMillis());
try {Thread.sleep(5000);}
catch (InterruptedException e) {
System.out.println("The thread has been interrupted");
System.out.println("The thread is interrupted: "+Thread.currentThread().isInterrupted());
}
System.out.println("Current time millis: " + System.currentTimeMillis());
}
}
SEG2106 – Winter 2014 – Hussein Al Osman 518
Sample Output:Current time millis : 1274017633151 The thread has been interrupted The thread is interrupted : false Current time millis : 1274017634151
![Page 519: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/519.jpg)
SÉMAPHORES JAVA
Java définit une classe de sémaphores: java.util.concurrent.Semaphore
Créer un sémaphore comptant:
Semaphore available = new Semaphore(100);
Créer un sémaphore binaire:
Semaphore available = new Semaphore(1);
On implémentera notre propre classe de sémaphores plus tard
SEG2106 – Winter 2014 – Hussein Al Osman 519
![Page 520: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/520.jpg)
EXEMPLE DE SÉMAPHOREpublic class Example {
private int counter= 0;
private final Semaphore mutex = new Semaphore(1)
public int getNextCount() throws InterruptedException {
try {
mutex.acquire();
return ++counter;
} finally {
mutex.release();
}
}
}
SEG2106 – Winter 2014 – Hussein Al Osman 520
![Page 521: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/521.jpg)
QUESTION??
Pourquoi devons-nous avoir un bloc try-finally dans l’exemple précédent?
SEG2106 – Winter 2014 – Hussein Al Osman 521
![Page 522: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/522.jpg)
VERROUS INTERNESTout morceau de code qui peut être modifié simultanément par plusieurs threads doit être Thread Safe
Considérez le morceau de code simple suivant:
public int getNextCount(){ return ++counter;}
Un incrément comme ceci n’est pas une action atomique, il implique:
• Lire la valeur actuelle de counter• Ajouter un (1) à sa valeur actuelle• Stocker le résultat dans la mémoire
SEG2106 – Winter 2014 – Hussein Al Osman 522
![Page 523: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/523.jpg)
VERROUS INTERNESSi on a deux threads qui invoquent getNextCount(), la séquence suivante d’événements peut se passer (parmi plusieurs scénarios possibles):
Conséquemment, on doit utiliser un verrou sur l’accès à “counter”
On peut ajouter un tel verrou à une méthode en utilisant simplement le mot-clé: synchronized
public synchronized int getNextCount(){ return ++counter;}
Ceci garantit que seulement un thread exécute la méthode
Si on a plusieurs méthodes avec le mot-clé synchronisé, seulement une méthode peut être exécutée à la fois
• Ceci s’appelle un Verrou Interne
SEG2106 – Winter 2014 – Hussein Al Osman 523
1 Thread 1 : reads counter, gets 0, adds 1, so counter = 1 2 Thread 2 : reads counter, gets 0, adds 1, so counter = 1
3 Thread 1 : writes 1 to the counter field and returns 1 4 Thread 2 : writes 1 to the counter field and returns 1
![Page 524: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/524.jpg)
VERROUS INTERNESChaque objet Java possède un verrou interne associé avec lui (souvent appelé tout simplement moniteur)
Dans le dernier exemple, on a utilisé ce verrou pour synchroniser l’accès à une méthode
• Au lieu, on peut choisir de synchroniser l’accès à un bloc (ou segment) de code
public int getNextValue() { synchronized (this) {return value++;}}
• Alternativement, on peut utiliser le verrou d’un autre objet public int getNextValue() { synchronized (lock) {return value++;}}
• Ce dernier est utile puisqu’il nous permet d’utiliser plusieurs verrous pour la sécurité du thread dans une classe simple
SEG2106 – Winter 2014 – Hussein Al Osman 524
![Page 525: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/525.jpg)
VERROUS INTERNES
Alors, on a mentionné que chaque objet Java possède un verrou interne associé avec lui
Qu’en est-il des méthodes statiques qui ne sont pas associées avec un objet particulier?
• Il existe aussi un verrou interne associé avec la classe
• Utilisé seulement pour les méthodes à classe synchronisée (statique)
SEG2106 – Winter 2014 – Hussein Al Osman 525
![Page 526: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/526.jpg)
MONITEURS JAVA
Mauvaises nouvelles: Dans Java, il n’y a pas un mot-clé pour créer directement un moniteur
Bonnes nouvelles: il existe plusieurs mécanismes pour créer des moniteurs
• Le plus simple, utilise les connaissances qu’on a déjà accumulées concernant les verrous internes
SEG2106 – Winter 2014 – Hussein Al Osman 526
![Page 527: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/527.jpg)
MONITEURS JAVA
Les verrous internes peuvent être utilisés effectivement pour l’exclusion mutuelle (synchronisation compétitive)
On a besoin d’un mécanisme pour implémenter la synchronisation coopérative
• En particulier, on a besoin de permettre aux threads de se suspendre si une condition empêche leur exécution dans un moniteur
• Ceci est fait en utilisant les méthodes wait() et notify()
Ces deux méthodes sont très importantes qu’elles ont été définies dans la classe Object…
SEG2106 – Winter 2014 – Hussein Al Osman 527
![Page 528: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/528.jpg)
OPÉRATIONS “WAIT”
wait()
Permet au thread actuel d’abandonner le moniteur et attendre (wait) jusqu’à ce qu’un autre thread entre dans le même moniteur et fait appel à notify()ou notifyAll()
SEG2106 – Winter 2014 – Hussein Al Osman 528
wait(long timeout)
Permet au thread actuel d’attendre (wait) jusqu’à ce qu’un autre thread invoque la méthode notify() ou notifyAll() , ou bien que le temps spécifié est terminé
![Page 529: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/529.jpg)
OPÉRATIONS “NOTIFY”
SEG2106 – Winter 2014 – Hussein Al Osman 529
notify()
Réveille un seule thread qui attend sur le moniteur de cet objet (verrou interne). Si plus qu’un seul thread attendent, le choix est arbitraire (est-ce que c’est juste?)
Le thread réveillé ne pourra pas procéder jusqu’à ce que le thread actuel quitte le verrou.
notifyAll()
Réveille tous les threads qui attendent le moniteur de cet objet.
Le thread réveillé ne pourra pas procéder jusqu’à ce que le thread actuel quitte le verrou.
Le thread suivant qui verrouille ce moniteur est aussi choisi au hasard
![Page 530: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/530.jpg)
EXEMPLE DE MONITEUR BASÉ SUR UN VERROU INTERNEpublic class BufferMonitor{
int [] buffer = new int [100];
int next_in = 0, next_out = 0, filled = 0;
public synchronized void deposit (int item ) throws InterruptedException{
while (buffer.length == filled){
wait(); // blocks thread
}
buffer[next_in] = item;
next_in = (next_in + 1) % buffer.length;
filled++;
notify(); // free a task that has been waiting on a condition
}
SEG2106 – Winter 2014 – Hussein Al Osman 530
![Page 531: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/531.jpg)
EXEMPLE DE MONITEUR VASÉ SUR UN VERROU INTERNE
public synchronized int fetch() throws InterruptedException{
while (filled == 0){
wait(); // block thread
}
int item = buffer[next_out];
next_out = (next_out + 1) % buffer.length;
filled--;
notify(); // free a task that has been waiting on a condition
return item;
}
}
SEG2106 – Winter 2014 – Hussein Al Osman 531
![Page 532: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/532.jpg)
EXERCICE DE SÉMAPHOREMalgré qu’une classe de sémaphore soit incluse dans la librairie standard de Java, cependant, avec les connaissances que vous
avez accumulé jusqu’à présent,
Pouvez-vous créer une classe de Sémaphores Comptants en utilisant des Verrous Internes?
SEG2106 – Winter 2014 – Hussein Al Osman 532
![Page 533: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/533.jpg)
EXERCICE DE SÉMAPHOREpublic class Semaphore{
private int value;
public Semaphore (int value) {
this.value = value;
}
public synchronized void p(){
while (value <=0){
try {
wait();
}
catch (InterruptedException e){}
}
value--;
}SEG2106 – Winter 2014 – Hussein Al Osman 533
public synchronized void v(){
++value;
notify();
}
}
![Page 534: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/534.jpg)
UN AUTRE MÉCANISME POUR CRÉER DES MONITEURSOn peut aussi créer un moniteur en utilisant l’interface Java Lock
• ReentrantLock est l’implémentation la plus populaire de LockReentrantLock définit deux constructeurs:
• Constructeur de Défaut• Constructeur qui prend un Booléen (spécifiant si le verrou est juste)
Dans une situation de verrou juste, les threads vont avoir accès au verrou dans le même ordre qu’ils l’ont demandé (FIFO)
• Sinon, le verrou ne garantit aucun ordre particulier• La justesse exige plus de computations (en termes de traitement), et
donc, doit être seulement utilisé si requis
Afin d’acquérir le verrou, vous devez simplement utiliser la méthode lock, et pour le lâcher, faites appel à unlock
SEG2106 – Winter 2014 – Hussein Al Osman 534
![Page 535: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/535.jpg)
EXEMPLE “LOCK”public class SimpleMonitor {
private final Lock lock = new ReentrantLock();
public void testA() {
lock.lock();
try {//Some code}
finally {lock.unlock();}
}
public int testB() {
lock.lock();
try {return 1;}
finally {lock.unlock();}
}
}
SEG2106 – Winter 2014 – Hussein Al Osman 535
![Page 536: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/536.jpg)
UN AUTRE MÉCANISME POUR CRÉER DES MONITEURS
Comment implémenter les conditions?
• Sans pouvoir attendre une condition, les moniteurs seront inutiles…
• La Coopération n’est pas possible
Il existe une classe spécifique qui a été développée juste pour cet effet: Classe Condition
• On crée un exemple de Condition en utilisant la méthode newCondition() définie dans l’interface Lock
SEG2106 – Winter 2014 – Hussein Al Osman 536
![Page 537: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/537.jpg)
EXEMPLE DE MONITEUR TAMPON (ENCORE)public class BufferMonitor {
int [] buffer = new int [100];
int next_in = 0, next_out = 0, filled = 0;
private final Lock lock = new ReentrantLock();
private final Condition notFull = lock.newCondition();
private final Condition notEmpty = lock.newCondition();
SEG2106 – Winter 2014 – Hussein Al Osman 537
![Page 538: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/538.jpg)
EXEMPLE DE MONITEUR TAMPON (ENCORE)
public void deposit (int item ) throws InterruptedException{
lock.lock(); // Lock to ensure mutually exclusive access
try{
while (buffer.length == filled){
notFull.await(); // blocks thread (wait on condition)
}
buffer[next_in] = item;
next_in = (next_in + 1) % buffer.length;
filled++;
notEmpty.signal(); // signal thread waiting on the empty condition
}
finally{
lock.unlock();// Whenever you lock, you must unlock
}
}
SEG2106 – Winter 2014 – Hussein Al Osman 538
![Page 539: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/539.jpg)
EXEMPLE DE MONITEUR TAMPON (ENCORE)
public void fetch () throws InterruptedException{
lock.lock(); // Lock to ensure mutually exclusive access
try{
while (filled == 0){
notEmpty.await(); // blocks thread (wait on condition)
}
int item = buffer[next_out];
next_out = (next_out + 1) % buffer.length;
filled--;
notFull.signal(); // signal thread waiting on the full condition
}
finally{
lock.unlock();// Whenever you lock, you must unlock
}
return item;
}
}
539
![Page 540: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/540.jpg)
“VERROU” VS “SYNCHRONISÉ”Les moniteurs implémentés avec des classes Lock et Condition ont quelques avantages comparés avec l’implémentation basée sur la “synchronisation”:
1. La capacité d’avoir plus qu’une variable de condition par moniteur (voir exemple précédent)
2. La capacité d’avoir un verrou juste (souvenez-vous que les blocs ou méthodes synchronisés ne garantissent pas la justesse)
3. La capacité de vérifier si le verrou est actuellement occupé(en faisant appel à la méthode isLocked())
• Alternativement, on peut faire appel à tryLock() qui acquiert le verrou seulement s’il n’est pas occupé par un autre thread
4. La capacité d’obtenir la liste de threads qui attendent le verrou (en faisant appel à la méthode getQueuedThreads())
La liste ci-dessus n’est pas exhaustive…
SEG2106 – Winter 2014 – Hussein Al Osman 540
![Page 541: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/541.jpg)
“VERROU” VS “SYNCHRONISÉ”
Les désavantages de Lock et Condition :
1. Besoin d’ajouter le code d’acquisition et relâchement de lock
2. Besoin d’ajouter un bloc try-finally
SEG2106 – Winter 2014 – Hussein Al Osman 541
![Page 542: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/542.jpg)
VARIABLES ATOMIQUES
Si on a besoin de la synchronisation pour une seule variable dans notre classe, on peut utiliser une classe atomique pour la rendre thread safe:
• AtomicInteger• AtomicLong• AtomicBoolean• AtomicReference
Ces classes utilisent des mécanismes de “hardware” à bas niveau pour assurer la synchronisation
• Ceci résulte en une meilleure performance
SEG2106 – Winter 2014 – Hussein Al Osman 542
![Page 543: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/543.jpg)
EXEMPLES DE VARIABLES ATOMIQUESpublic class AtomicCounter {
private final AtomicInteger value = new AtomicInteger(0);
public int getValue(){
return value.get();
}
public int getNextValue(){
return value.incrementAndGet();
}
public int getPreviousValue(){
return value.decrementAndGet();
}
}
SEG2106 – Winter 2014 – Hussein Al Osman 543
Autres opérations possibles: getAndIncrement(), getAndAdd(int i), addAndGet()…
![Page 544: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/544.jpg)
SECTION 17
ORDONNANCEMENT DES PROCESSUS
(DERNIER SUJET DANS CE COURS)
544SEG2106 – Winter 2014 – Hussein Al Osman
![Page 545: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/545.jpg)
SUJETS
Ordonnancement de CPU
Ordonnancement « First Come First Serve » (FCFS) (premier arrivé premier servi)
Ordonnancement Round Robin (RR)
545SEG2106 – Winter 2014 – Hussein Al Osman
![Page 546: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/546.jpg)
ORDONNANCEMENT DE CPU
Comment est-ce que le système d’exploitation décide de quelle tâche peut exécuter parmi plusieurs dans une file?
Ordonnancement: décider quels threads possèdent l’accès aux ressources d’un moment à un autre.
546SEG2106 – Winter 2014 – Hussein Al Osman
![Page 547: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/547.jpg)
ASSOMPTION: BURSTS DU CPU
547SEG2106 – Winter 2014 – Hussein Al Osman
![Page 548: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/548.jpg)
QU’EST-CE QUI EST IMPORTANT DANS UN ALGORITHME D’ORDONNANCEMENT?
548SEG2106 – Winter 2014 – Hussein Al Osman
![Page 549: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/549.jpg)
QU’EST-CE QUI EST IMPORTANT DANS UN ALGORITHME D’ORDONNANCEMENT?
Minimiser le temps de réponse
• Temps passé pour effectuer une opération (travail)• Le temps de réponse que l’utilisateur observe
• Le temps pour refléter la frappe dans un éditeur• Le temps pour compiler un programme• Tâches en temps réel: doit respecter les délais imposés par
l’environnement
549SEG2106 – Winter 2014 – Hussein Al Osman
![Page 550: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/550.jpg)
QU’EST-CE QUI EST IMPORTANT DANS UN ALGORITHME D’ORDONNANCEMENT?
Maximiser le débit
• Travaux par secondes• Débit relié au temps de réponse, mais non identique
• Minimiser le temps de réponse cause plus de commutation de contexte que si vous maximiser le débit seulement
• Minimiser le overhead (temps de commutation de contexte) en plus de l’utilisation efficace des ressources (CPU, disque, mémoire, etc.)
550SEG2106 – Winter 2014 – Hussein Al Osman
![Page 551: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/551.jpg)
QU’EST-CE QUI EST IMPORTANT DANS UN ALGORITHME D’ORDONNANCEMENT?
Justesse
• Partager le CPU entre les processus d’une manière équitable
551SEG2106 – Winter 2014 – Hussein Al Osman
![Page 552: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/552.jpg)
ALGORITHMES D’ORDONNANCEMENT: FIRST-COME, FIRST-SERVED (FCFS)
“Run until Done:” algorithme FIFO
Au début, ceci voulait dire qu’un programme coure d’une façon non-préentive jusqu’à ce qu’il soit terminé (incluant tout processus bloqué dans les opérations I/O)
Maintenant, FCFS veut dire qu’un processus garde le CPU jusqu’à ce que un thread ou plus soit bloqué
Exemple: Trois processus arrivent dans l’ordre P1, P2, P3.
• Temps de burst de P1: 24• Temps de burst de P2: 3• Temps de burst de P3: 3
Tracez le diagramme Gantt et calculez la moyenne de temps d’attente et la moyenne de temps de complétion.
552SEG2106 – Winter 2014 – Hussein Al Osman
![Page 553: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/553.jpg)
ALGORITHMES D’ORDONNANCEMENT: FIRST-COME, FIRST-SERVED (FCFS)
Exemple: Trois processus arrivent dans l’ordre P1, P2, P3.
• Temps de burst de P1: 24• Temps de burst de P2: 3• Temps de burst de P3: 3
Temps d’attente:
• P1: 0• P2: 24• P3: 27
Temps de complétion:
• P1: 24• P2: 27• P3: 30
Moyenne du temps d’attente: (0+24+27)/3 = 17
Moyenne du temps de complétion: (24+27+30)/3 = 27
553
P1 P2 P3
0 24 27 30
SEG2106 – Winter 2014 – Hussein Al Osman
![Page 554: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/554.jpg)
ALGORITHMES D’ORDONNANCEMENT: FIRST-COME, FIRST-SERVED (FCFS)
Qu’en est-il si l’ordre fut P2, P3, P1?
• Temps de burst de P1: 24• Temps de burst de P2: 3• Temps de burst de P3: 3
554SEG2106 – Winter 2014 – Hussein Al Osman
![Page 555: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/555.jpg)
ALGORITHMES D’ORDONNANCEMENT: FIRST-COME, FIRST-SERVED (FCFS)
Qu’en est-il si l’ordre fut P2, P3, P1?
• Temps de burst de P1: 24• Temps de burst de P2: 3• Temps de burst de P3: 3
Temps d’attente:
• P2: 0• P3: 3• P1: 6
Temps de complétion:
• P2: 3• P3: 6• P1: 30
Moyenne du temps d’attente: (0+3+6)/3 = 3 (comparé à 17)
Moyenne du temps de complétion: (3+6+30)/3 = 13 (comparé à 27)
555
P1P2 P3
0 3 6 30
SEG2106 – Winter 2014 – Hussein Al Osman
![Page 556: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/556.jpg)
ALGORITHMES D’ORDONNANCEMENT: FIRST-COME, FIRST-SERVED (FCFS)
Moyenne du temps d’attente: (0+3+6)/3 = 3 (comparé à 17)
Moyenne du temps de complétion: (3+6+30)/3 = 13 (comparé à 27)
Avantages et Désavantages de FCFS:
• Simple (+)
• Les travaux courts se coincent derrière les travaux longs (-)
• La performance est dépendante de l’ordre dans lequel les travaux arrivent (-)
556SEG2106 – Winter 2014 – Hussein Al Osman
![Page 557: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/557.jpg)
COMMENT PEUT-ON AMÉLIORER CECI?
557SEG2106 – Winter 2014 – Hussein Al Osman
![Page 558: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/558.jpg)
ORDONNANCEMENT ROUND ROBIN (RR)Méthode Round Robin
• Chaque processus obtient une petite unité de temps de CPU (quantum de temps)
• Habituellement 10-100 ms
• Après l’expiration du quantum, le processus est préempté et ajouté à la fin de la file « processus prête »
• Soit N processus dans la file « processus prête » et le quantum de temps est Q ms:
• Chaque processus reçoit 1/N du temps de CPU• En morceaux d’un maximum de Q ms• Quel est le temps d’attente maximum pour chaque processus
• Pas d’attentes de processus plus que (N-1)Q unités de temps
558SEG2106 – Winter 2014 – Hussein Al Osman
![Page 559: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/559.jpg)
ORDONNANCEMENT ROUND ROBIN (RR)
La performance dépend de la valeur de Q
• Petite valeur de Q => beaucoup de overhead
• Grande valeur de Q est comme FCFS
• Q doit être grand comparé au temps de commutation de contexte, sinon le overhead est trop haut
• Vous dépensez la plupart de votre temps en faisant la commutation de contexte!
559SEG2106 – Winter 2014 – Hussein Al Osman
![Page 560: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/560.jpg)
EXEMPLE DE RR AVEC QUANTUM DE TEMPS = 4
Processus Temps de Burst
P1 24
P2 3
P3 3
Le diagramme Gantt est:
560
P1 P2 P3 P1 P1 P1 P1 P1
0 4 7 10 14 18 22 26 30
SEG2106 – Winter 2014 – Hussein Al Osman
![Page 561: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/561.jpg)
EXEMPLE DE RR AVEC QUANTUM DE TEMPS = 4Processus Temps de Burst
P1 24
P2 3
P3 3
Temps d’attente:
• P1: (10-4) = 6• P2: (4-0) = 4• P3: (7-0) = 7
Temps de complétion:
• P1: 30• P2: 7• P3: 10
Moyenne du temps d’attente: (6 + 4 + 7)/3= 5.67
Moyenne du temps de complétion: (30+7+10)/3=15.67
561
P1 P2 P3 P1 P1 P1 P1 P1
0 4 7 10 14 18 22 26 30
SEG2106 – Winter 2014 – Hussein Al Osman
![Page 562: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/562.jpg)
EXEMPLE DE RR AVEC QUANTUM DE TEMPS = 20
Processus Temps de Burst
P1 53
P2 8
P3 68
P4 24
562SEG2106 – Winter 2014 – Hussein Al Osman
![Page 563: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/563.jpg)
EXEMPLE DE RR AVEC QUANTUM DE TEMPS = 20Temps d’attente:
• P1: (68-20)+(112-88) = 72• P2: (20-0) = 20• P3: (28-0)+(88-48)+(125-108) = 85• P4: (48-0)+(108-68) = 88
Temps de complétion:
• P1: 125• P2: 28• P3: 153• P4: 112
Moyenne du temps d’attente: (72+20+85+88)/4 = 66.25
Moyenne du temps de complétion: (125+28+153+112)/4 = 104.5
563SEG2106 – Winter 2014 – Hussein Al Osman
Process Temps de Burst
P1 53
P2 8
P3 68
P4 24
![Page 564: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/564.jpg)
SOMMAIRE DE RRAvantages et Désavantages:
• Meilleur pour les travaux courts (+)• Juste (+)• Le temps de commutation de contexte augmente pour les travaux longs
(-)• Les exemples précédents assument qu’il n’y a pas besoin de
temps additionnel pour l’échange de contexte – en réalité, ceci augmentera le temps d’attente et de complétion sans permettre à un processus de progresser vers la complétion.
• Rappelez-vous: le système d’exploitation utilise des ressources aussi!
Si le quantum choisi est
• Trop grand, le temps de réponse souffre• infini, la performance est la même que FCFS• Trop petit, le débit souffre et le pourcentage de overhead grandit
564SEG2106 – Winter 2014 – Hussein Al Osman
![Page 565: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/565.jpg)
SECTION 18
WEB SERVICES
565
![Page 566: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/566.jpg)
TOPICS
Dreams of a Programmer
What is a Web Service
How to Create a Web Service
How to Call a Web Service
WSDL and SOAP
Why are Web Services Important
566
![Page 567: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/567.jpg)
DREAMS OF A PROGRAMMER
What if there was a way I can call code residing on a different computer…
What if that code was written in a different programing language, yet I can still invoke it…
• There must be a common language that everybody can understand
Wouldn't the world be a better place
• Probably not, it just would make it easier to build complex interconnected systems
We can achieve all of that and more with Web Services
567
![Page 568: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/568.jpg)
WHAT IS A WEB SERVICE ?Web service is a means by which computers talk to each other over the web
• Using HTTP and other universally supported protocols
A Web service is an application that:
• Runs on a Web server• Exposes Web methods to interested callers• Listens for HTTP requests representing commands to invoke
Web methods • Executes Web methods and returns the results
568
![Page 569: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/569.jpg)
WHAT IS A WEB SERVICE ?Web Service Components
• WSDL (Web Services Description Language): a document describing the service that can be rendered by a web service
• SOAP (Simple Object Access Protocol): a protocol used for interaction between the web service and other systems
Therefore, any system that wants to call a Web Service, must acquire the WSDL describing the latter service
• Using that description, relevant SOAP messages can be exchanged
Both WSDL and SOAP are XML Based
569
![Page 570: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/570.jpg)
CREATING AND USING WEB SERVICES
If you are the Web Service Provider:
• Use tools (look up JBossWS) to generate a WSDL file out of a Java interface
• Generate Server Stubs to handle SOAP requests for you• Publish the WSDL file so that potential clients can download it
and used to call your service
If you are a Web Service Client
• Download WSDL file from provider’s public server• Generate Client Stubs to handle SOAP requests for you
• Generated stubs contain an interface that matches the interface on which the WSDL was based
• This way you can call the remote functions defined on the server as if you are performing a local call
570
![Page 571: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/571.jpg)
HIGH LEVEL PERSPECTIVE
WSDL
Client Stubs
Server Stubs
Client code that generates SOAP requests and interprets SOAP responses sent by the server
Server code that interprets SOAP requests and set by the client and generates SOAP responses
Client Stubs
Server Stubs
571
![Page 572: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/572.jpg)
HIGH LEVEL PERSPECTIVE
ServerClient
Client Program
Web Service Implementation
Client Stubs
Server Stubs
Internet
572
![Page 573: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/573.jpg)
WEB SERVICE CALL
Execute Client Code
Client Needs To Invoke Remote Service
Call the Local Stub Interface
Stub Generates Appropriate SOAP MSG to Match Call
Server Waiting for Requests
SOAP Message ReceivedStub Sends SOAP MSG over HTTP
Stub Translates SOAP Call Into Local Call
Server Executes Relevant Operation and Generates Results
Results are Taken by Stub and Inserted into Response Soap MSG
Stub Sends SOAP MSG over HTTP
Client Waits for Response
SOAP Message Received
Stub Translates SOAP MSG into Return Value of Original Call
Time
573
![Page 574: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/574.jpg)
IDEAL WORLD SCENARIO: DISCOVERY SERVICE
Web Services standards were initially accompanied with grand plans regarding service discovery:
• A client may have no prior knowledge of what Web Service it is going to invoke
• So therefore, it needs to discover a Web Service that meets the requirements it needs to accomplish
• Example: locate a Web Service that can supply me with the weather forecast for different Canadian cities
• Therefore, a discovery service is required
574
![Page 575: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/575.jpg)
DISCOVERY SERVICE
Server A
Server B
Discovery Service
Web Service
Conversation Between Servers (based on a true story):
Server B: Hey Server A, I just started providing a new service
Server A: Send me a listing, I’ll post it publicly
Server B: Here’s my listing: “Server B now provides weather inquiry services”
Server A: Confirmed, I just posted it
575
![Page 576: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/576.jpg)
DISCOVERY SERVICE
Client
Server A
Server B
Discovery Service
Web Service
Where can I find a “Weather Service”?
There’s a good “Weather Service” on Server B
How exactly can I use your services
Take a look at this WSDL
SOAP request:getWeatherInfo(“Ottawa”)
SOAP response:“Freezing”
576
![Page 577: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/577.jpg)
DISCOVERY SERVICE
Universal Description, Discovery and Integration (UDDI): registry by which businesses worldwide can list themselves on the Internet
• Allows clients to locate relevant Service Providers
UDDI has not been as widely adopted as its designers had hoped
Nonetheless, you can still find UDDI servers within the confines of a company
• Definitely on a smaller scale than the grand future imagined for this service
577
![Page 578: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/578.jpg)
WSDL
How can a WSDL document describe a service?
Let’s look at a sample…
578
![Page 579: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/579.jpg)
SAMPLE WSDL<definitions name="HelloService" targetNamespace="http://www.examples.com/wsdl/HelloService.wsdl" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.examples.com/wsdl/HelloService.wsdl" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <message name="SayHelloRequest"> <part name="firstName" type="xsd:string"/> </message> <message name="SayHelloResponse"> <part name="greeting" type="xsd:string"/> </message>
<portType name="Hello_PortType"> <operation name="sayHello"> <input message="tns:SayHelloRequest"/> <output message="tns:SayHelloResponse"/> </operation> </portType>
579
![Page 580: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/580.jpg)
SAMPLE WSDL<definitions name="HelloService" targetNamespace="http://www.examples.com/wsdl/HelloService.wsdl" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.examples.com/wsdl/HelloService.wsdl" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <message name="SayHelloRequest"> <part name="firstName" type="xsd:string"/> </message> <message name="SayHelloResponse"> <part name="greeting" type="xsd:string"/> </message>
<portType name="Hello_PortType"> <operation name="sayHello"> <input message="tns:SayHelloRequest"/> <output message="tns:SayHelloResponse"/> </operation> </portType>
URL where the .WSDL file can be obtained
580
![Page 581: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/581.jpg)
SAMPLE WSDL<definitions name="HelloService" targetNamespace="http://www.examples.com/wsdl/HelloService.wsdl" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.examples.com/wsdl/HelloService.wsdl" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <message name="SayHelloRequest"> <part name="firstName" type="xsd:string"/> </message> <message name="SayHelloResponse"> <part name="greeting" type="xsd:string"/> </message>
<portType name="Hello_PortType"> <operation name="sayHello"> <input message="tns:SayHelloRequest"/> <output message="tns:SayHelloResponse"/> </operation> </portType>
Reference to the WSDL and SOAP schemas
(standard XML stuff…)
581
![Page 582: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/582.jpg)
SAMPLE WSDL<definitions name="HelloService" targetNamespace="http://www.examples.com/wsdl/HelloService.wsdl" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.examples.com/wsdl/HelloService.wsdl" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <message name="SayHelloRequest"> <part name="firstName" type="xsd:string"/> </message> <message name="SayHelloResponse"> <part name="greeting" type="xsd:string"/> </message>
<portType name="Hello_PortType"> <operation name="sayHello"> <input message="tns:SayHelloRequest"/> <output message="tns:SayHelloResponse"/> </operation> </portType>
Describes the data being exchanged between the Web service providers and consumers
Two message elements are defined.
The first represents a request message: SayHelloRequest The second represents a response message: SayHelloResponse
582
![Page 583: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/583.jpg)
SAMPLE WSDL<definitions name="HelloService" targetNamespace="http://www.examples.com/wsdl/HelloService.wsdl" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.examples.com/wsdl/HelloService.wsdl" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <message name="SayHelloRequest"> <part name="firstName" type="xsd:string"/> </message> <message name="SayHelloResponse"> <part name="greeting" type="xsd:string"/> </message>
<portType name="Hello_PortType"> <operation name="sayHello"> <input message="tns:SayHelloRequest"/> <output message="tns:SayHelloResponse"/> </operation> </portType>
<portType> can combine one request and one response message into a single request/response operation
sayHello operation consists of a request and response service
583
![Page 584: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/584.jpg)
SAMPLE WSDL<binding name="Hello_Binding" type="tns:Hello_PortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="sayHello">
<soap:operation soapAction="sayHello"/><input>
<soap:bodyencodingStyle="http://
schemas.xmlsoap.org/soap/encoding/"namespace="urn:examples:helloservice"use="encoded"/>
</input><output>
<soap:bodyencodingStyle="http://
schemas.xmlsoap.org/soap/encoding/"namespace="urn:examples:helloservice"use="encoded"/>
</output></operation>
</binding>
<binding> provides specific details on how a portType operation will actually be transmitted
Provides info. about what protocol is being used to transfer portType operations (HTTP here)
584
![Page 585: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/585.jpg)
SAMPLE WSDL<binding name="Hello_Binding" type="tns:Hello_PortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="sayHello">
<soap:operation soapAction="sayHello"/><input>
<soap:bodyencodingStyle="http://
schemas.xmlsoap.org/soap/encoding/"
namespace="urn:examples:helloservice"use="encoded"/>
</input><output>
<soap:bodyencodingStyle="http://
schemas.xmlsoap.org/soap/encoding/"
namespace="urn:examples:helloservice"use="encoded"/>
</output></operation>
</binding>
Information about the SOAP messages that will be exchanged
There are the more interesting components, there are few more…
585
![Page 586: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/586.jpg)
SOAP MESSAGEPOST /InStock HTTP/1.1 Host: www.example.org Content-Type: application/soap+xml; charset=utf-8 Content-Length: 299 SOAPAction: "http://www.w3.org/2003/05/soap-envelope"
<?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> <soap:Header> </soap:Header> <soap:Body> <m:GetStockPrice xmlns:m="http://www.example.org/stock"> <m:StockName>IBM</m:StockName> </m:GetStockPrice> </soap:Body> </soap:Envelope>
586
![Page 587: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/587.jpg)
WHY IS IT SO USEFUL?
Currency Conversion
Web Service
Credit CheckWeb Service
Pay PalWeb Service
WarehouseWeb Service
Online Electronics
Store
Client
ShippingWeb Service
Buy Laptop
Do
we
have
in s
tock
Yes
Conve
rt th
is am
ount
There
you
go…
Is Credit Card Ok
Yes
Cha
rge
Car
d
Don
e
Ship ItemSure
Purchase Confirmed
587
![Page 588: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/588.jpg)
WHY IS IT SO USEFUL?
The latter example is called Service Oriented Architecture: SOA (buzzword)
Refers simply to a software architecture based on discrete pieces of software that provide services to other applications
• Vendor, product and technology independent
588
![Page 589: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/589.jpg)
WHY IS IT SO USEFUL?
Another example inspired from real life:
Old FORTRAN Code(AKA the untouchable)
Remote Modern Client
Shared Services Canada
They need to talk!!!
Canada Revenue Agency Server
589
![Page 590: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/590.jpg)
WHY IS IT SO USEFUL?
Another example inspired from real life:
Canada Revenue Agency Server
Old FORTRAN Code(AKA the untouchable)
Remote Modern Client
Shared Services Canada
We
Se
rvic
e L
aye
r
SOAP
590
![Page 591: SEG 2506 CONSTRUCTION DE LOGICIEL INSTRUCTEUR : HUSSEIN AL OSMAN LA MATIÈRE DE CE COURS EST BASÉE SUR CELLE DES PROFS: GREGOR V. BOCHMANN ( HTTPS://BOCHMANN/)](https://reader038.fdocuments.in/reader038/viewer/2022110117/551d9ddd497959293b8e8eae/html5/thumbnails/591.jpg)
MERCI!
QUESTIONS?
591