• Aucun résultat trouvé

Théorie des langages : Langages réguliers et Automates à Etats Finis

N/A
N/A
Protected

Academic year: 2022

Partager "Théorie des langages : Langages réguliers et Automates à Etats Finis"

Copied!
8
0
0

Texte intégral

(1)

Chapitre 2 :

Théorie des langages :

Langages réguliers et Automates à Etats Finis

Le but de la théorie des langages est de donner un modèle de ce qu’est un langage.

L’objectif de ce chapitre est de :

• Etre capable de décrire un langage : « Description »

• Fabriquer une machine capable de reconnaître les textes qui appartiennent à un langage donné :

« Reconnaissance ».

I. Concepts fondamentaux

I.1. Alphabet (Vocabulaire)

C’est un ensemble fini de symboles (ou caractères).

Notation : Ʃ

Exemples : Alphabet latin { a, b, c ,….}

Alphabet binaire {0, 1}

Alphabet des mots clés { if, then, else,…}

Alphabet des chiffres hexadécimaux { 0, 1, 2, …, 9, A, …, F}

I.2. Mot

Un mot ou chaîne sur un alphabet est une séquence/ suite finie de symboles de l’alphabet.

Notation : ω Exemples :

Alphabet Mot

Ʃ = {a, b} ω = aaa, abba, ababa, bbaba, abbaaaaba

Ʃ = {0, 1} ω = 0011 , 10101, 01101

Ʃ = {if, then, begin, else, end, :=, a, b, 4, c} ω = if a then b else b := 4 ω = if if b a b := := then begin Longueur d’un mot: | ω |: Nombre d’occurrence des symboles dans ω.

Exemples : Ʃ = {a, b}

|aab| = 3 , | abab| = 4 , |abbaaba| = 7 Ʃ = {a, bb}

|a| = 1, |abb| = 2, |bbaabb| = 4, |bbbbabba| = 5

Par convention, il existe une chaîne de longueur 0, c’est la chaîne vide notée ε | ε | = 0 Soit Ʃ un alphabet / Vocabulaire

• Ʃ* : Ensemble des mots formés à partir de Ʃ.

Exemple : Ʃ = {a, b} Ʃ* = { ε , a, b, ab, aab, ababa, aabbbb, babaaaaaaaaabbbbbbbbb,….}

• Ʃ+ : Ʃ* \ { ε } : Ensemble des mots définis sur l’alphabet sauf le mot vide (chaînes non vides).

(2)

Remarque : Si Ʃǂ Ø alors Ʃ* est infini, Ø* = { ε }

• Ʃn où n ≥ 0 : Ensemble des chaînes / Mots sur Ʃde longueur n.

Ʃ0 = { ε } Ʃ1 = Ʃ

Remarque : Occurrences de symboles Ʃ = {a, b}

Soit ω = abb, | ω | = 3 | ω |a = 1 | ω |b = 2

II. Les langages

II.1. Définition

Un langage est un ensemble dénombrable quelconque de chaînes sur un alphabet donné.

C’est un sous ensemble de Ʃ* Exemple : Ʃ = {a, b}

L1 = { anbn / n ≥ 0 } = { ε, ab, aabb, aaabbb, aaaabbbb,… } II.2. Opérations sur les langages

Soient deux langages L et M. On peut définir les opérations suivantes :

Opération Définition et Notation

Union L U M = {ω / ωϵ L ou ωϵ M}

Concaténation L . M = {ω1ω2 / ω1ϵ L et ω2ϵ M} : Ensemble des mots formés en prenant une chaîne dans le er langage et une chaîne dans le 2ème langage.

Intersection L ∩ M = {ω /ωϵ L et ωϵ M}

Puissance Ln = L.L.L.L = {ω1ω2… ωn , ωiϵ L pour tout i ϵ {1,…, n}}

n fois Etoile/ Fermeture de

Kleene L* =

Υ

0

Ln

>=

n =

Υ

=0 i

Li = { ε } U L U L2 U L3 U… U Ln Fermeture transitive

L+ = L*.L =

Υ

=1 i

Li (sans ε) Exemple :

