Vous êtes sur la page 1sur 26

Chapitre 1.

5
Grammaires régulières
Introduction
•  Dans cette section, nous verrons un nouvel
outil servant à la génération de langages: les
grammaires.
•  Changement de point de vue: au lieu de
considérer des machines qui reconnaissent un
langage donné, on construit un ensemble de
règles qui servent à construire les mots d’un
langage.
Définition
•  Une grammaire (ou grammaire de phrases ou
grammaire à structure de phrases) est un
quadruplet ( V, T, S, R ) où
–  V est un ensemble fini de symboles non terminaux
(alphabet non terminal).
–  T est un ensemble fini de symboles terminaux
(alphabet terminal).
–  S ∈ V est le symbole de départ qu’on nomme
aussi axiome ou symbole initial.
–  R est un ensemble fini de règles de réécriture
(ou productions ou règles de substitution). Ces
règles sont formées d’un terme de gauche,
d’une flèche (→) et d’un terme de droite. Les
termes gauche et droit peuvent être n’importe
quelle combinaison de symboles de V ou de T,
pourvu qu’il y ait au moins un symbole de V à
gauche. Le côté droit peut être vide, ce qui est
indiqué par un λ. On parle alors de règle-λ.
Exemple
•  Voici une grammaire (V,T,S,R) où
–  V = {S, A, B, C};
–  T = {a, b, c};
–  S est le symbole de départ;
–  R = { S → ASC
S→B
B → bB
B→λ
A→a La règle B → λ est une
C→c} règle-λ.
Convention
•  Les majuscules sont des symboles non
terminaux.
•  Les minuscules sont des symboles terminaux.
•  S est le symbole initial.
•  Cette convention permet de simplifier la
description d’une grammaire en donnant
seulement la description de R.
Dérivation
•  Une grammaire génère une séquence de symboles
terminaux par dérivation.
•  Une dérivation est une suite d’étapes où chaque étape
consiste à remplacer (tant que c’est possible) un
patron apparaissant du côté gauche d’une règle de R
par le côté droit correspondant.
•  La chaîne initiale est le symbole de départ de la
grammaire.
Exemple
•  À partir de l’exemple de grammaire précédent, on obtient la
dérivation suivante:

•  Rappel :
{S → ASC B → bB
S→B B→λ
A→a C→c}

•  S
⇒ 〈 Production S → ASC. 〉
ASC
⇒ 〈 Production A → a. 〉
aSC
Rappel :
aSC (Rappel) {S → ASC B → bB
S→B B→λ
⇒  〈 Production S → B. 〉 A→a C→c}
aBC
⇒ 〈 Production B → bB. 〉
abBC
⇒ 〈 Production B → λ. 〉
abC
⇒ 〈 Production C → c. 〉
abc
–  On peut écrire les dérivations sous une forme plus
compacte en n’écrivant pas explicitement les règles
utilisées. Par exemple, la dérivation précédente devient:

Rappel :
{S → ASC B → bB
S→B B→λ
A→a C→c}

–  S ⇒ ASC ⇒ aSC ⇒ aBC ⇒ abBC ⇒ abC ⇒ abc

–  La transformation résultant de l’utilisation d’une règle


de réécriture est indiquée par la flèche ⇒.
–  Il n’y a pas d’ordre d’utilisation des règles de
dérivation.
–  On peut obtenir la séquence abc avec la dérivation
suivante:
Rappel :
{S → ASC B → bB
S→B B→λ
A→a C→c}

–  S ⇒ASC ⇒ASc ⇒aSc ⇒aBc ⇒abBc ⇒abc


–  Celle que nous avions déjà vue était:
–  S ⇒ASC ⇒aSC ⇒aBC ⇒abBC ⇒abC ⇒abc
Exemple
•  Voici un exemple de grammaire où le côté
gauche des productions est plus complexe.
•  Les règles de réécriture sont:
S → abNSc bNa → abN
S→λ bNb → bbN
bNc → bc
–  On peut dériver la séquence aabbcc comme suit:

