Vous êtes sur la page 1sur 82

Année 2013-2014

INF 55 : Automates avancés


L3 Informatique
2013-2014

Mme SOGOBA Jacqueline KONATE


Assistant à l'USTTB
jacqueline.konate@gmail.com
Chapitre 4 :
Grammaires et
Langages hors-contexte

Partie 1

2
Grammaires et
Langages hors-contexte

Grammaires hors-contexte

Forme normale pour les grammaires
hors-contexte

Arbres syntaxiques

Forme normale pour les grammaires
hors-contexte

Lemme de l'étoile pour les langages
hors-contexte

3
Grammaires hors-contexte

Formalisme

Dérivations

Forme de Backus-Naur

Dérivations à gauche et à droite

4
Fondements linguistique
● Chomsky (1959): linguiste travaillant sur les
langues naturelles
● Exemple : Pour construire une phrase

grammaticalement correcte en français, on peut


procéder ainsi :
● PHRASE→SUJET VERBE COMPLEMENT

● SUJET→MOUSSA| AWA| MADOU

● VERBE→MANGE| TRAVAILLE| PARLE

● COMPLEMENT→ARTICLE NOM ADJECTIF

● ARTICLE→UNE| UN| LE| DES

● NOM→COURS| BANANES| LANGUE

● ADJECTIF→DIFFICILE | AGREABLE |

DELICIEUSES
5
Fondements linguistiques
● On peut construire par des substitutions
successives des phrases telles que :

● AWA PARLE UNE LANGUE AGREABLE


ou
● MOUSSA TRAVAILLE UN COURS DIFFICILE

ou
● MADOU MANGE DES BANANES DELICIEUSES

6
Grammaire hors-contexte (GHC)
● Une grammaire hors-contexte (algébrique)
est une notation pour la description des
langages
● Elle utilise des « variables » pour

représenter un ensemble de mots (langages)


● Elle est plus expressive que les automates

finis ou les expressions régulières, mais elle


ne peut pas définir tous types de langages.
● Elle est très utile pour les structures

imbriquées, par exemple les parenthèses


dans les langages de programmation.
7
Formalisme des GHC
● Définition: Soient Σ1 et Σ2 deux alphabets finis
(supposés disjoints). Une grammaire hors
contexte est un quadruplet G = (Σ 1, Σ2, P, S) où :
✔ Σ est l'ensemble des variables (ou symboles
1
non terminaux). Les variables sont définies les
unes par les autres de façon récursive.
✔ Σ est l'ensemble des symboles terminaux.
2
✔ P est un ensemble des règles de dérivations

ou productions. P est une relation récursive


sous cette forme: Σ1 → (Σ1 × (Σ1 ∪ Σ2)*)
✔ S est le Symbole de départ. Il est aussi appelé

axiome de la grammaire. S ⊂ Σ1 8
Productions et dérivations
● A, B, C,... sont des variables.
● a, b, c,... sont des terminaux.

● ..., X, Y, Z sont des terminaux ou des

variables.
● ..., w, x, y, z sont uniquement des chaînes de

terminaux.

α, β, γ, ... sont des chaînes de terminaux
et/ou de variables.

9
Productions et dérivations
● Soit la grammaire hors contexte G = (Σ 1, Σ2, P, S)
où Σ1 = {S, A} et Σ2 = {a, b}.

● Les productions de G sont définies par :


S → AA
A → AAA | bA | Ab | a .


On dit que αSβ→αγβ est une dérivation dans G si
S →γ est une production de G.
● Exemple :

✔ aaAb→ aaab est une dérivation de G car A→a

est une production de G.


10
Dérivations itérées
● →* signifie “zéro ou plus d'étapes de dérivation.”


Cas de base: α →* α pour toute chaîne α.

Cas d'induction: si α→* β et β→γ, alors α→* γ.

● Exemple:
✔ S→01; S→0S1.

✔ S→0S1→00S11→000111.

✔ S →* S; S →* 0S1; S→* 00S11; S→* 000111.