Soit L l’ensemble des lettres { A,…, Z, a,…z }. Soit C l’ensemble des chiffres {0, 1 , …, 9}

Il y a 2 façons de voir : - L et C sont des alphabets

- L et C sont des langages dont toutes les chaînes ont une longueur = 1.

Que définissent les langages suivants : L U C, L.C, L5, L*, L(L U C)*, C+ 1) L U C

2) L.C 3) L5 4) L*

5) L(L U C)*

+

(3)

III. Les langages réguliers / Expressions régulières

III.1. Définition de langages réguliers

Un langage L sur un alphabet Ʃ est défini récursivement comme suit :

• { ε } est un langage régulier sur Ʃ.

• Si a est un symbole de Ʃ, {a} est un langage régulier sur Ʃ et L(a) = {a}

• Si R est un langage régulier sur Ʃ, alors Rn et R* sont des langages réguliers sur Ʃ.

• Si R1 et R2 sont des langages réguliers sur Ʃ, alors R1 U R2 et R1R2 sont des langages réguliers.

Les langages réguliers se décrivent très facilement par une expression régulière.

III.2. Définition d’une expression régulière

Les expressions régulières (E.R) sur un alphabet Ʃ et les langages qu’elles décrivent sont définis récursivement de la manière suivante :

• ε est une E.R qui décrit le langage { ε }

• Si a ϵƩ, alors a est une E.R qui décrit {a}

• Si r est une E.R qui décrit le langage R, alors (r)* est une E.R décrivant R*

• Si r est une E.R qui décrit le langage R, alors (r)+ est une E.R décrivant R+

• Si r et s sont des E.R qui décrivent respectivement les langages R et S alors (r)|(s) est une E.R décrivant R U S

• Si r et s sont des E.R qui décrivent respectivement les langages R et S alors (r)(s) est une E.R dénotant R.S

• Il n’y a pas d’autres expressions régulières Remarques :

1)

| .

*

Orde de priorité croissante

ab*|c équivalent à ((a)(b*))|(c)

2)

La concaténation est distributive par rapport à | : r

(s|t) = rs|rt et (s|t)r = sr |tr

Exemples : Soit Ʃ = {a, b}

1) a|b dénote le langage {a, b}

2) (a|b)(a|b) dénote le langage {aa, ab, ba, bb} = aa|ab|bb|ba

3) a* dénote l’ensemble des chaînes de 0, 1 ou plusieurs a soit { ε, a, aa, aaa, aaaaaaaa, ….}

4) (a|b)* dénote l’ensemble de toutes les chaînes constituées d’un nombre quelconque de a et de b { ε, a, b, ab, aaab, bab, aabbbb, bababa, aabbabab,…} = (a*b*)*

5) a|a*b dénote l’ensemble formé par la chaîne a et toutes les chaînes formées par 0, 1 ou plusieurs a suivi de b : {a, b, ab, aab, aaaaaab, aaaaaaaaaaaaab, aaaaaaaaaaaaaaaab,…}

(4)

III.3. Théorèmes algébriques pour les expressions régulières

Commutativité r|s = s|r

Associativité r|(s|t) = (r|s)|t

Associativité de la concaténation r.(s.t) = (r.s).t

Distributivité de la concaténation par rapport à l’union r.(s|t) = r.s | r.t (r|s).t = r.t |s.t ε neutre pour la concaténation ε.r = r. ε = r

ε est inclus dans la fermeture r* = (r| ε)*

Idempotence de * (r*)* = r*

Remarque :

(a|b)*.a.(a|b)* qui décrit les mots sur {a, b} ayant au moins un a est ambigu.

abaab « colle » à l’expression régulière de plusieurs manières abaab = ε.a.baab = ab.a.ab = aba.a.b

En revanche b*a(a|b)* décrit le même langage et n’est pas ambigu.

abaab = ε.a.baab

IV. Automates à états finis

Les Automates à Etats Finis (A.E.F) sont des reconnaisseurs pour les langages réguliers.

Un reconnaisseur pour un langage est un programme qui prend en entrée une chaîne x et répond « OUI » si x est une chaîne du langage et « NON » sinon.

IV.1. Définition d’un A.E.F

Un automate à états finis est un quintuplet A = < Q, Ʃ, δ, q0, F>

