Vous êtes sur la page 1sur 36

Théorie des langages

Grammaires Hors-Contexte
Elise Bonzon
http://web.mi.parisdescartes.fr/vbonzon/
elise.bonzon@parisdescartes.fr

Théorie des langages


1 / 31
N
Grammaires Hors-Contexte

Grammaires Hors-Contexte

Définitions
Grammaires réduites
Grammaires propres
Formes normales

Théorie des langages


2 / 31
N
Grammaires Hors-Contexte

Grammaires Hors-Contexte

Définitions
Grammaires réduites
Grammaires propres
Formes normales

Théorie des langages


3 / 31
N
Grammaires Hors-Contexte

Grammaire Hors-Contexte
Grammaire Hors-Contexte ou algébrique
Une grammaire G = hV , Σ, P, Si est hors-contexte (ou algébrique)
si
V est un alphabet
Σ ⊆ V est l’ensemble des symboles terminaux
V \ Σ est l’ensemble des symboles non terminaux
S ∈ V \ Σ est le symbole de départ
P ⊆ ((V \ Σ) × V ∗ ) est l’ensemble (fini) de règles de production

Théorie des langages


4 / 31
N
Grammaires Hors-Contexte

Grammaire Hors-Contexte
Grammaire Hors-Contexte ou algébrique
Une grammaire G = hV , Σ, P, Si est hors-contexte (ou algébrique)
si
V est un alphabet
Σ ⊆ V est l’ensemble des symboles terminaux
V \ Σ est l’ensemble des symboles non terminaux
S ∈ V \ Σ est le symbole de départ
P ⊆ ((V \ Σ) × V ∗ ) est l’ensemble (fini) de règles de production

Langage algébrique
Un langage L est algébrique s’il existe une grammaire algébrique telle
que
L(G ) = L

Théorie des langages


4 / 31
N
Grammaires Hors-Contexte

Grammaire Hors-Contexte

Conséquence : Tout langage rationnel est algébrique.


ATTENTION: la réciproque est fausse
Un langage algébrique non rationnel
n’est pas reconnu par un automate fini
n’est pas décrit par une expression régulière
il n’existe pas de grammaire régulière pour l’engendrer.

Théorie des langages


5 / 31
N
Grammaires Hors-Contexte

Rappel : hierarchie de Chomsky

Type 0 Pas de restriction


Type 1 Grammaires contextuelles (ou sensibles au contrôle)
(Context-sensitive)

α → β, |α| ≤ |β|, α ∈ V +

Type 2 Grammaires hors-contexte (Context-Free)

A→β

Type 3 Grammaires régulières (ou linéaires à droite)

A → wB A, B ∈ V \ Σ non terminaux
A→w w ∈ Σ∗ terminaux

Théorie des langages


6 / 31
N
Grammaires Hors-Contexte

Rappel : hierarchie de Chomsky

T3
Réguliers
Automate fini
T2
Context Free
Automate à pile

T1
Context sensitive
Machine de Turing

T0
Théorie des langages
7 / 31
N
Grammaires Hors-Contexte

Grammaire hors contexte : exemple

Soit G = hV , Σ, P, Si avec
Σ = {a, b}
V \ Σ = {S}
Axiome S
3 règles de production :
S → aSb
S→
L(G ) = {an b n |n ≥ 0}

Théorie des langages


8 / 31
N
Grammaires Hors-Contexte

Grammaire hors contexte : langage


PASCAL
instruction → 
|variable := expression
|begin liste-instructions end
|if expression then instruction
|if expression then instruction else instruction
|case expression of liste-case end
|while expression do instruction
|repeat instruction until expression
|for varid := liste-pour do instruction
|identificateur -procedure
|identificateur -procedure(liste-expressions)
|goto etiquette
|with liste-variables-record do instruction
|etiquette : instruction

Théorie des langages


9 / 31
N
Grammaires Hors-Contexte

Grammaire hors contexte : langage


PASCAL
instruction → 
|variable := expression
|begin liste-instructions end
|if expression then instruction
|if expression then instruction else instruction
|case expression of liste-case end
|while expression do instruction
|repeat instruction until expression
|for varid := liste-pour do instruction
|identificateur -procedure
|identificateur -procedure(liste-expressions)
|goto etiquette
|with liste-variables-record do instruction
|etiquette : instruction

Symboles terminaux : begin, if, then, else, end, case, of, while...
Les variables (ou symboles non terminaux) sont définies dans d’autres
règles
⇒ Grammaire Pascal : plus de 300 règles Théorie des langages
9 / 31
N
Grammaires Hors-Contexte