11
Formes déclaratives
● Toute chaîne de variables et/ou de terminaux
dérivée du symbole de départ est appelée une
forme déclarative.


Formellement, α est une forme déclarative si
S →* α.
● Remarque : une forme déclarative d'une une

grammaire G est tout simplement un mot u


appartenant au langage généré par G.

12
Langages hors contexte (LHC)

13
Langage hors contexte (LHC)
● Définition: un langage L est dit hors
contexte s’il existe une grammaire hors
contexte G = (Σ1, Σ2, P, S) telle que L = L(G).

Si u ∈L(G) alors u est une chaîne terminale
● G et H sont équivalentes si elles génèrent le

même langage : L(G) = L(H).


● Il y a des LHC qui ne sont pas des langages

réguliers, tels que le langage défini par


{0n1n/ n ≥ 0}
● Cependant tous les langages non réguliers

ne sont pas des LHC.


14
Exemple
● Soit G = (Σ1, Σ2, P, S) où :
✔ Σ1= {S} et Σ2= {0,1}

P: S → 01 et S → 0S1

● Cas de base: u = 01 est dans le langage.


● Cas d'induction: si u est dans le langage, alors

0u1 l'est aussi.

● Le langage L = L(G) = {u ∈Σ2*/ u = 0k1k, 0< k ≤n,


n>0} = {0n1n, n>0}
15
Notation de Backus-Naur
BNF
Notation BNF
● Les grammaires pour les langages de
programmation sont souvent écrites en
BNF (Backus-Naur Form).

● Les variables sont des mots entre < … >;


Exemple: <déclaration>.

● Les terminaux sont souvent des chaînes


de plusieurs caractères en gras ou
soulignées

● Exemple: while or WHILE.


17
Notation BFN
● Symbole ::= est souvent utilisé pour →.

● Symbole | est utilisé pour “ou”

● Exemple:
✔ S::= 0S1 | 01 est un raccourci pour

S→ 0S1 et S→01.

18
Notation BFN – fermeture de Kleene
● Le symbole ... est utilisé pour “un ou plusieurs.”
● Exemple: <digit> ::= 0|1|2|3|4|5|6|7|8|9

● <entier> ::= <digit>...

✔ A noter: ce n'est pas exactement le * des

expressions régulières


Translation: Remplace α... par une nouvelle
variable B et des productions suivantes: B→Bα| α.
● Exemple: la grammaire pour les entiers peut être

remplacée par:
✔ A ::= AB | B

✔ B ::= 0|1|2|3|4|5|6|7|8|9

19
Notation BNF : Éléments Optionnels
● Mettre un ou plusieurs symboles dans […] pour les
rendre optionnels.
● Exemple: <déclaration> ::= if <condition> then

<déclaration> [; else <déclaration>]


Translation: remplacer [α] par une nouvelle
variable A avec des productions A→α | ε.
● Exemple: la grammaire pour if-then-else peut être

remplacée par:
S→iCtSA
A→;eS | ε

20
Notation BNF – groupage
● Utiliser { … } pour entourer une séquence de symboles qui nécessitent d'être traités
comme un tout. Les symboles sont suivis par ... pour “un ou plusieurs.”

● Exemple:
<liste de déclarations> ::= <déclaration>
[{;<statement>}...]

21
Translation : groupage

Il est possible de créer une nouvelle variable A pour {α}.

une production pour A: A→α.

utiliser A à la place de {α}.

● Exemple :
L→S [{;S}...]
● Remplacer par L→S [A …], A →;S

✔ A donne {;S}.

● Puis L→SB, B →A... | ε, A →;S

● B donne [A … ] (zéro ou plusieurs A).

● Finalement L→SB, B→C | ε, C →AC | A, A →;S

✔ C donne A ...

22
Dérivations de gauche et
dérivations de droite
● Les dérivations permettent de remplacer toutes les
variables dans une chaîne. Une même chaîne
peut avoir plusieurs dérivations différentes.