Q : Ensemble des états de l’automate

Ʃ : Alphabet d’entrée (On suppose que ε n’est jamais un membre de Ʃ)

δ: Fonction de transition qui donne pour chaque état et chaque symbole de Ʃ l’ensemble des états suivants. δ : Q×∑→Q

δ(q,a) = q’ avec (q, q’) ϵ Q2 et a ϵƩ

q0 : ϵ Q distingué comme l’état de départ (état initial).

F : ⊂Q distingué comme étant l’ensemble des états d’acceptation (états finaux).

Exemple :

Soit l’automate défini comme suit :

Ʃ={a,b} Q= {0, 1, 2, 3} q0= {0} F= {3}

δ(0,a) = {0,1} δ(0,b) = {0} δ(1,b) = {2} δ(2,b) = {3}

Représentation du graphe de transition

Cet automate permet de reconnaître l’expression régulière : (a|b)*abb L’ensemble des chaînes qui se terminent par abb.

(5)

Un AEF peut être représenté par une table de transition.

Etat a b 0 {0,1} {0}

1 Ø {2}

2 Ø {3}

3 Ø Ø

Acceptation de chaînes d’entrée par des automates

Un automate accepte une chaîne d’entrée x ssi il y a un chemin dans le graphe de transition partant de l’état initial et aboutissant à l’un des états finaux.

Exemple : Soit Ʃ={a,b}

Automate qui reconnaît l’expression régulière a b (a|b)*

Automate qui reconnaît l’expression régulière aa*| bb*

0

4 2 a

b

a

b 4 1

IV.2. Définition d’un AFD

Un Automate à états Finis Déterministe (AFD) sur un alphabet Ʃ est un automate qui vérifie les deux conditions suivantes :

- Il possède un seul état initial

- Pour tout état q, et pour tout symbole a de Ʃ, il existe au plus une transition partant de q et portant l’étiquette a.

Exemple :

Soit Ʃ={a,b}. Langage qui reconnaît (a | b)* b

Solution Non Déterministe Solution Déterministe

0 1

b a,b

0 1

a b b

a

IV.3. Déterminisation d’un Automate à états Finis Non déterministe (AFN) Principe : Considérer des ensembles d’états plutôt que des états

Déterminisation :

1) Partir de l’état initial E = {e0}

2) Construire l’ensemble E1 des états obtenus à partir de E par la transition a: E(1) = δ(E,a) 3) Recommencer 2 pour toutes les transitions possibles pour chaque nouvel ensemble d’état E(i) 4) Tous les ensembles contenant au moins un état terminal deviennent terminaux

5) Renuméroter alors les ensembles d’états en tant que simples états

(6)

Exemple :

Soit l’automate décrit comme suit :

0 1

a,b b b

a 2

a,b

Table de transition associée : a b

0 0 0,1 1 2 1 2 2 2

Déterminisation de l’automate Etat a B

0 0 0 0,1 1 0,1 0,2 0,1 2 0,2 0,2 0,1,2 3 0,1,2 0,2 0,1,2

0 1

a b

b

a 2

3 a

a b b

Remarque : Un automate est dit complet si de chaque état sortent toutes les transitions possibles étiquetées par les symboles de Ʃ.

IV.4. Extension des AFN : AFN avec ε-transition(AFNε)

Un AFN est un automate à états finis qui autorise à partir d’un état donné plusieurs transitions avec un même symbole, sachant que ε ne fait pas partie de l’ensemble des symboles Ʃ.

Il peut être pratique de considérer des transitions spontanées ç.à.d. des transitions sans lire de nouveaux symboles. Une transition où on change d'état sans lire de symbole est traditionnellement appelée une ε- transition car tout ce passe comme si on avait lu le mot vide ε à la place d'un symbole.

Définition : ε-transition

On appelle ε-transition, une transition par le symbole ε entre 2 états.

Un AFN avec ε-transition est appelé AFNε. Il est utilisé en général pour composer les automates.

Tout AFN peut être vu comme un AFNε.

IV.4.2. Construction d’AFNε à partir d’expressions régulières : Construction de Thompson Le principe est basé sur la construction de Thompson, basée sur la récursivité des expressions régulières.