Analyse syntaxique

Les langages de programmation sont des langages algébriques. Ils sont


spécifiés par des grammaires algébriques
Dans sa phase d’analyse syntaxique, un compilateur teste si un programme
est bien un élément du langage de programmation dans lequel il est écrit.
Pour un programme donné, le compilateur essaie de reconstituer l’arbre de
dérivation (ou arbre syntaxique) de bas en haut en procédant par
réductions successives : on parle alors d’analyse ascendante.
A l’issue de cette phase, on sait si notre programme est syntaxiquement
correct ou pas

Théorie des langages


10 / 31
N
Grammaires Hors-Contexte

Grammaires Hors-Contexte

Définitions
Grammaires réduites
Grammaires propres
Formes normales

Théorie des langages


11 / 31
N
Grammaires Hors-Contexte

Grammaires réduites
Symbole non terminal utile
Soit G = hV , Σ, P, Si. Un symbole non terminal X ∈ V \ Σ est
Productif si LG (X ) 6= ∅

Accessible s’il existe des mots α, β tels que S −
→ αX β
G

Utile s’il est productif, qu’il existe des mots α, β tels que S −
→ αX β
G
et tels que α et β ne contiennent que des symboles non terminaux
productifs.

Théorie des langages


12 / 31
N
Grammaires Hors-Contexte

Grammaires réduites
Symbole non terminal utile
Soit G = hV , Σ, P, Si. Un symbole non terminal X ∈ V \ Σ est
Productif si LG (X ) 6= ∅

Accessible s’il existe des mots α, β tels que S −
→ αX β
G

Utile s’il est productif, qu’il existe des mots α, β tels que S −
→ αX β
G
et tels que α et β ne contiennent que des symboles non terminaux
productifs.

Grammaire réduite
Une grammaire est réduite si tous ses symboles non terminaux sont
utiles.

Théorie des langages


12 / 31
N
Grammaires Hors-Contexte

Grammaires réduites
Symbole non terminal utile
Soit G = hV , Σ, P, Si. Un symbole non terminal X ∈ V \ Σ est
Productif si LG (X ) 6= ∅

Accessible s’il existe des mots α, β tels que S −
→ αX β
G

Utile s’il est productif, qu’il existe des mots α, β tels que S −
→ αX β
G
et tels que α et β ne contiennent que des symboles non terminaux
productifs.

Grammaire réduite
Une grammaire est réduite si tous ses symboles non terminaux sont
utiles.
En supprimant les variables inutiles dans une grammaire, on ne change
pas le langage engendré – sauf si l’axiome lui-même est inutile,
c’est-à-dire si la grammaire engendre le langage vide. Théorie des langages
12 / 31
N
Grammaires Hors-Contexte

Algorithme de calcul des symboles non


terminaux productifs

1. Calculer l’ensemble V0 des symboles non terminaux X pour lesquels il


existe une règle X → α, α ∈ Σ∗
2. Calculer l’ensemble Vi+1 formé de Vi et des symboles non terminaux X
pour lesquels il existe une règle X → α, α ∈ (Σ ∪ Vi )∗
3. Arrêter lorsque Vi+1 = Vi . Cet ensemble est l’ensemble des symboles non
terminaux productifs.

Théorie des langages


13 / 31
N
Grammaires Hors-Contexte

Algorithme de calcul des symboles non


terminaux accessibles

1. Poser W0 = {S}
2. Calculer l’ensemble Wi+1 formé de Wi et des symboles non terminaux X
pour lesquels il existe une règle Y → αX β, avec Y ∈ Wi
3. Arrêter lorsque Wi+1 = Wi . Cet ensemble est l’ensemble des symboles non
terminaux accessibles.

Théorie des langages


14 / 31
N
Grammaires Hors-Contexte

Algorithme de réduction d’une gram-


maire

1. Déterminer l’ensemble des symboles non terminaux productifs


2. Supprimer les symboles non terminaux non productifs, ainsi que les règles
dans lesquels ils figurent
3. Si l’axiome S est improductif, la grammaire réduite a pour seul symbole
non terminal S, et un ensemble de règles vide
4. Si l’axiome S est productif, déterminer tous les symboles non terminaux
accessibles à partir de S. Ceci permet d’obtenir l’ensemble des symboles
non terminaux utiles.
5. Supprimer tous les autres symboles non terminaux, ainsi que les règles
dans lesquelles ils figurent.

La grammaire ainsi obtenue est réduite.

Théorie des langages