● Dérivations à gauche :
✔ Soit uAα→ uβα si u est une chaîne de terminaux
g
uniquement et A→β est une production.
✔ Aussi, α→ * β si α devient β par une séquence de
g
0 ou plusieurs étapes →g.

23
Exemple : dérivations de gauche
● Grammaire des parenthèses bien fermées:
S →SS | (S) | ()

● S→g SS →g (S)S→g (())S→g (())()

● Ainsi, S →g* (())()

● S →SS→S()→(S)() → (())() est une dérivation,


mais pas une dérivation de gauche.

24
Dérivations de droite
● αAu →d αβu si u est une chaîne de terminaux
uniquement et A→β est une production.
● Ainsi, α →* β si α devient β par une suite de 0 ou
d
plusieurs étapes de →d.

● Exemple : Grammaire des parenthèses bien


fermées :
S→SS | (S) | ()
✔ S → SS → S()→ (S)()→ (())()
d d d d
✔ Ainsi, S → (())()
d
✔ S→SS→SSS →S()S →()()S →()()() n'est ni une

dérivation à gauche, ni une dérivation à droite.


25
Arbres syntaxiques

Définitions

Relations entre les dérivations de
gauche et de droite

Ambiguïté des Grammaires

26
Arbres syntaxiques
● Les arbres syntaxiques sont des arbres
étiquetés par des symboles d'une grammaire
GHC.
● Feuilles : étiquetées par un terminal ou ε.
● Nœuds Intérieurs: étiquetés par une variable.
✔ Les fils sont étiquetés par le côté droit d'une

production du parent.
● Racine: doit être étiquetée par le symbole initial.
● A une dérivation correspond un arbre syntaxique
● A un arbre syntaxique correspond une ou
plusieurs dérivations.
27
Exemple : Arbre syntaxique
S
● S→SS | (S) | ()

S S

( S ) ( )

( )
28
Production d'un arbre syntaxique
● La concaténation des étiquettes des feuilles de
gauche à droite est appelée la production de
l'arbre syntaxique.

● Exemple :

La production de cet arbre est (())()


29
Arbre syntaxique :
dérivations quelconques
● Soit la production suivante: A→ X1 ... Xn.

● Soit u une chaîne dérivée de A. u peut toujours être


divisé en plusieurs portions dont la première est
dérivée de X1, la suivante est dérivée de X2, etc.

30
Arbre syntaxique : dérivations à
gauche et à droite
● Pour tout arbre syntaxique, il y a une unique
dérivation à gauche et une unique dérivation à
droite.

●Preuve:
1) S'il y a un arbre syntaxique avec une racine
étiquetée A et une production u, alors A→*g u.
2) Si A →*gu, alors il y a un arbre d'analyse de
racine A et de production u.

Le même raisonnement vaut pour la dérivation


à droite .
31
Grammaires ambiguës

32
Grammaires ambiguës
● Une GHC est ambiguë s'il y a une chaîne dans le
langage qui est la production de plusieurs arbres
syntaxiques.

● Exemple: S→SS | (S) | ()


Il y a deux arbres syntaxiques pour ()()().

33
Grammaire ambiguë
Définition: Une GHC est ambiguë s'il y a une chaîne dans
le langage qui est la production de plusieurs arbres.
On parle de grammaire ambiguë et non de langage ambigu
Exemple: S →SS | (S) | ()

La dérivation ()()() a deux possède deux arbres


syntaxiques pour ()()(). 34
Ambiguïté : dérivations à
gauche et à droite

Soit L le langage produit par une grammaire.


La grammaire est dite ambiguë si:

1) Il y une chaîne dans L qui a deux dérivations


différentes à gauche.

2) Il y une chaîne dans le langage qui a deux


dérivations différentes à droite.

35
Ambiguïté
● Nous avons vu que la grammaire donnée pour le
langage des parenthèses bien fermées est
ambiguë : S→SS | (S) | ().
● Il y a une possibilité pour lever cette ambiguïté