Pour une expression régulière S, on note A(S) un automate reconnaissant cette expression.

Expression régulière Automate qui reconnaît

Ε

R

0 1

r

r et s

(7)

r | s

r*

r

+

En appliquant la construction de Thompson, convertissez les expressions régulières suivantes en AFN.

1) a+(bc)* 2) (ab | bca)+ bb (ab | cb)*

IV.4.3. Déterministation d’un AFN avec ε-transition

Définition : ε-fermeture

On appelle ε-fermeture d’un ensemble d’états T = {e1,e2 ,…, en} l’ensemble des états accessibles depuis un état ei de T par des ε -transitions.

ε-fermeture({e1,…,en}) = {e1,…,en}U{e tq ∃ei avec i =1,2,…,n tq ei

ε ε ε

e}

Déterminisation :

1) Partir de ε-fermeture de l’état initial

2) Rajouter dans la table de transition toutes les ε-fermetures des nouveaux « états » produits, avec leurs transitions.

3) Recommencer 2 jusqu’à ce qu’il n’ y ait plus de nouvel « état »

4) Tous les états contenant au moins un état terminal deviennent terminaux 5) Renuméroter alors les états

Exemple :

Soit l’automate décrit comme suit :

Déterminisation de l’automate

AFN Etat AFD A B

{0} A {1,2} B {1} C {0, 1, 2} B {1, 2} B {1, 3} D {0,1} C {1, 2} B {1} C {0,1, 3} D {1, 2} B {1} C

A D

b a

b a

B a

a

b

b C

(8)

III. Minimisation d’un AFD

L’objectif est d’obtenir un automate ayant le minimum d’états possibles. Certains états peuvent être considérés équivalents.

Principe : On définit des classes d’équivalence d’états par raffinements successifs. Chaque classe d’équivalence obtenue forme un seul et même état du nouvel état.

Minimisation :

1) Faire deux classes : A contenant les états terminaux et B contenant les états non terminaux.

2) S’il existe un symbole a et deux états e1 et e2 d’une même classe tel que δ(e1,a) et δ(e2,a) n’appartiennent pas à la même classe, alors créer une nouvelle classe et séparer e1 et e2. on laisse dans la même classe tous les états qui donnent un état d’arrivée dans la même classe.

3) Recommencer 2 jusqu’à ce qu’il n’y ait plus de classes à séparer.

4) Chaque classe restante forme un état du nouvel automate.

Exemple :

Soit l’automate décrit comme suit :

A E

b b

b

a C

a b

b

a B D

a a

Minimisation de l’automate

A B C D E

I I I I II a

b I I

I I

I I

I II

I I I I I III II a

b I I

I III

I I

I II

I I I IV I III II a

b IV I

IV III

IV I

IV II

IV I I IV I III II

I : {A, B, C, D}

II : {E}

I :{A, B, C}

II : {E}

III : {D}

I : {A, C}

II : {E}

III : {D}

IV: {B}

Automate minimal:

I

III IV

II b

b b

a

a a

a

II

Références

Documents relatifs

Cela ne préjuge en rien du comportement de la machine pour un mot qui n’est pas dans L : en particulier cette définition est compatible avec une machine de Turing bouclant sans fin

Pour chaque partie U de N, nous identifions alors deux ensembles finis d’arbres de dériva- tion et de mots apparaissant à leur frontière. la section 6.2.2) que l’arbre de

Donnez les langages générés par les expressions

Licence Informatique –L1 Automates. Théorie des

Donnez un automate non-déterministe sur Σ ={0, 1, 2, 3, 4, 5, 6, 7, 8, 9} qui accepte les mots dont le dernier chiffre soit un chiffre qui ait déjà apparu...

● Théorème : pour tout automate, il existe une expression régulière reconnaissant le même langage. – Possibilité de transformer un automate en

Le premier reproche est que cette notion de langage - un sous-ensemble d’un monoïde libre - est beaucoup trop pauvre pour rendre compte des plus simples structures

On montre que tout langage régulier simple à droite est d'une manière unique produit d'un langage régulier pur à droite et d'un langage régulier étoile obtenu à partir d'un