15 / 31
N
Grammaires Hors-Contexte

Algorithme de réduction d’une gram-


maire : exemple
On considère la grammaire ayant les règles suivantes :
S → a|X
X → XY
Y → b

Symboles non terminaux productifs : {S, Y }. X est donc improductif, on


peut le supprimer
On obtient la grammaire
S → a
Y → b
L’ensemble des symboles non terminaux accessibles est {S}. On supprime
Y
S → a
La grammaire est réduite.

Théorie des langages


16 / 31
N
Grammaires Hors-Contexte

Algorithme de réduction d’une gram-


maire : exemple 2

On considère la grammaire ayant les règles suivantes :

S → XYZW
X → cX
Y → ab
Z → cYa|WSW
W → 

Symboles non terminaux productifs : {Y , Z , W }. S est donc improductif.


La grammaire réduite a donc pour seul symbole non terminal S, et un
ensemble de règles vide

Théorie des langages


17 / 31
N
Grammaires Hors-Contexte

Grammaires Hors-Contexte

Définitions
Grammaires réduites
Grammaires propres
Formes normales

Théorie des langages


18 / 31
N
Grammaires Hors-Contexte

Grammaires propres

Une grammaire propre ne contient :


Pas de règle unitaire (ou renommage): G ne contient pas de production
de la forme A → B, avec A, B ∈ V \ Σ (symboles non terminaux)
Pas de -règle : G ne contient pas de règle du type A → 

Théorie des langages


19 / 31
N
Grammaires Hors-Contexte

Grammaires propres

Théorème
Tout langage algébrique L = L \ {} peut être engendré par une gram-
maire propre.

Théorie des langages


20 / 31
N
Grammaires Hors-Contexte

Grammaires propres

Théorème
Tout langage algébrique L = L \ {} peut être engendré par une gram-
maire propre.


Un symbole non terminal X est annulable si X −
→
X est annulable si :
Il existe une règle X → , ou
Il existe une règle X → Y1 . . . Yn , avec Y1 , . . . , Yn des symboles non
terminaux annulables

Théorie des langages


20 / 31
N
Grammaires Hors-Contexte

Algorithme de calcul des symboles non


terminaux annulables

1. Calculer l’ensemble N0 des symboles non terminaux X telles qu’il existe


une règle X → 
2. Calculer l’ensemble Ni+1 formé de Ni et des symboles non terminaux X
telles qu’il existe une règle X → α avec α ∈ Ni∗
3. Arrêter lorsque Ni+1 = Ni . Cet ensemble est l’ensemble des symboles non
terminaux annulables.

Théorie des langages


21 / 31
N
Grammaires Hors-Contexte

Algorithme d’élimination des -règles

1. Calculer l’ensemble N des symboles non terminaux annulables


2. Remplacer chaque règle X → α par toutes les règles obtenues en
remplaçant, de toutes les façons possibles, les occurrences de symboles
non terminaux annulables par le mot vide. S’il y a n occurrences de
symboles non terminaux annulables dans α, cela donne 2n règles.
3. Supprimer les -règles. La grammaire obtenue est équivalente à la
grammaire de départ au mot vide près, et est sans -règle.

Théorie des langages


22 / 31
N
Grammaires Hors-Contexte

Algorithme d’élimination des -règles :


exemple

On considère la grammaire ayant les règles suivantes :


S → aSbS|
Remplacer le symbole non terminal S par le mot vide de toutes les façons
possibles dans aSbS donne les 4 mots aSbS, abS, aSb et ab
La grammaire propre obtenue est
S → aSbS|abS|aSb|ab

Théorie des langages


23 / 31
N
Grammaires Hors-Contexte

Algorithme d’élimination des -règles :


exemple 2

On considère la grammaire ayant les règles suivantes :


S → aSb|SS|
La première règle donne S → aSb et S → ab
La seconde règle donne S → SS
La règle S → S générée deux fois par notre algorithme est inutile
La grammaire propre obtenue est
S → aSb|ab|SS

Théorie des langages


24 / 31
N
Grammaires Hors-Contexte

Algorithme d’élimination des règles uni-


taires


1. Calculer la relation ≥ définie par X ≥ Y ssi X −
→Y
2. Calculer la relation ∼ définie par X ∼ Y ssi X ≥ Y et Y ≥ X
3. Choisir un symbole non terminal par classe d’équivalence, et remplacer
toutes les occurrences de toutes les symboles non terminaux équivalents
par ce représentant. Supprimer toutes les règles unitaires entre symboles
non terminaux équivalents.
4. En commançant par les symboles non terminaux qui sont minimales dans
l’ordre ≥, remplacer les règles unitaires X → Y par toutes les règles
X → α, pour tous les α tels que Y → α.
La grammaire obtenue est sans règles unitaires.