S génère des chaînes bien


fermées.

● S→(AS | ε
● A→) | (AA

A génère des chaînes qui ont une


parenthèse de plus à droite qu'à
gauche.
36
Exemple: Grammaires non ambiguës
S→(AS | ε, A →) | (AA

● Une unique dérivation (à gauche) pour une chaîne


de parenthèses bien fermées en parcourant la
chaîne de gauche à droite.

● Pour développer S : on utilise S→(AS si le


prochain symbole est “(” et ε si c'est la fin.

● Pour développer A : on utilise A→) si le prochain


symbole est “)” et (AA si c'est “(”.

37
Processus d'analyse
● chaîne restante: ● Étapes de dérivation
(())() de gauche :

S
Prochain symbole

S→(AS | ε A→) | (AA 38


Processus d'analyse
● Chaîne restante: ● Étapes de dérivation
())() de gauche :
S
(AS
Prochain symbole

S→(AS | ε A→) | (AA 39


Processus d'analyse
● Chaîne restante: ● Étapes de dérivation
))() de gauche :
S
(AS
Prochain symbole ((AAS

S→(AS | ε A→) | (AA 40


Processus d'analyse
● Chaîne restante: ● Étapes de dérivation
)() de gauche :
S
(AS
Prochain symbole ((AAS
(()AS

S→(AS | ε A→) | (AA 41


Processus d'analyse
● Chaîne restante: ● Étapes de dérivation
() de gauche :
S
(AS
Prochain symbole ((AAS
(())S

S→(AS | ε A→) | (AA 42


Processus d'analyse
● chaîne restante: ● Étapes de dérivation
) de gauche :
S
(AS
Prochain symbole ((AAS
(())AS
(())S
(())(AS

S→(AS | ε R→) | (AA 43


Processus d'analyse
● Chaîne restante:: ● Étapes de dérivation
de gauche :
S (())()S
(AS
Prochain symbole ((AAS
(())AS
(())S
(())(AS

S→(AS | ε A→) | (AA 44


Processus d'analyse
● Chaîne restante:: ● Étapes de dérivation
de gauche :
S (())()
(AS
Prochain symbole ((AAS
(())AS
(())S
(())(AS

S→(AS | ε A→) | (AA 45


Classification des grammaires

46
Classification des grammaires :
hiérarchie de Chomsky
Une grammaire G = (∑1, ∑2, P, S) est dite de :
1. type 0, en général. Aucune restriction n'est
imposée.
2. type 1 ou contextuel,si toutes les règles sont de la
forme : αΑβ →αγβ ∈P, Α →γ on a : |γ| ≠ 0. On parle
de sensibilité au contexte : α et β.
3. type 2 ou hors-contexte, si toutes les règles sont
de la forme S→α.
4. type 3 ou linéaire (à gauche ou à droite), si toutes
les règles sont de la forme : S → Aa, S → a
ou S → aA, S → a. 47
Relation entre grammaires de types
différents
● Si G est de type 1, elle est aussi de type 0
● Si G est de type 2, elle est aussi de type 1
● Si G est de type 3, elle est aussi de type 2

● Type 0 et 1: reconnu par une Machine de Turing


● Type 2 : reconnu par une grammaire hors
contexte ou un automate à pile
● Type 3 : reconnu par un automate d'états finis.

48
Types de langage

49
Types de langage
● Définition : Un langage L ⊆ ∑2* est de type i,
s’il existe une grammaire G = (∑1, ∑2, P, S) de
type i avec L = L(G).


Exemple: {anbncn | n ∈Ν} est de type 1.
✔ S→abc | aAbc
✔ Ac → Bbcc
✔ aB → aaA | aa
✔ Ab → bA
✔ bB → Bb
50
Types de langage

{anbn| n ∈N} est de type 2 (déjà vu).

{anbm | n, m ∈N} est de type 3.
✔ S→aS | bB | b | ε
✔ B→bB | b

51
Équivalence de modèles

52
Équivalence de modèles
● Théorème: le langage L est linéaire (type 3)
ssi il est régulier.

● Preuve: il s'agit de démontrer que :


1.Une grammaire G linéaire (à gauche ou à
droite), génère un langage qui est reconnu par
un automate d'états finis A,
2.Puis que le langage reconnu par un automate
d'états finis A est généré par une grammaire G
qui est linéaire.

53
Équivalence de modèles

● Démonstration:
● Étape 1: Soit G = (∑1, ∑2, P, S) une grammaire
linéaire telle que L = L(G). On définit l’automate
A = (∑2 ∪ {f}, ∑2, S, δ, F) tel que:

(A, a, B) ssi A → aB ∈P.

(A, a, f ) ssi A → a ∈P.

F = {f} ∪ {S | S → ε ∈P}.

54
Équivalence de modèles
● Démonstration:
● Étape 2: Soit A = (Q, Σ, q0, δ, F) un ADEF qui
reconnaît L. On définit la grammaire
G = (Q, Σ, P, q0) avec:

q→ a ∈P ssi δ(q, a) ∈ F .

q→ aq′ ∈P ssi δ(q, a) = q′ .
● q0→ ε ∈ P ssi q0 ∈F .

55
Exemple :
● On considère la grammaire G donnée par: {a nbm |
n, m ∈N} est de type 3.
● S →aS | bB | b | ε
● B →bB | b a
b
S f

b b

b
56
Forme normale pour les
grammaires hors-contexte

Élimination des variables inutiles

Suppression de epsilon

Suppression des productions unitaires

Forme normale de Chomsky

57
Les variables qui ne dérivent rien
● Soit la grammaire G avec les productions
suivantes:
S→AB, A→aA | a, B→AB

● A dérive toutes les chaînes composées de a,


● B ne dérive aucune chaîne terminale,
● Ainsi, S ne dérive aucune chaîne terminale (rien) :
le langage engendré par la grammaire G est vide.

58
Une variable dérive t-elle une chaîne
terminale ?
● Cas de base: s'il y a une production A→u, où u n'a
aucune variable, alors A dérive une chaîne terminale.

Cas d'induction: s'il y a une production A→α, où α est
constitué uniquement de terminaux et de variables qui
dérivent des chaînes terminales, alors A dérive une
chaîne terminale.

59
Élimination des variables qui ne
dérivent rien
Algorithme :
1.Identifier toutes les variables qui dérivent des
chaînes terminales.
2.Pour toutes les autres variables, supprimer toutes
les productions dans lesquelles elles
apparaissent soit à gauche, soit à droite.

60
Exemple de suppression des
variables qui ne dérivent rien
Soit la grammaire G avec les productions
suivantes :
S→AB | C, A→aA | a, B→bB, C→c

● Cas de base: A et C dérivent des chaînes


terminales : A→a et C→c.
● Cas d'induction: S dérivent une chaîne terminale:
S→C.
● B est la seule variable qui ne dérive aucune chaîne
terminale.
● Résultat : S→ C, A→aA | a, C→c
61
Les symboles inaccessibles
● Un symbole est inaccessible quand il ne peut
pas être atteint à partir du symbole initial ou
l'axiome. Alors, il peut être supprimé.
● Cas de base: le symbole initial est atteignable :
S (l'axiome).
● Cas d'induction: si A est atteignable, et s'il y a
une production A→α, alors tous les symboles de
α sont atteignables.

62
Les symboles inaccessibles
● Lorsque tous les symboles accessibles ont été
identifiés, alors ceux qui n'en font pas partie sont
dits inaccessibles.
● Seuls les symboles accessibles doivent
demeurer dans les productions de G, donc des
dérivations de S.
● Algorithme: il consiste à supprimer de la
grammaire tous les symboles non découverts à
partir de S ainsi que toutes les productions dans
lesquelles ils apparaissent.

63
Symboles utiles versus
symboles inutiles
● Un symbole est utile s'il apparaît dans une
dérivation d'un chaîne terminale depuis l'axiome.
Autrement, il est inutile.

● Suppression des symboles inutiles :


● Éliminer les symboles improductifs.
● Éliminer les symboles non accessibles.

64
Exemple
Soit la grammaire G avec ces productions :
S→A, A→C, C→c, B→bB
● Si nous éliminons d'abord les symboles
inaccessibles, nous allons trouver tout ce qui est
accessible :
✔ B est inaccessible,
✔ A, C, et c sont accessible et ne seront pas
éliminés.

65
Epsilon Productions
● Un symbole est ε-productif s'il est sous la forme
A→ε.
● ε ne sera pas dans la grammaire d'un langage qui
n'a aucune ε-production.
● Théorème: Si L est un LHC, alors L-{ε} a une
GHC sans ε-productions.

66
Suppression des symboles ε-
productifs
● Pour éliminer les ε-productions, il faut d'abord
identifier les variables qui dérivent ε. Il s'agit de
toutes les variables A telles que : A→* ε.
● Cas de base: s'il y a une production A→ε, alors
A est ε-productif.

Cas d'induction: s'il y a une production A→α, et
tous les symboles de α dérivent ε, alors A est ε-
productif.

67
Exemple
Soit la grammaire G avec ces productions :
S→AB, A→aA | ε, B→bB | A

● Cas de base: A est ε-productif car nous avons


règle A→ε.
● Cas d'induction: B ε-productif car nous avons la
règle B→A.
● Puisque S→AB, alors S aussi ε-productif.

68
Élimination des ε-Productions
● Idée: identifier toutes les variables dont ε est
dérivable.
● But : Soit une grammaire G = (Σ1, Σ2, P, S).
Déterminer l’ensemble Σ1-ε = {X ∈Σ1/ X →* ε}.
● Méthode: Définit un sous-ensemble Σk de Σ1 par :
✔ cas de base : {X ∈Σ1; X →ε ∈P} pour k = 1;
✔ cas inductif : Σk = Σk−1∪ {X ∈Σ1/(∃ u ∈Σ1*)
(X→u ∈P)} pour k≥2.
● Alors on a Σ1-ε = Σl, où l est le plus petit indice
vérifiant Σl+1 = Σl.
69
Élimination des ε-Productions
● Il s'agit de créer une grammaire G' à partir de G=
(Σ1, Σ2, P, S) qui ne contient pas de production ε :
L(G') = L(G') - {ε}
● Algorithme: soit G = (Σ1, Σ2, P, S) ; déterminer
Σ1-ε= {X ∈Σ1/ X→ε ∈P} à l’aide de l’algorithme
précédent; former G' à partir de G en supprimant
toutes les ε−productions et en ajoutant, pour
chaque production X→u de G avec u ≠ ε, toutes les
productions X→u' où u' est un mot non vide obtenu
à partir de u en supprimant des occurrences de
variables dans Σ1-ε.

70
Exemple: Élimination des ε-
Productions
Soit la grammaire G avec ces productions : S→ABC, A →
aA | ε, B → bB | ε, C → ε
● A, B, C, et S dérivent tous ε.
● Nouvelle grammaire G':
✔ S → ABC | AB | AC | BC | A | B | C
✔ A → aA | a
✔ B → bB | b
● C est devenu inutile, ses productions doivent être
éliminées. Donc G' donne ces productions :
✔ S → AB | AB | A | B | A | B
✔ A → aA | a
✔ B → bB | b 71
Productions unitaires
● Une production unité est celle dont le côté droit
est constitué exactement d'une variable.
● Ces productions peuvent être éliminées.
● idée: si A→* B par des séries de productions
unitaires, et B→α est une production non
unitaire, alors A →α est une production unitaire.
● Puis supprimer toutes productions unitaires.

72
Productions unitaires
● Trouver tous les couples (A, B) tels que A→* B
par une séquence de productions unitaires
uniquement.
● Cas de base: (A, A) car A→* A.
● Cas d'induction: si nous avons trouvé (A, B), et
B→C est une production unitaire, alors (A, C) est
aussi une production unitaire.

73
Suppression des productions
unitaires
● Il s'agit de partir d'une grammaire G sans cycle et
construire une grammaire équivalente à G nommée
G' sans production-unitaire.
● Algorithme: Supposons G = (Σ1, Σ2, P, S). Choisir
une variable X0 telle qu’il existe au moins une
production-unitaire du type X→* X0, mais pas de
production-unitaire de type X0→X (G aurait un
cycle). On définit G' à partir de G en supprimant les
productions unitaires X→ X0 et en ajoutant, pour
chacune d’elles, toutes les productions X→u telles
que X0→u ∈P. Itérer jusqu’à ce qu’il ne reste plus
de production-unité. 74
Exemple: suppression des
productions unités
● Soit la grammaire G avec ces productions :
S→A| ε, A→Aa| Ab| a| b
● La grammaire G' (sans production unitaire) donne les
productions suivantes :

S→Aa| Ab| a| b| ε, A→Aa| Ab| a| b

75
Nettoyage d'une grammaire
● Théorème: si L est un LHC, alors il y a une
grammaire GHC pour L – {ε} qui n'a:
● Aucun symbole inutile.
● Aucune ε-production.
● Aucune production unité.
● C'est-à-dire, tout côté droit d'une règle est soit un
terminal, soit de longueur > 2.

76
Forme normal de Chomsky

77
Forme normal de Chomsky
● Une GHC est dite en forme normale de Chomsky si
toute production est sous l'une de ces formes :
1. A→BC (le côté droit a deux variables).
2. A→ a (le côté droit est un symbole terminal).

● Intérêt: facile à utiliser pour démontrer certaines


preuves dur les langages formels.

● Théorème: Si L est un LHC, alors L – {ε} a une


GHC dans la forme normale de Chomsky.
78
Preuve du théorème de Chomsky

● Étape 1: “Nettoyer” la grammaire, donc chaque côté droit


d'une production est soit un symbole terminal, soit de
longueur supérieure ou égale à 2.

Étape 2: pour chaque côté droit α ≠ d'un symbole terminal,
mettre uniquement des variables au côté droit.
✔ Pour chaque symbole terminal a, créer une nouvelle
variable Aa et une production Aa→a.
✔ Remplacer a par Aa dans les côtés droits de longueurs >
2.
● Étape 3: pour les règles dont les côtés droits sont de
longueur > 2, couper en productions dont les côtés droits
contiennent deux variables.
79
Exemple: Étape 2 et 3
Soit la production A→BcDe.
● Etape2 :Nous aurons les variables A c et Ae, avec
les productions Ac→c et Ae→e.
● Noter: créer au plus une variable pour chaque
terminal, et l'utilisez partout où nécessaire.
● Remplacer A→BcDe par A→BAcDAe.

● Etape3 : A→BCDE est remplacé par


A→BF, F→CG, et G→DE.
● F et G ne doivent être utilisés nulle part ailleurs.
80
Exemple: Étape 2 et 3 (suite)
● Puisque A→BCDE est remplacé par A→BF, et
que F→CG et G→DE, dans la nouvelle
grammaire, nous avons A→BF→BCG→BCDE.
✔ une fois que nous avons choisi de remplacer
A par BF, nous devons continuer à BCG et
BCDE. En effet, F et G ont seulement une
production.
● Très important: Le langage produit par la
nouvelle grammaire est le même que celui
produit par l'ancienne.

81
Bibliograbphie
1. J. Hopcroft, R. Motwani, J. Ullman : « Introduction to Automata
Theory, Languages and Computation », 2nd edition,
Addison-Wesley, 2001.
2. Yassine Lakhnech : « Automates et langages ».
3. Anne Fouilloux : « langages », année 2012-2013.

82

Vous aimerez peut-être aussi