Expressions rationnelles

Slides:



Advertisements
Présentations similaires
CONSTRUCTION DE TRIANGLES
Advertisements

CHAPITRE 6 Vecteurs et translations
CALCUL LITTERAL Bernard Izard 4° Avon LT
Chap. 4 Recherche en Table
L-System et modélisation de plantes…
Algorithmes et structures de données avancés
DTD Sylvain Salvati
CHAPITRE 6 Les Racines Carrées
24 septembre 2007Cours de compilation 4 - Intranet1 Cours de compilation Techniques danalyse descendantes.
CALCUL LITTERAL 3° Avon 2010 Bernard Izard 05-LT I – NOTATIONS
Système formel Nous avons introduit : signes de variables (x, y, z, …), de constantes (0, 1), d’opérations (+, ), de relations (=, ) Axiomes : ce sont.
1°) consolider une connaissance des nombres
Chap 1 Grammaires et dérivations.
Chap. 1 INTRODUCTION Beaucoup de problèmes de la vie courante, tels la gestion de réseaux de communication ou l'ordonnancement de tâches, correspondent.
Nicolas Bourbaki.
INTRODUCTION.
Automate asynchrone.
Chapitre 1 Automates finis
IFT313 Introduction aux langages formels
ALGEBRE DE BOOLE Mohamed Yassine Haouam
Introduction à l'informatique linguistique
IFT313 Introduction aux langages formels
Conception et analyse des algorithmes
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
OCaml - Les listes L3 MI.
Créer une animation simple Gif avec ImageReady.
Analyse lexicale Généralités Expressions rationnelles Automates finis
IFT451 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313.
Programmation fonctionnelle Le langage LISP
Décrire une isométrie par Jacqueline Larouche, 2007 modifié par JiPi.
Espaces vectoriels Montage préparé par : S André Ross
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Expressions régulières et hash tables
IFT Complexité et NP-complétude
Chapitre 7: Le théorème de Kleene
Hiver 2003SEG2501 analyse lexicale1 Notes supplémentaires au sujet de lanalyse lexicale Exemples Dérivation dun NFA qui accepte le même langage (algorithme:
Algorithmes d ’approximation
Applications des langages hors-contextes Les analyseurs syntactiques ascendants GNU Yacc et Bison.
Mise en oeuvre des MMCs L'utilisation des MMCs en reconnaissance des formes s'effectue en trois étapes : définition de la topologie de la chaîne de Markov,
Partie II Sémantique.
Sémantique dénotationnelle
2. Optimisation sans contrainte Fonctions à une seule variable
Rappel Modèle analyse-synthèse de la compilation
Mathématiques 9: L’algèbre.
Indécidabilité.
Programmation linéaire en nombres entiers : les méthodes de troncature
Programmation procédurale Transformations
Expressions régulières et hash tables
Paradigmes des Langages de Programmation
Programmation fonctionnelle Lambda-calcul
PROGRAMMATION INFORMATIQUE D’INGÉNIERIE II
Programmation linéaire en nombres entiers
D.E ZEGOUR Ecole Supérieure d’Informatique. Problèmes de décision Concepts de base Expressions régulières Notation particulière pour exprimer certaines.
Problème de double digestion
Sélection de colonnes (la projection)
POWERPOINT.
Programmation fonctionnelle Preuve
Chapitre 3: Translation et Vecteurs
Recherche par automates finis
Les transducteurs En anglais transducers.
Abdelkader Heni FUNDP Syntaxe et sémantique Abdelkader Heni FUNDP
MATHÉMATIQUES DISCRÈTES Chapitre 1 (Section 5)
Algèbre de Boole Définition des variables et fonctions logiques
Chap 1 Grammaires et dérivations.
Systèmes formels 1. Définition d'un SF Morphologie Théorie propre
Résolution des équations différentielles
Chap. 3 Récursion et induction. Les définitions par récurrence consistent à construire des objets finis, à partir d'autres, selon certaines règles. Les.
LES POSTULATS DE LA MÉCANIQUE QUANTIQUE
9e Maths: Les polynômes Mme Mercer.
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 4 Support de cours rédigé par Bernard COFFIN Université.
Transcription de la présentation:

Expressions rationnelles Il existe un autre moyen de définir les langages reconnaissables. Sont reconnaissables les langages qui peuvent être exprimés par les expressions rationnelles.

Définition On construit une expression rationnelle de la façon suivante : toute lettre est une expression rationnelle le mot vide est une expression rationnelle si X, Y sont des expressions rationnelles, alors X + Y, XY, X* sont des expressions rationnelles.

Notation On utilise des parenthèses comme dans l'arithmétique. X + Y désigne l'union des expressions X et Y. X + Y = {u| uX ou uY} XY désigne le produit (concaténation) XY={uv| uX, vY} L'étoile désigne une séquence de longueur arbitraire (y compris zéro) d'éléments de l'expression étoilée : X* = {u1u2…un| u0, uiX} (On convient ici que le mot vide appartient à X).

Exemple 1 X = (ab+ba)* désigne l'ensemble des mots de la forme w = avec ui = ab ou ui = ba pour "n 0 £ n <∞. Les mots appartenant à cet ensemble sont, par exemple, , ab, ba, abba, abab, baba, baab, mais non pas aabb ni abaa, donc on ne peut pas simplifier l’écriture de cet ensemble comme (a+b)*.

Exemple 2 Les éditeurs de textes permettent l'usage d'expressions rationnelles pour rechercher une chaîne de caractères dans un fichier. Dans EMACS on écrit : [a-c][a-b]* au lieu de (a+b+c)(a+b)* . au lieu de la somme de tous les caractères sauf new-line. x$ au lieu de x suivi du caractère new-line.

Théorème de KLEENE (les années 50). Un langage est reconnaissable par automate fini ssi il peut être décrit par une expression rationnelle. La preuve doit se faire séparément dans chacune des directions en donnant un algorithme pour passer des expressions rationnelles aux automates finis et inversement.

Expression rationnelle  Automate fini On construit pour chaque expression rationnelle un automate asynchrone qui reconnaît le langage défini par cette expression. Pour x = , on marque : a Pour x = a, aA,  on marque :

En ce qui concerne le reste des opérations, on doit choisir un jeu de règles bien défini, sinon on ne pourra pas programmer la construction d’un automate suivant une expression rationnelle. On impose surtout la règle selon laquelle dans tout état entrent deux flèches au maximum, de tout état sortent deux flèches au maximum, tout automate a un unique état initial tout automate a un unique état terminal.

Opérations +, produit (concaténation) et * : Soient X, Y deux expressions rationnelles. On suppose déjà construits pour X et Y les automates A et B qui vérifient les trois règles que nous venons de spécifier. On suppose qu'aucune flèche étiquetée ne sort de l'état terminal (ici on ne parle pas de la flèche sans étiquette qu'on utilise pour marquer l'état final, dont la signification est tout à fait différente).

A’ On notera les automates A et B de la façon suivante :     de telle façon qu’on puisse voir explicitement ses états initial et terminal sans plus de détail pour d’autres états, et où A est le nom de tout l’automate, et A’ celui de la « boite noire » à l’intérieur. Les deux flèches entre 1 et A’, ainsi qu’entre A’ et 2, marquent le nombre maximum, il peut n’y avoir qu’une seule. 1 A’ 2

Nous allons construire des automates ayant les mêmes quatre propriétés pour X+Y, XY et X*. Pour X+Y on prend l'automate asynchrone suivant :  A’ B’

Pour XY on prend l'automate asynchrone suivant, obtenu en confondant l'état initial de B avec l'état terminal de A :     B’ A’    

Pour X* on prend l'automate asynchrone suivant :  A

Ex. X=(ab + ba)*  2 3 4 b a 5 6 7 9 8 1 b a

Cet automate asynchrone peut être déterminisé et réduit (minimisé), en produisant un automate à 3 états + poubelle : A C B P b a a,b

Ou bien, en modifiant la notation, Voici comment : Déterminisation L’état initial de l’automate déterministe est composé d’états 0,1,2,5,9 (les états où on peut arriver en lisant le mot vide). Les états terminaux sont ceux qui contiennent l’état 9. On introduit une poubelle pour que l’automate déterministe obtenu soit complet. Ou bien, en modifiant la notation, L’état initial : I = {(01259)} = {A}, les états terminaux T = {(01259),(124589),(125789)}={A,D,E}. Etat a B b (01259) 3 6 A C   P (124589) D (125789) E

Voici l’image graphique de l’automate déterminisé : B a b a,b P E D

on va utiliser A au lieu de (ADE). Minimisation Groupe d’états non terminaux : I = {B,C,P}. Groupe terminaux : II = {A,D,E}. Etat a b B P D I II C E A Les états B, C et P se séparent. Les états A , D et E ne peuvent jamais se séparer car ils mènent aux mêmes états de l’automate initial (B en lisant a, et C en lisant b). On obtient donc 4 états : B,C,P et (ADE) ; pour simplifier la notation, on va utiliser A au lieu de (ADE). La table de transitions de l’automate minimal est donc avec un seul état initial et un seul état terminal A. Etat a b A B C P D E

On retrouve donc l’image graphique suivant : B P b a a,b

Automate fini  Expression rationnelle Pour déterminer le langage reconnu par un automate, on construit un système d'équations. Voici comment : Chaque état représente une expression rationnelle correspondant à l'ensemble des mots qu’on peut lire pour l'atteindre (à partir de l’état initial). Par exemple, si on a a 2 1

La flèche non étiquetée qui entre dans l’état initial correspond à  . On peut utiliser la loi distributive (du genre (a+b)c=ac+bc ). X=X=X On peut utiliser la règle suivante :   X = XY + Z X = ZY* (*) eÏY

Une flèche initiale (), Ex. b Le premier état (état 1) correspondant à l’expression rationnelle X1 reçoit des flèches suivantes : Une flèche initiale (), Une flèche partant de lui-même, marquée b, ce qui donne X1b, Une flèche partant de l’état 3, marquée b, ce qui donne X3b. On obtient donc une équation X1 = X1b + X3b + e. En continuant de la même façon pour deux autres états, on obtient un système d’équations :   X1 = X1b + X3b + e. (1) X2 = X1a + X2a (2) X3 = X2b (3) a 1 a 2 3

Remplaçant (3) dans (1), on obtient X1 = X1b + X2bb +e (4) Appliquant la règle (*) à (2), on obtient X2 = X1a +X2a Û X2 = X1aa* (5) Remplaçant X2 dans (4), on obtient X1= X1b +X1aa*b2 + e =X1(b + aa* b2) + e (6) Appliquant la règle (*) à (6), on obtient X1 = e (b + aa*b2)*= (b + aa*b2)* (7) et puis, de (5) X2 = (b+aa*b2)*aa* (8) et de (3) X3 = (b + aa*b2)*aa*b (9)   L’état 3 étant l’état terminal, l’automate reconnait le langage décrit par l’expression rationnelle (b + aa*b2)*aa*b.

Remarque Il peut facilement arriver qu’en résolvant un système d’équations sur des expressions rationnelles dans un ordre différent, on peut obtenir un résultat différent. De tels résultats différents seront, bien sûr, équivalents, mais il est difficile de le voir immédiatement car l’algèbre des expressions rationnelles est fort compliquée (nous en avons vu un seul exemple  la règle (*) ). Une des meilleures façons de voir que deux expressions rationnelles sont équivalentes est de construire à partir d’elles deux automates asynchrones, les déterminiser et minimiser et arriver au même automate minimal.