Théorie des langages


25 / 31
N
Grammaires Hors-Contexte

Algorithme d’élimination des règles-


unitaires : exemple
On considère la grammaire des expressions arithmétiques ayant les règles
suivantes :
E → E + T |T
T → T ∗ F |F
F → (E )|a|b|c
Il y a deux règles unitaires : E → T et T → F
L’ordre obtenu est E > T > F
On considère les symboles non terminaux en commançant par celles qui
sont minimales dans ≥
On substitue à T → F les règles T → (E )|a|b|c
On substitue à E → T les règles E → T ∗ F |(E )|a|b|c
On obtient :
E → E + T |T ∗ F |(E )|a|b|c
T → T ∗ F |(E )|a|b|c
F → (E )|a|b|c

Théorie des langages


26 / 31
N
Grammaires Hors-Contexte

Grammaires Hors-Contexte

Définitions
Grammaires réduites
Grammaires propres
Formes normales

Théorie des langages


27 / 31
N
Grammaires Hors-Contexte

Forme normale de Chomsky

Forme normale de Chomsky


Une grammaire algébrique G = hV , Σ, P, Si est sous la forme normale
de Chomsky si toute production est de la forme :

A → a
A → BC

avec A, B, C ∈ V \ Σ, et a ∈ Σ
Intérêt de la forme normale de Chomsky:
Les arbres d’analyse correspondants seront des arbres binaires
Disposer d’une forme normale pour les grammaires permet de simplifier les
développements de certaines preuves

Théorie des langages


28 / 31
N
Grammaires Hors-Contexte

Algorithme de mise en forme normale de


Chomsky
On part d’une grammaire propre.
1. On introduit un nouvel ensemble de symboles non terminaux
Z = {Za |a ∈ Σ}
2. On ajoute les règles Za → a pour tout a ∈ Σ
3. Toute règle X → α où α est de longueur 1 est conservée
Note puisque la grammaire est propre, α est un symbole non terminal
4. Toute règle X → α où |α| ≥ 2 est transformée en 2 étapes :
i) Tout symbole terminal a dans α est remplacé par le symbole non terminal
Za
ii) Si |α| > 2, soit α = Y1 . . . Yp . On introduit p − 2 nouveaux symboles non
terminaux T1 , . . . , Tp−2 et on remplace la règle X → Y1 . . . Yp par les
p − 1 règles
X → Y1 T1 , T1 → Y2 T2 , . . . , Tp−3 → Yp−2 Tp−2 , Tp−2 → Yp−1 Yp

La grammaire obtenue est en forme normale de Chomsky


Théorie des langages
29 / 31
N
Grammaires Hors-Contexte

Algorithme de mise en forme normale de


Chomsky : exemple
On considère la grammaire propre ayant les règles suivantes :
S → aSbS|abS|aSb|ab
On introduit d’abord deux nouveaux symboles non terminaux Za et Zb , et
on remplace les symboles terminaux. La grammaire devient
S → Za SZb S|Za Zb S|Za SZb |Za Zb ; Za → a; Zb → b
On considère à présent les règles suivantes :
S → Za SZb S, que l’on transforme en S → Za T1 ; T1 → ST2 ; T2 → Zb S
S → Za Zb S, que l’on transforme en S → Za T2 ; T2 → Zb S
S → Za SZb , que l’on transforme en S → Za T3 ; T3 → SZb
La grammaire devient sous forme normale de Chomsky :
S → Za T1 |Za T2 |Za T3 |Za Zb
T1 → ST2 ; T2 → Zb S; T3 → SZb
Za → a; Zb → b

Théorie des langages


30 / 31
N
Grammaires Hors-Contexte

Forme normale de Greibach

Forme normale de Greibach


Une grammaire algébrique G = hV , Σ, P, Si est sous la forme normale
de Greibach si toute production est de la forme :

A → aA1 . . . An
A → a

avec A, Ai ∈ V \ Σ, et a ∈ Σ
Intérêt de la forme normale de Greibach:
A chaque dérivation, on détermine un préfixe de plus en plus long formé
uniquement de symboles non terminaux
Permet de construire plus aisément des analyseurs permettant de
retrouver l’arbre d’analyse associé à un mot généré

Théorie des langages


31 / 31
N

Vous aimerez peut-être aussi