S ⇒ abNSc ⇒ abNabNScc ⇒ abNabNcc


⇒ aabNbNcc ⇒ aabNbcc ⇒ aabbNcc ⇒ aabbcc

Règles:
S → abNSc bNa → abN
S→λ bNb → bbN
bNc → bc
Exercice
•  Soit G = (V, T, S, R) la grammaire dont les
règles de réécriture sont:
S → AB A → aA B → Bb
A→λ B→b

1) Donner V et T selon la convention.


V = { S,A, B }
T = {a, b }
S → AB A → aA B → Bb
A→λ B→b

2) Dire si les séquences suivantes sont générées par cette


grammaire. Si oui donner une dérivation, si non dire
pourquoi.
- aabb
R: Oui. S ⇒ AB ⇒ aAB ⇒ aaAB ⇒ aaB ⇒ aaBb ⇒ aabb
- abbb
R: Oui. S ⇒ AB ⇒ aAB ⇒ aB ⇒ aBb ⇒ aBbb ⇒ abbb
S → AB A → aA B → Bb
A→λ B→b

- λ
R: Non. Il n’y a pas de production B → λ.

- ba
R: Non. La grammaire permet seulement de
générer une suite de a suivie d’une suite de b.
Définition
•  Soit G = (V, T, S, R). Si T ⊆ Σ où Σ est un
alphabet, on dit que G est une grammaire sur
Σ. Soit

L(G) = {w∈T*: w est dérivée de S}.

•  On dit que L(G) est le langage généré par G.


Exemple
•  Reprenons la grammaire
S → ASC S→B B → bB
B→λ A→a C→c
•  Une application répétée de la production
S → ASC conduit à des séquences de la forme
AnSCn.
•  Éventuellement la production S → B est
appliquée: AnBCn.

•  Ensuite la règle B → bB peut être utilisée 0 ou


plusieurs fois: AnbmBCn.

•  En utilisant B → λ: AnbmCn.

•  Finalement, en utilisant n fois A → a et C → c on


obtient anbmcn.
•  Les règles sont suffisamment simples pour
voir que tout autre ordre de dérivation
conduit à des séquences similaires.
•  Le langage généré par G est donc
L(G) = {anbmcn : m ∈N ∧ n ∈N}.
•  Ce langage contient λ. En effet, la séquence
vide peut être générée par la production
S → B suivie de B → λ.
Exercices
•  Dire quel est le langage généré par chacune
des grammaires suivantes.

1) S → AB A → aA B → Bb
A→λ B→b
R: L = {anbm : m ∈N+ ∧ n ∈N }.

2) S → aSb S → ab
R: L = {anbn: n ∈N+ }
Définition
•  Une grammaire régulière est une grammaire
avec les restrictions suivantes:
–  Le côté gauche des règles consiste en un seul
symbole non terminal.
–  Le côté droit des règles est
•  soit un symbole terminal suivi d’un symbole non
terminal,
•  soit un seul symbole terminal,
•  soit λ.
Remarque
•  À cause de ces restrictions, une grammaire
régulière permet de générer les symboles de
gauche à droite.
•  Après k applications de règles de production
qui ne sont pas des λ-règles le mot généré est
de la forme
–  a1a2 ... akV où V est non-terminal et a1, ..., ak sont
terminaux.
–  ou a1a2 ... ak où a1, ..., ak sont terminaux.
Exemple
•  La grammaire

C → bB C → a D → λ

est une grammaire régulière, mais pas

bD → A A → aCb BA → DeC
Exercice
•  Dire si les grammaires suivantes sont
régulières.
1) S → AB A → aA B → Bb
A→λ B→b
R: Non, à cause de S → AB et de B → Bb.

2) S → aSb S → ab
R: Non, les deux règles violent les restrictions des
grammaires régulières.
Exercice

•  Construire une grammaire régulière générant


le langage {apbcq: p ∈N ∧ q ∈N+}.
•  R:
S → aS A→ cA
S → bA A→c

Vous aimerez peut-être aussi