Vous êtes sur la page 1sur 103

Dérivation

: Gauche & Droite


Exemple
q Soit la grammaire HC G3 = <
üT={Number,+,-, ×, ÷ },
üNT ={Expr, Op},
üS=Expr,
üP = {r1,..,r6} >
ü r1 : Expr àExpr Op Number
ü r2: | Number
ü r3 : Op à +
ü r4 : |-
ü r5 : |×
ü r6 : |÷

2019/2020 71
Dérivation : Gauche & Droite
Exemple
Exemples de dérivations gauches de mots dans L(G3)

1: 𝑬𝒙𝒑𝒓 ⟹'( 𝑬𝒙𝒑𝒓 𝑂𝑝 𝑁𝑢𝑚𝑏𝑒𝑟 ⟹'1 𝑁𝑢𝑚𝑏𝑒𝑟 𝑶𝒑 𝑁𝑢𝑚𝑏𝑒𝑟 ⟹'3 𝑁𝑢𝑚𝑏𝑒𝑟 + 𝑁𝑢𝑚𝑏𝑒𝑟

2: 𝑬𝒙𝒑𝒓 ⟹'( 𝑬𝒙𝒑𝒓 𝑂𝑝 𝑁𝑢𝑚𝑏𝑒𝑟 ⟹'( 𝑬𝒙𝒑𝒓 𝑂𝑝 𝑁𝑢𝑚𝑏𝑒𝑟 𝑂𝑝 𝑁𝑢𝑚𝑏𝑒𝑟


⟹'1 𝑁𝑢𝑚𝑏𝑒𝑟 𝑶𝒑 𝑁𝑢𝑚𝑏𝑒𝑟 𝑂𝑝 𝑁𝑢𝑚𝑏𝑒𝑟 ⟹'3 𝑁𝑢𝑚𝑏𝑒𝑟 + 𝑁𝑢𝑚𝑏𝑒𝑟 𝑶𝒑 𝑁𝑢𝑚𝑏𝑒𝑟
⟹'5 𝑁𝑢𝑚𝑏𝑒𝑟 + 𝑁𝑢𝑚𝑏𝑒𝑟 ∗ 𝑁𝑢𝑚𝑏𝑒𝑟

2019/2020 72
Dérivation : Gauche & Droite
Exercice
Dérivation à droite de l’expression Number+Number*Number
Dérivation à Droite

𝑬𝒙𝒑𝒓 ⟹'( 𝐸𝑥𝑝𝑟 𝑶𝒑 𝑁𝑢𝑚𝑏𝑒𝑟 ⟹'5 𝑬𝒙𝒑𝒓 ∗ 𝑁𝑢𝑚𝑏𝑒𝑟 ⟹'( 𝐸𝑥𝑝𝑟 𝑶𝒑 𝑁𝑢𝑚𝑏𝑒𝑟 ∗ 𝑁𝑢𝑚𝑏𝑒𝑟

⟹'3 𝑬𝒙𝒑𝒓 + 𝑁𝑢𝑚𝑏𝑒𝑟 ∗ 𝑁𝑢𝑚𝑏𝑒𝑟 ⟹'1 𝑁𝑢𝑚𝑏𝑒𝑟 + 𝑁𝑢𝑚𝑏𝑒𝑟 ∗ 𝑁𝑢𝑚𝑏𝑒𝑟


Règles appliquées : (r1, r5, r1, r3, r2)

Mêmes règles mais pas dans le même ordre


Dérivation à Gauche

𝑬𝒙𝒑𝒓 ⟹'( 𝑬𝒙𝒑𝒓 𝑂𝑝 𝑁𝑢𝑚𝑏𝑒𝑟 ⟹'( 𝑬𝒙𝒑𝒓 𝑂𝑝 𝑁𝑢𝑚𝑏𝑒𝑟 𝑂𝑝 𝑁𝑢𝑚𝑏𝑒𝑟 ⟹'1 𝑁𝑢𝑚𝑏𝑒𝑟 𝑶𝒑 𝑁𝑢𝑚𝑏𝑒𝑟 𝑂𝑝 𝑁𝑢𝑚𝑏𝑒𝑟

⟹'3 𝑁𝑢𝑚𝑏𝑒𝑟 + 𝑁𝑢𝑚𝑏𝑒𝑟 𝑶𝒑 𝑁𝑢𝑚𝑏𝑒𝑟 ⟹'5 𝑁𝑢𝑚𝑏𝑒𝑟 + 𝑁𝑢𝑚𝑏𝑒𝑟 ∗ 𝑁𝑢𝑚𝑏𝑒𝑟

Règles appliquées : (r1, r1, r2, r3, r5)


2019/2020 73
Analyseur Syntaxique
q L’analyseur syntaxique doit découvrir automatiquement pour
une expression donnée en langage L, son arbre syntaxique de
dérivaVon par rapport à la grammaire de ce langage L

qLa racine de l’arbre syntaxique est : le symbole non-


terminal initial S

qLes nœuds de l’arbre syntaxique sont : le résultat de


l’application des règles de production ∈ (T È NT)∗

qLes feuilles de l’arbre syntaxique sont : les éléments de


l’expression donnée en entrée ∈ T*

2019/2020 74
Arbre Syntaxique (Arbre de dérivation)
𝑬𝒙𝒑𝒓 ⟹'( 𝑬𝒙𝒑𝒓 𝑂𝑝 𝑁𝑢𝑚𝑏𝑒𝑟 ⟹'1 𝑁𝑢𝑚𝑏𝑒𝑟 𝑶𝒑 𝑁𝑢𝑚𝑏𝑒𝑟 ⟹'3 𝑁𝑢𝑚𝑏𝑒𝑟 + 𝑁𝑢𝑚𝑏𝑒𝑟

Expr

Expr Op Number

Number +

2019/2020 75
Arbre Syntaxique (Arbre de dérivation)
Dérivation à Gauche

𝑬𝒙𝒑𝒓 ⟹'( 𝑬𝒙𝒑𝒓 𝑂𝑝 𝑁𝑢𝑚𝑏𝑒𝑟 ⟹'( 𝑬𝒙𝒑𝒓 𝑂𝑝 𝑁𝑢𝑚𝑏𝑒𝑟 𝑂𝑝 𝑁𝑢𝑚𝑏𝑒𝑟 ⟹'1 𝑁𝑢𝑚𝑏𝑒𝑟 𝑶𝒑 𝑁𝑢𝑚𝑏𝑒𝑟 𝑂𝑝 𝑁𝑢𝑚𝑏𝑒𝑟

⟹'3 𝑁𝑢𝑚𝑏𝑒𝑟 + 𝑁𝑢𝑚𝑏𝑒𝑟 𝑶𝒑 𝑁𝑢𝑚𝑏𝑒𝑟 ⟹'5 𝑁𝑢𝑚𝑏𝑒𝑟 + 𝑁𝑢𝑚𝑏𝑒𝑟 ∗ 𝑁𝑢𝑚𝑏𝑒𝑟

Expr

Expr Op Number

Expr Op Number

Number + *

2019/2020 76
Arbre Syntaxique (Arbre de dérivation)
Dérivation à Droite

𝑬𝒙𝒑𝒓 ⟹'( 𝐸𝑥𝑝𝑟 𝑶𝒑 𝑁𝑢𝑚𝑏𝑒𝑟 ⟹'5 𝑬𝒙𝒑𝒓 ∗ 𝑁𝑢𝑚𝑏𝑒𝑟 ⟹'( 𝐸𝑥𝑝𝑟 𝑶𝒑 𝑁𝑢𝑚𝑏𝑒𝑟 ∗ 𝑁𝑢𝑚𝑏𝑒𝑟

⟹'3 𝑬𝒙𝒑𝒓 + 𝑁𝑢𝑚𝑏𝑒𝑟 ∗ 𝑁𝑢𝑚𝑏𝑒𝑟 ⟹'1 𝑁𝑢𝑚𝑏𝑒𝑟 + 𝑁𝑢𝑚𝑏𝑒𝑟 ∗ 𝑁𝑢𝑚𝑏𝑒𝑟

Expr

Expr Op Number

Expr Op Number Mêmes


Arbre Syntaxique

Number + *

2019/2020 77
Grammaire
hors-contexte
Ambigüe

2019/2020 78
Grammaire ambigüe
q Pour une CFG G tout string w de L(G) a au moins
un arbre de dérivation pour G.
q w ∈ L(G) peut avoir plusieurs arbres de
dérivation pour G : dans ce cas on dira que la
grammaire est ambigüe.
q Idéalement, pour permettre le parsing, une
grammaire ne doit pas être ambigüe. En effet,
l’arbre de dérivation détermine le code généré par
le compilateur.

2019/2020 79
Grammaire ambigüe
Exemple
qSoit les règles de la grammaire suivante :
q Grammaire Simpliste :
q r1: GroupeNominal → Nom
q r2 : | Adjectif Nom
q r3 : | GroupeNominal de GroupeNominal

q Trouver un arbre de dérivation du mot


q w = « Ecole de Commerce de jeunes filles »

2019/2020 80
Grammaire ambigüe
Exemple
GroupeNominal GroupeNominal

GroupeNominal de GroupeNominal GroupeNominal de GroupeNominal

GroupeNominal de GroupeNominal GroupeNominal de GroupeNominal Adjectif Nom


Nom
Nom Nom jeunes filles
Nom Adjectif Nom
Ecole
filles Commerce
Commerce jeunes Ecole

2 arbres syntaxiques différents d’une expression (i.e. ambigüité de la grammaire) Þ


2 interprétations différentes Þ 2 sémantiques différentes Þ 2 codes possibles à générer
pour cette expression Þ Problème de non-déterminisme pour le compilateur !!

2019/2020 81
Grammaire ambigüe GroupeNominal

Exemple GroupeNominal de GroupeNominal

GroupeNominal de GroupeNominal
Nom

Nom Adjectif Nom


Ecole de commerce de jeunes filles Ecole
jeunes filles
Commerce

Nom’ Ecole
GN’ Nom AD’ de
de de de Commerce
GN Nom
GN Nom Nom de
GN de de
de de de Jeunes’
GN GN
Nom GN’ Nom Filles’

2019/2020 82
Grammaire ambigüe GroupeNominal

Exemple
GroupeNominal de GroupeNominal

GroupeNominal de GroupeNominal Adjectif Nom

Ecole de commerce de filles jeunes Nom Nom jeunes filles

Commerce
Ecole

AD GN’ AD Ecole

Nom de Nom de
GN
de Nom de Commerce
GN de
GN de Nom de
GN de Nom
de Nom de filles
GN AD
GN’ AD Nom’ jeunes

2019/2020 83
Grammaire ambigüe
Exemple
GroupeNominal GroupeNominal

GroupeNominal de GroupeNominal GroupeNominal de GroupeNominal

GroupeNominal de GroupeNominal GroupeNominal de GroupeNominal Adjectif Nom


Nom

Nom Adjectif Nom Nom Nom jeunes filles


Ecole
jeunes filles Commerce
Commerce Ecole

Ecole de commerce de jeunes filles Ecole de commerce de filles jeunes

2 arbres syntaxiques différents d’une expression (i.e. ambigüité de la grammaire) Þ


2 interprétations différentes Þ 2 sémantiques différentes Þ 2 codes possibles à générer
pour cette expression Þ Problème de non-déterminisme pour le compilateur !!

2019/2020 84
Grammaire ambigüe
Exercice 1
La grammaire suivante est-elle ambiguë ?
Garith:
r1 : E ® E ´ E
r2 : E ® E + E
r3 : E ® Nombre

Si Oui Pourquoi ?

2019/2020 85
Grammaire ambigüe
Solution
qLe mot “1 + 2 ´ 3” possède deux dérivations droites
q E Þr1 E ´ E Þr2 E + E ´ E Þ*r3 1 + 2 ´ 3
q E Þr2 E + E Þr1 E + E ´ EÞ*r3 1 + 2 ´ 3
qDonc 2 arbres syntaxiques
´ +

Arbre 1 + Arbre 2 ´
3 1
1 2 2 3

qDonc 2 interprétations possibles


q (1 + 2) ´ 3 º 9
q 1 + (2 ´ 3) º 7

2019/2020 86
Grammaire ambigüe
Exercice
qG:
q r1: Stmt → if ( Expr ) then Stmt else
Stmt
q r2: | if ( Expr ) then Stmt
q …
q rn |...

q Trouver un arbre de dérivation du mot


w = if (Expr1) then if (Expr2) then Stmt1 else Stmt2

2019/2020 87
Grammaire ambigüe
Solution 1
q Stmt Þr1 Stmt
q if ( Expr ) then
q Stmt
q else Stmt if then else
( )
q Þ r2

q if ( Expr ) then Expr Stmt Stmt


q if ( Expr ) then
q Stmt
Expr1 Stmt2
q else Stmt
q … if ( ) then
q Þ
Expr Stmt
q if (Expr1) then
q if (Expr2) then
q Stmt1
Expr2 Stmt1
q else
q Stmt2

2019/2020 88
Grammaire ambigüe
Solution 2
qStmt Þr2 Stmt
qif ( Expr ) then
q Stmt
qÞr1 if ( ) then
qif ( Expr ) then
q if ( Expr ) then Expr Stmt
q Stmt
q else Stmt
q… Expr1
qÞ else Stmt
if ( ) then
qif (Expr1) then
q if (Expr2) then Expr Stmt
q Stmt1
q else Stmt2
q Stmt2
Expr2 Stmt1
G est une grammaire ambiguë du fait qu’on a trouvé deux dérivations
du mot w = « if (Expr1) then if (Expr2) then Stmt1 else Stmt2 »
2019/2020 89
Grammaire ambigüe
qL’ambiguïté implique que l’analyseur syntaxique
ne pourra pas découvrir d’une manière unique et
définitive l’arbre syntaxique de cette expression.

q Si l’analyseur syntaxique ne peut pas décider la


structure syntaxique d’une expression, décider du
sens (i.e. la sémantique) et donc du code
exécutable équivalent à cette expression ne sera
pas possible !!

qL’Ambiguïté est donc une propriété indésirable


dans une grammaire.

2019/2020 90
Grammaire ambigüe
qLorsque le langage définit des strings composés
d’instructions et d’opération, l’arbre syntaxique
(qui va déterminer le code produit par le
compilateur) doit refléter :

q Les priorités

q Les associativités

2019/2020 91
Grammaire ambigüe
Exemple
qLe mot “1 + 2 ´ 3” possède deux dérivations droites
q E Þr1 E ´ E Þr2 E + E ´ E Þ*r3 1 + 2 ´ 3
q E Þr2 E + E Þr1 E + E ´ EÞ*r3 1 + 2 ´ 3
qDonc 2 arbres syntaxiques
´ +

Arbre 1 + Arbre 2 ´
3 1
1 2 2 3

qDonc 2 interprétations possibles


q (1 + 2) ´ 3 º 9
q 1 + (2 ´ 3) º 7 C’est la 2ème interprétation qui correspond
aux règles de priorité usuelles des opérateurs
arithmétiques !!

2019/2020 92
Grammaire ambigüe
Elimination de l’ambiguïté
qAmbiguïté pour les expressions de Garith sur l’opérateur ´
q Cause : Garith accepte aussi bien l’associativité gauche que droite de ´
q Solution : On choisit d’accepter l’associativité à gauche de ´
(e.g. l’interprétation (1 ´ 2) ´ 3 mais pas 1 ´ (2 ´ 3).)

qAmbiguïté pour les expressions de Garith sur l’opérateur +


q Cause : Garith accepte aussi bien l’associativité gauche que droite de +
q Solution : On choisit d’accepter l’associativité à gauche de +
(e.g. l’interprétation (1 + 2) + 3 mais pas 1 + (2 + 3).)

qAmbiguïté pour les expressions de Garith sur les 2 opérateurs ´ et +


q Cause : Garith ne différencie pas entre les priorités de ´ et +
q Solution : On choisit priorité( ´ ) > priorité( + )
(e.g. l’interprétation 1 + (2 ´ 3) mais pas (1 + 2) ´ 3.)

qNB. Rien ne nous empêche d’adopter l’associativité droite !!


qSuite de l’exercice :
q Essayer de réfléchir sur les transformations de Garith pour supporter ces
contraintes nécessaires à sa désambiguïsation

2019/2020 93
Grammaire ambigüe
Elimination de l’ambiguïté
qAccepter l’associativité à gauche de ´
´ ´ ´

´
3 ´ 4 ´
1 2 5
´
3 ´ 4
1 2 ´
3
1 2
Þ Introduire des règles récursives gauches
q R11 : Mult ® Mult ´ Nombre
q R12 : Mult ® Nombre

2019/2020 94
Grammaire ambigüe
Elimination de l’ambiguïté
qAccepter l’associativité à gauche de +
+ + +

+
3 + 4 +
1 2 5
+
3 + 4
1 2 +
3
1 2
Þ Introduire des règles récursives gauches
q R21 : Add ® Add + Nombre
q R22 : Add ® Nombre

2019/2020 95
Grammaire ambigüe
Elimination de l’ambiguïté
qChoisir priorité( ´ ) > priorité( + )
´ + + +

+ 2 ´ ´ ´
2
+ ´
3 4 3 4 1 2 3 4
´
+ 4 4
+ 2 3
3
1 2

Þ Introduire des règles récursives gauches


¨ R31 : Add ® Add + Mult (plus générale que R21, car R12 : Mult ® Nombre)
¨ R32 : Add ® Mult (plus générale que R22, car R12 : Mult ® Nombre)

2019/2020 96
Grammaire ambigüe
Elimination de l’ambiguïté
q G’arith < T={Nombre,+, ×}, NT ={Mult, Add}, S=Add, P = {R11, R12,
R31, R32} >
q R11 : Mult ® Mult ´ Nombre
q R12 : Mult ® Nombre
q R21 : Add ® Add + Nombre (car R31 est plus générale que R21)
q R22 : Add ® Nombre (car R32 est plus générale que R22)
q R31 : Add ® Add + Mult
q R32 : Add ® Mult

q On a pris S=Add car Add est plus général de Mult (c.f. R32, de
Add on peut aller vers Mult mais l’inverse est faux)

q G’arith n’est pas ambiguë par construction !!

2019/2020 97
Grammaire ambigüe
Elimination de l’ambiguïté
qDéfaut de G’arith
q C’est impossible de forcer
q 1 + 2 × 3 à être interprété (1 + 2) × 3
q et 3 × 1 + 2 à être interprété 3 × (1 + 2)

qSuite de l’exercice :
q Penser à une solution à ces nouveaux
problèmes

2019/2020 98
Grammaire ambigüe
Elimination de l’ambiguïté
qSolution possible : introduire les parenthèses
q NT devient {Mult, Add, Aux}
q P devient {R’11, R’12, R’13, R’14, R31, R32}
q R’11 : Mult ® Mult ´ Aux (plus générale que R11, car R’13 : Aux®
Nombre)
q R’12 : Mult ® Aux (plus générale que R12, car R’13 : Aux® Nombre)
q R’13 : Aux ® Nombre
q R’14 : Aux ® ( Add )

q Au lieu de
q R11 : Mult ® Mult ´ Nombre
q R12 : Mult ® Nombre

2019/2020 99
Grammaire ambigüe
Elimination de l’ambiguïté
q 4 cas avec deux opérations dans une expression parenthèsées
q + à gauche du × : x + y + z
q Cas particuliers : Nombre + Add, Add + Nombre

q × à gauche du + : x + y × z
q Exemples : (1 + 2) × 3
q Cas particuliers : Nombre + Mult, Add ´ Nombre

q + à gauche du + : x × y + z
q Exemples : 3 × (1 + 2)
q Cas particuliers : Nombre ´ Add, Mult + Nombre

q × à gauche du × : x × y × z
q Cas particuliers : Mult ´ Nombre, Nombre ´ Mult

qSeuls l’associativité gauche sera bien sûr prise en compte

2019/2020 100
Grammaire ambigüe
Elimination de l’ambiguïté
qG’arith < T= {Nombre,+, ×}, NT = {Mult, Add, Aux}, S = Add, P = {R1, R2, R3, R4, R5,
R6}>
q R1 (R’11) : Mult ® Mult ´ Aux
q R2 (R’12) : Mult ® Aux
q R3 (R’13) : Aux ® Nombre
q R4 (R’14) : Aux ® ( Add )
q R5 (R31) : Add ® Add + Mult
q R6 (R32) : Add ® Mult

q 1 + 2 × 3 pourra être interprété sans ambiguïté (1 + 2) × 3 :


q Add ÞR6 Mult ÞR1 Mult ´ Aux ÞR2 Aux ´ Aux ÞR4 ( Add ) ´ Aux ÞR5 (Add + Mult) ´ Aux ÞR6
(Mult + Mult) ´ Aux ÞR2 (Aux + Mult) ´ Aux ÞR2 (Nombre + Mult) ´ Aux Þ*
(Nombre + Nombre) ´ Nombre

q 3 × 1 + 2 peut être interprété sans ambiguïté 3 × (1 + 2)


q Add ÞR6 Mult ÞR1 Mult ´ Aux ÞR2 Aux ´ Aux ÞR3 Nombre ´ Aux ÞR4 Nombre ´ (Add) Þ*
Nombre ´ (Nombre + Nombre)

2019/2020 101
Analyseur Syntaxique
Types
qIl existe 2 types d’analyseurs
syntaxiques (parseurs)

q Analyseur descendant (top-down)

q Analyseurs ascendants (bottom-up)

2019/2020 102
Analyseur Syntaxique
Types
q Analyseur descendant (top-down)

q Algorithme :

q Commence par la racine et procède en descendant l’arbre


syntaxique jusqu’aux feuilles.

q A chaque étape, l’analyseur choisit un nœud parmi les


symboles non-terminaux et développe l’arbre à partir de ce
nœud.

q Exemples : Analyseur récursif descendant, Analyseur


LL(1)

2019/2020 103
Analyseur Syntaxique
Types
q Analyseurs ascendants (bottom-up)

q Algorithme :

q Commence par les feuilles et procède en remontant l’arbre


syntaxique jusqu’à la racine.

q A chaque étape, l’analyseur ajoute des nœuds qui


développent l’arbre partiellement construit.

q Exemples : Analyseur LR(1), Analyseur LALR(1),


Analyseur SLR(1)
q LR(1) É LALR(1) É SLR(1)

2019/2020 104
Analyseur Syntaxique
Descendant (top-down)

2019/2020 105
Analyseur Syntaxique Descendant
Exemple
q Pour une grammaire du type
q R1 : S ® Mult
q R2 : Mult ® Mult ´ Aux
q R3 : Mult ® Aux
q R4 : Aux ® Nombre

q Problème :
q L’algorithme risque de développer Mult en Mult ´ Aux puis en Mult ´
Mult ´ Aux puis en Mult ´ Aux ´ Aux ´ Aux … ´ Aux ´ Aux indéfiniment
: bouclage de l’analyseur !!

q Solution :
q Éliminer la récursivité gauche de la grammaire pour une analyse top-
down

2019/2020 106
Analyseur Syntaxique Descendant
Récursivité a gauche
n Une règle de réécriture est dite récursive gauche
si
¨ Le premier symbole sur la partie droite de la règle est
le même que celui sur sa partie gauche
n Exemple :
¨ S → Sa

¨ ou si le symbole de la partie gauche de la règle


apparaît sur sa partie droite et tous les symboles qui le
précèdent peuvent dériver le mot vide
n Exemple :
¨ S → TSa
¨ T→e|…

2019/2020 107
Analyseur Syntaxique Descendant
qG : Grammaire récursive gauche (NT = {S})
q S→Sα (i.e. tout mot de L(G) se termine pas une suite de α)
q |β (i.e. tout mot de L(G) commence par β ou contient seulement β)

q S Þ S α Þ S α α Þ … Þ S α* Þ β α*
q L(G’) = β α*

qG’ : Grammaire non-récursive gauche équivalente à G (NT’ = {S,R})


q S→βR (i.e. tout mot de L(G’) commence par β)
q R→αR (i.e. tout mot de L(G’) se termine éventuellement pas une suite de α)
q |e

q S Þ β R Þ β α R Þ α α R Þ … Þ α* R Þ β α*
q L(G’) = β α*

qL(G) = L(G’) donc la transformation de G en G’ a conservé le langage reconnu

2019/2020 108
Elimination de la récursivité a gauche
Solution
Entrée: Une grammaire G.
Sortie: Une grammaire équivalente sans récursivité à gauche.
Méthode:
Ordonner les non-terminaux par indices A1, ..., An.
Pour i:=1 à n faire
Pour j : = 1 à i - 1 faire
Remplacer chaque production de la forme Ai → Ajγ
par les productions Ai → δ1γ | ... | δkγ,
où Aj → δ1 | . . . | δk sont les Aj -productions actuelles
Fin
Eliminer les récursivité immédiates à gauche des Ai-productions
Fin

2019/2020 109
Elimination de la récursivité a gauche
Solution
qÉliminer la récursivité gauche de la
grammaire suivante :
q G’arith < T={Nombre,+, ×}, NT={Mult, Add,
Aux}, S=Add, P = {R1, R2, R3, R4, R5, R6}>
q R1 : Mult ® Mult ´ Aux
q R2 : Mult ® Aux
q R3 : Aux ® Nombre
q R4 : Aux ® ( Add )
q R5 : Add ® Add + Mult
q R6 : Add ® Mult

2019/2020 110
Elimination de la récursivité a gauche
Solution
Grammaire récursive droite équivalente
Règles récursives gauche (i.e. conserve l’associativité droite et les
NT={Mult, Aux, Add} priorités de G’arith)
NT={Mult, Mult’, Aux, Add, Add’}
// Transformation directe de Mult
R1 : Mult ® Mult ´ Aux Mult ® Aux Mult’
R2 : Mult ® Aux
Mult’ ® ´ Aux Mult’
|e

// Aux n’est pas récursive gauche


R3 : Aux ® Nombre Aux ® Nombre
R4 : Aux ® ( Add ) Aux ® ( Add )

// Transformation directe de Add


R5 : Add ® Add + Mult Add ® Mult Add’
R6 : Add ® Mult Add’ ® + Mult Add’
|e

2019/2020 111
Elimination de la récursivité a gauche
Solution
qÉliminer la récursivité gauche de la
grammaire suivante :

q S® S + A | S x B | C | D

2019/2020 112
Elimination de la récursivité a gauche
Solution
S → S α1 | S α2 | S α3 | … | S αn S → β1 R | β2 R | …. | βn R
| β1 | β2 | …. | βn è R → α1 R | α2 R | … | αn R
|e

q S®S+A|SxB|C|D

q S ® C S’ | D S’
q S’ ® + A S’ | x B S’ | e

2019/2020 113
Factorisation à gauche
Algorithme
qPour chaque A Î NT
q Trouver le plus long préfixe « α » commun à deux ou
plusieurs parties droites de règles relatives à A
q Si (α ¹ e) alors
q remplacer les règles de A de la forme
q A → αβ1 | αβ2 | · · · | αβn | γ
q par :
q A→αB|γ
q B → β1 | β2 | · · · | βn
q NT ¬ NT È {B} // ajouter B à l’ensemble des symboles non-
terminaux
qRépéter jusqu’à ce qu’il n’y ait plus de préfixe commun

2019/2020 114
Factorisation à gauche
Exemple

q S ® aS | aB | aC | aD

Simple factorisation

q S ® a S’
q S’ ® S | B | C | D

2019/2020 115
Factorisation à gauche
Exercice
Factorisation à gauche de:

q S ® *aA
q |*aB
q |*C

2019/2020 116
Factorisation à gauche
Solution

q S ® *aA | *aB | *C

q S ® *aS’ | *C
q S’ ® A | B

q S ® *S’’
q S’’ ® aS’ | C

2019/2020 117
Analyseur Syntaxique Descendant
Grammaire prédictive LL(1)

2019/2020 118
Analyseur Syntaxique Descendant
Grammaire prédictive LL(1)
LL : Left to right – Leftmost derivation
q Commence par la racine et procède en
descendant l’arbre syntaxique
jusqu’aux feuilles.

qA chaque étape, l’analyseur choisit un


nœud parmi les symboles non-
terminaux et développe l’arbre à partir
de ce nœud.

2019/2020 119
Analyseur Syntaxique Descendant
Grammaire prédictive LL(1)
LL : Left to right – Leftmost derivation
q Une grammaire est dite LL(k) si, et seulement si, elle
peut être analysée en ne disposant, à chaque instant,
que des n prochains terminaux non encore
consommés.
q Le k appelé lookahead (regarder en avant) indique le
nombre de terminaux qu’il faut avoir lus sans les avoir
encore consommés pour décider quelle dérivation
faire.
qL’analyse d’une grammaire LL(3) impose de gérer 3
variables contenant les 3 prochains terminaux non
encore consommés à chaque instant.
2019/2020 120
Analyseur Syntaxique Descendant
Grammaire prédictive LL(1)
LL : Left to right – Leftmost derivation
qSoit A → α une règle de production, on
définit First(α) =
q {ensemble des symboles terminaux qui peuvent
apparaître comme premiers symboles dans les
mots dérivables à partir de α}

q Soit G = <T, NT, S, P> une grammaire, G est


dite prédictive (dite LL(1)) ssi
q " les règles A→ α1 | α2 | α3 | · · ·αn de P
q " i,j First(αi) ∩ First(αj) = Æ

2019/2020 121
Analyseur Syntaxique Descendant
Grammaire prédictive LL(1)
Exemple
qLa grammaire S à a | bS est LL(1):
qProductions(Sàa) = First(a) = {a}
qProductions(Sà bS) = First(bS) = First (b) = {b}

qLa grammaire S à a | aS n’est pas LL(1):


qProductions(Sàa) = First (a) = {a}
qProductions(Sà aS) = First (aS) = First (a) = {a}

2019/2020 122
Analyseur Syntaxique Descendant
Grammaire prédictive LL(1)
First/Follow
qL’ensemble premier :

Productions(Sàa) = Premier(a) si a n’est pas vide.


qSi a est de la forme aS ou a est un terminal alors nous
avons First(aS) = {a}.

qSi a est de la forme AS ou A est un non-terminal alors


nous avons First(AS) = First(A).

2019/2020 123
Analyseur Syntaxique Descendant
Grammaire prédictive LL(1)
First/Follow
qL’ensemble suivant :

Productions(Sàa) = Follow(S) si a est vide.

q Si une règle est de la forme S à aTb alors l’ensemble


Follow(T) contient l’ensemble First(b).
qSi une règle est de la forme Aà aT alors l’ensemble
Follow(T) contient l’ensemble Follow(A).

2019/2020 124
Analyseur Syntaxique Descendant
Grammaire prédictive LL(1)
Exercice : First
Calculer l’ensemble First (S) des règles suivantes :
q S ® Aa
q A ® bB
q |e

Calculer l’ensemble First des non terminaux de la grammaire


suivante :
q S ® ETC
q E ® aE | e
q T ® bT | cT | e
q C ® dC | da | dE

2019/2020 125
Analyseur Syntaxique Descendant
Grammaire prédictive LL(1)
Solution: First

q S ® Aa
First (S) = First (A) + First(S si A=e) = {b,a}
q A ® bB
q |e
First (S) = {a,b,c,d}
q S ® ETC
q E ® aE | e First (E) = {a,e}
q T ® bT | cT | e First(T) = {b,c,e}
q C ® dC | da | dE
First(C) = {d}
2019/2020 126
Analyseur Syntaxique Descendant
Grammaire prédictive LL(1)
Exercice : Follow
Calculer l’ensemble Follow des non terminaux de la grammaire
suivante :

q S ® ETC
q E ® aE | e
q T ® bT | cT | e
q C ® dC | da | dE

2019/2020 127
Analyseur Syntaxique Descendant
Grammaire prédictive LL(1)
Solution: Follow
First (S) = {a,b,c,d}
q S ® ETC
q E ® aE | e
First (E) = {a,e}
q T ® bT | cT | e
First(T) = {b,c,e}
q C ® dC | da | dE
First(C) = {d}

Follow (S) = {$}


Follow (C) = Follow(S) = {$}
Follow(T) = First(C) = {d}
Folow (E) = First(T)+First(C)+Follow(C)={b,c,d,$}

2019/2020 128
Analyseur Syntaxique Descendant
Grammaire prédictive LL(1)
Exemple
qDéterminons un programme permettant une analyse syntaxique en
reprenant la grammaire G suivantes:
qexpr è term
q | term “+“ expr
q | term “-“ expr
q term è fact
q | fact “*“ term
q | fact “/“ term
q fact è “a“ | “b“ | “c“ | “d“
q | (“expr“)
q | fact “^“fact
qexpr /*axiome*/)
q Nous décrirons seulement les règles de productions de fact.

2019/2020 129
Analyseur Syntaxique Descendant
Grammaire prédictive LL(1) qfact è “a“ | “b“ | “c“ | “d“
Exemple q | (“expr“)
q | fact “^“fact
Pour la fonction fact, nous obtenons alors :

void _fact()
{
if (sTerminal == “ ( “) { /*commençons par “(“ expr “)“ */
_expr();
if (sTerminal != “ ) “)
{_ErrSyntax("après expr “ ) “ attendu");}
else
{_avancer();}
} /*fin de “(“ expr “)“ */
else
{

2019/2020 130
Analyseur Syntaxique Descendant
Grammaire prédictive LL(1) qfact è “a“ | “b“ | “c“ | “d“
Exemple q | (“expr“)
q | fact “^“fact
{
if (sTerminal == (“a“ || “b“ || “c“ || “d“) {
_avancer()
}
else
{
_fact();
if (sTerminal != “^“)
{_ErrSyntax(‘’après FACT “^“ attendu ’’);}
else {
_fact();
_avancer();
} /*fin de fact “^“ fact*/
}
} /*Fin de la fonction pour les règles de fact*/

2019/2020 131
Analyseur Syntaxique Descendant
Grammaire prédictive LL(1)
qNous venons de produire un programme
permettant de construire uniquement une
analyse de la production Fact. Mais pouvons-
nous être plus général pour l’ensemble des
constructions ?

qL’analyse prédictive se fait à l’aide d’une


table d’analyse syntaxique prédictive.

2019/2020 132
Analyseur Syntaxique Descendant
Grammaire prédictive LL(1)
Table d’Analyse
First (S) = {a,b,c,d} Follow (S) = {$}
First (E) = {a,e} Folow (E) = First(T)+First(C)={b,c,d,$}
First(T) = {b,c,e} Follow(T) = First(T) = {d}
First(C) = {d} Follow (C) = Follow(S) = {$}
First Follow
S {a,b,c,d} {$}
E {a,e} {b,c,d,$}
T {b,c,e} {d}
C {d} {$}

2019/2020 133
Analyseur Syntaxique Descendant
Grammaire prédictive LL(1)
Table d’Analyse First Follow
q S ® ETC S {a,b,c,d} {$}
q E ® aE | e C ® dC’ E {a,e} {b,c,d,$}
q T ® bT | cT | e C’ ® C | a| E T {b,c,e} {d}
q C ® dC | da | dE C {d} {$}

a b c d $
S S ® ETC S ® ETC S ® ETC S ® ETC
E E ® aE E®e E®e E®e E®e
T ® bT T ® cT T®e
Table
T
d’Analyse
C C ® dC
C ® da
C ® dE
N’est pas une grammaire LL(1) Factorisation

2019/2020 134
Analyseur Syntaxique Descendant
Grammaire prédictive LL(1)
Exercice
.
Soit la grammaire suivante :
q S®S+T|T
q T ® T*F | F
q F ® (S) | id

Construire la table d’analyse

2019/2020 135
Analyseur Syntaxique Descendant
Grammaire prédictive LL(1)
Solution
Etape 1: Supprimer la récursivité a gauche

q S®S+T|T q S ® TS’
q T ® T*F | F q S’ ® + T S’ | e
q F ® (S) | id q T ® FT’
q T’ ®*FT’ | e
q F ® (S) | id

Nouvelle grammaire

2020/2021 136
Analyseur Syntaxique Descendant
Grammaire prédictive LL(1)
Solution
Calculer l’ensemble First et Follow
First Follow

q S ® TS’ S { ( , id } { ) , $ }

q S’ ® + T S’ | e S’ { + , e} { ) , $ }
q T ® FT’
T { ( , id } { + , ) , $ }
q T’ ®*FT’ | e
q F ® (S) | id T’ { * , e} { + , ) , $ }

F { ( , id } { * , + , ) , $ }

2020/2021 137
Analyseur Syntaxique Descendant
Grammaire prédictive LL(1) First Follow
Solution S { ( , id } { ) , $ }
q S ® TS’ S’ { + , e} { ) , $ }
q S’ ® + T S’ | e
T { ( , id } { + , ) , $ }
q T ® FT’
T’ { * , e} { + , ) , $ }
q T’ ®*FT’ | e
q F ® (S) | id F { ( , id } { * , + , ) , $ }
Table d’analyse
id + * ( ) $
S S ® TS’ S ® TS’
S’ S’ ® + T S’ S’ ® e S’ ® e
T T ® FT’ T ® FT’
T’ T’ ® e T’ ®*FT’ T’ ® e T’ ® e
F F ® id F ® (S)

2020/2021 138
Analyseur Syntaxique Descendant
Grammaire prédictive LL(1)
Exemple: Vérification de mot
qPrenons la grammaire G suivante :
q S à Term Exp
q Exp à +Term Exp | e
qTerm à Entier ou “0“ | “1“ | .. | “9“ | ..

2020/2021 139
Analyseur Syntaxique Descendant
Grammaire prédictive LL(1)
Exemple: Vérification de mot

qS à Term Exp
q Exp à +Term Exp | e First Follow
qTerm à Entier ou “0“ | “1“ | .. | “9“ | .. S { entier } { $ }
Exp {+ , e} { $ }
Term { entier } {+ , $ }
Table d’analyse
+ entier $
S S à Term Exp
Exp Exp à +Term Exp Exp à e
Term Term à Entier

2020/2021 140
Analyseur Syntaxique Descendant
Grammaire prédictive LL(1)
Exemple: Vérification de mot
Le mot :1+3
Reconnu Pile Entrée Action
S$ 1 + 3$ S à Term Exp
Term Exp$ 1 + 3$ Term à Entier
Entier Expr$ 1 + 3$ Entier = 1 (dépilé Entier)
1 Expr$ + 3$ Exp à +Term Exp

1 +Term Exp$ + 3$ +=+ (Dépilé +)


1+ Term Exp$ 3$ Term à Entier
1+ Entier Expr$ 3$ Entier = 3 (dépilé Entier)
1+3 Expr$ $ Exp à e
$ $ Accepté

2020/2021 141
Exercice 1
qOn s’intéresse à une 1. Cette grammaire n’est
grammaire GI de calcul pas LL(1) : pourquoi?
d’itinéraire suivante: 2. Donner une grammaire
qG = <T,NT, {ROUTE}, P> avec G’ équivalente à G et qui
qT = { go, tg, td, pan },
qNT = {ROUTE, INST, PANNEAU , TOURNE}
vous semble LL(1).
qLes règles P 3. Calculer les ensembles
ü ROUTE→ INST| INST ROUTE Premier et Suivant pour
ü INST→ go| PANNEAU TOURNE Gʹ.
ü TOURNE→ tg| td 4. Donner la table d’analyse
ü PANNEAU→ ε | pan
LL(1) de Gʹ

2020/2021 142
ü ROUTE→ INST| INST ROUTE
ü INST→ go| PANNEAU TOURNE
G ü TOURNE→ tg| td
Solution ü PANNEAU→ ε | pan

1. Cette grammaire n’est pas LL(1) : pourquoi?

Premier(INST) = premier (INST ROUTE)


N’est pas une grammaire LL1

2. G’ équivalente à G
ü ROUTE → INST ROUTE’
ü ROUTE’ → ε | ROUTE
ü INST→ go| PANNEAU TOURNE
ü TOURNE→ tg| td
Factorisation à gauche
ü PANNEAU→ ε | pan

2020/2021 143
ü ROUTE → INST ROUTE’
ü ROUTE’ → ε | ROUTE
G’ ü INST→ go| PANNEAU TOURNE

Solution ü
ü
TOURNE→ tg| td
PANNEAU→ ε | pan
Premier (PANNEAU) = { ε, pan }
Premier (TOURNE) = {tg , td}
Premier (INST) = {go} U Premier(PANNEAU) U Premier (TOURNE si PANNEAU = ε)
= {go , pan , tg , td }
Premier (ROUTE) = Premier(INST) ={go , pan , tg , td }
Premier (ROUTE’) = { ε } U Premier (ROUTE) = {go , pan , tg , td , ε }

Suivant (PANNEAU) = Premier (TOURNE) = {tg , td}


Suivant (ROUTE) = { $ }
Suivant (INST) = { go , pan , tg , td } U Suivant (ROUTE si ROUTE’= ε) = { go , pan , tg , td , $
}
Suivant (ROUTE’) = Suivant (ROUTE) = = { $ }
Suivant (TOURNE) = Suivant (INST) = { go , pan , tg , td , $ }

2020/2021 144
First Follow ü ROUTE → INST ROUTE’
ROUTE {go , pan , tg , td } { $ } ü ROUTE’ → ε | ROUTE
ü INST→ go| PANNEAU TOURNE
ROUTE’ {go , pan , tg , td , ε } { $ }
ü TOURNE→ tg| td
INST {go , pan , tg , td } {go , pan , tg , td , $ } ü PANNEAU→ ε | pan
TOURNE {tg , td} { go , pan , tg , td , $
PANNEAU { ε, pan } {tg , td}

q Table d’analyse
tg td go pan $
ROUTE ROUTE → ROUTE → ROUTE → ROUTE →
INST ROUTE’ INST ROUTE’ INST ROUTE’ INST ROUTE’
ROUTE’ ROUTE’ → ROUTE ROUTE’ → ROUTE ROUTE’ → ROUTE ROUTE’ → ROUTE ROUTE’ → ε

INST INST→ INST→ INST→ go INST→


PANNEAU TOURNE PANNEAU TOURNE PANNEAU TOURNE
TOURNE TOURNE→ tg TOURNE→ td

PANNEAU PANNEAU→ ε PANNEAU→ ε PANNEAU→ pan

2020/2021 145
Exercice 2
ØSoit la grammaire G suivante:
üE → E ou T | T
üT → T et F | F
üF → non F | (E) | vrai | faux
1. La grammaire est-elle LL(1) ?
2. Supprimer la récursivité gauche.
3. Calculer les ensembles First et Follow des symboles variables de la
nouvelle grammaire.
4. Donner la table d’analyse LL(1) de la nouvelle grammaire.
5. Donner la pile d’analyse du mot ”vrai et (faux ou vrai)”, et en déduire
l’arbre de dérivation pour ce mot

2020/2021 146
Solution
üE → E ou T | T üE → TE’
üT → T et F | F üE’ → ou TE’ | ε
üF → non F | (E) | vrai | faux üT → FT’
üT’ → et FT’ | ε
üF → non F | (E) | vrai | faux
Non récursive a gauche

2020/2021 147
Solution
üE → TE’
üE’ → ou TE’ | ε
üT → FT’
üT’ → et FT’ | ε
üF → non F | (E) | vrai | faux

First(E) = First(T) =First(F)= { non , ( , vrai , faux }

First(E’) = { ou , ε}

First(T’) = {et , ε }
2020/2021 148
Solution
üE → TE’
üE’ → ou TE’ | ε
üT → FT’
üT’ → et FT’ | ε
üF → non F | (E) | vrai | faux
Follow (E) = { ) , $ }
Follow (E’) = { ) , $ }
Follow (T) = { ou, ) , $ }
Follow (T’) = { ou, ) , $ }
Follow (F) = { et , ou, ) , $ }

2020/2021 149
Solution
Table d’analyse

et ou Non vrai faux ( ) $


E EàTE’ EàTE’ EàTE’ EàTE’
E’ E’àouTE’ E’àε E’àε
T TàFT’ TàFT’ TàFT’ TàFT’
T’ T’àetFT’ T’àε T’àε T’àε
F FànonF Fàvrai Fàfaux Fà( E )

Vérification de mot : vrai et (faux ou vrai) (sur tableau)

2020/2021 150
Vrai et(faux )$ vraiT’E’)T’E’$ Vrai=vrai
ou vrai
Vrai et(faux )$ T’E’)T’E’$ T’àε
ou vrai

Vrai et(faux )$ E’)T’E’$ E’àε


ou vrai

Vrai et(faux )T’E’ $ )=)


ou vrai

Vrai et(faux $ T’E’ $ T’àε


ou vrai
)
Vrai et(faux $ E’ $ E’àε
ou vrai)
$ $ Reconnu

2020/2021 151
Analyse Syntaxique Ascendante
LR

2020/2021 152
Analyse syntaxique Ascendante
LR : Left to right – Rightmost derivation
qCette classe de méthodes ascendantes couvre la méthode
d’analyse déterministe la plus générale connue applicable
aux grammaires non ambiguës.

qElle présente les avantages suivants :


q Détection des erreurs de syntaxe le plus tôt possible, en lisant les
terminaux de gauche à droite.
q Analyse de toutes les constructions syntaxiques des langages
courants.

2020/2021 153
Analyse syntaxique Ascendante
LR : Left to right – Rightmost derivation
q C’est la méthode la plus générale d’analyse
syntaxique par décalage-réduction sans retour-
arrière.
q Nous pouvons construire des analyseurs LR
reconnaissant quasiment toutes les constructions
des langages.
q La classe des grammaires analysées est un sur-
ensemble de la classe des grammaires analysées
en LL.

2020/2021 154
Analyse syntaxique Ascendante
LR : Left to right – Rightmost derivation
Architecture générale

Entrée Sn Sn-1 … $

Sn
Pile Sn-1
(Symboles Analyseur Sortie
et Etats) … Syntaxique LR

Action Aller_à

2020/2021 155
Analyse syntaxique Ascendante
LR
qLes méthodes LR sont les plus générales, au prix de tables
d’analyse volumineuses.
qLa méthode LR comprend plusieurs cas particuliers,
correspondant au même algorithme d’analyse :
q SLR où S signifie simple : c’est la construction de l’automate LR à
partir de la grammaire. Transitions données uniquement par la table
ALLER_A.
q LALR où LA signifie LookAhead (YACC/Bison) : ce cas couvre
beaucoup de langages, avec une taille de table d’analyse de la même
taille que SLR.
qLes méthodes LR construisent l’arbre d’analyse de dérivation en
ordre inverse, en partant des feuilles.

2020/2021 156
Analyse syntaxique Ascendante
SLR
qUne position d’analyse LR placé dans le
corps de chaque production de la
grammaire est schématisée par un point •.

q Ce • indique que nous avons accepté ce


qui précède dans la production, et que nous
sommes prêts à accepter ce qui suit le point.

2020/2021 157
Analyse syntaxique Ascendante
LR : Left to right – Rightmost derivation
Exemple
expression è expression • ’’ + ‘’ terme

qL’idée centrale de la méthode LR est : Étant


donnée une position d’analyse •, nous
cherchons à obtenir par fermeture transitive
toutes les possibilités de continuer l’analyse
du texte source, en tenant compte de toutes
les productions de la grammaire par
décalage ou réduction.

2020/2021 158
Analyse syntaxique Ascendante
SLR
Décalage – Réduction (shift-reduce)
qRéduction (REDUCE) : remonter la dérivation du
handle en chaînage arrière

qDécalage (SHIFT) : Quand la fronwère haute ne


conwent aucun « manche », l’analyseur repousse
(décale) la fronwère en ajoutant un token à droite
de la frontière.

2020/2021 159
Analyse syntaxique Ascendante
SLR
Décalage – Réduction (shift-reduce)
Exemple
Pile … … … $
Au départ
Flux d’entré

Ø On décale de l’entrée vers la pile 0, 1 ou plusieurs


En cours
symboles jusqu’à ce qu’un manche se trouve en
sommet de pile.

Ø On le remplace par la partie gauche de la production

S
$
Fin Ø Détection d’une Erreur ou $

2020/2021 160
Analyse syntaxique Ascendante
Analyseur LR
Décalage – Réduction (shift-reduce)
Exemple

üE à E+E id + id * id $
üE àE * E Flux d’entrée
üE à (E)
üEà id Reduce $ E + E *id $

Au départ $ id+id*id $ Reduce $ E *id $

Shift id +id*id $ Shift $ E * id $


$
Shift $ E * id $
Reduce $ E +id*id $
id*id $ Reduce $ E * E $
Shift $ E +
Reduce $ E $
Shift $ E + id *id $

2020/2021 161
Analyse syntaxique Ascendante
Fermeture transitive
Définition
Ø Transitive signifie que nous propageons la
connaissance que nous avons de la
position d’analyse en tenant compte des
productions définissant la notion non
terminale que nous sommes prêts à
accepter.
Ø Fermeture signifie que nous faisons cette
propagation de toutes les manières
combinatoires possibles, jusqu’à
saturation.

2020/2021 162
Analyse syntaxique Ascendante
LR : Left to right – Rightmost derivation
Exemple
qUne position d’analyse est de la forme:
q notion è préfixe • non-terminal suffixe

qSa fermeture transitive (transitive closure)


se construit suivant toutes les productions
définissant la notion non-terminal de la forme:
q Non-terminal è corps

qNous ajoutons à l’état d’analyse le point •


pour marquer son début :
q Non-terminal è • corps

2020/2021 163
Analyse syntaxique Ascendante
Analyse SLR
Exemple
q Soit la grammaire G, avec des productions récursives à gauche
suivantes :
üSà exp
üexp àexp + term | term
üterm à term * fact | fact
üfact à ( exp ) | Entier

q L’axiome S permet d’avoir qu’un seul état accepteur (méthode


ascendante, Grammaire Augmentée).

2020/2021 164
Analyse syntaxique Ascendante
SLR
Exemple
qAu début de l’analyse nous nous trouvons dans la position initiale :
noté Etat_0 dans l’automate SLR.
üSà • exp
qNous n’avons encore rien consommé et nous sommes prêt à
accepter une exp :
üexp à • exp + term
üexp à • term
qD’après les productions de notre grammaire nous sommes dans
l’une des positions d’analyse initiales suivantes:
üterm à • term * fact
üterm à • fact
üfact à • ( exp )
üfact à • Entier

2020/2021 165
Analyse syntaxique Ascendante
Analyse SLR
Exemple
q De l’état_0 initial, Etat_1 // accepter exp
nous pouvons accepter Sà exp •
exp à exp • + term
tout ce qui se trouve à
droite du point Etat_2 // exp
accepter term
à term •
d’analyse; nous nous term à term • * fact
retrouvons alors dans Etat_3 // accepter fact
un des états suivants : term à fact •
Etat_4 // accepter (
term à ( • exp )
Etat_5 // accepter Entier
term à Entier •

2020/2021 166
6
Sà exp • 1 exp à exp + • term
exp à exp • + term + term à • term * fact term 9
term à • fact exp à exp + term •
exp fact à • ( exp ) term à term • * fact
fact à • Entier
exp à term • 2
* 7
term à term • * fact fact
term à term * • fact 10
term fact à • ( exp )
0 fact à • Entier term à term * fact •
Sà • exp
exp à • exp + term 3
exp à • term fact term à fact •
term à • term * fact
term à • fact
fact à • ( exp )
fact à • Entier fact à (• exp ) 4
exp à • exp + term
( exp à • term exp 8
term à • term * fact fact à (exp •) )
term à • fact exp à exp • + term
fact à • ( exp )
Entier fact à • Entier
11

5 fact à (exp ) •

fact à Entier •

2020/2021 167
fact
6
Sà exp • 1 exp à exp + • term
exp à exp • + term + term à • term * fact term 9
term à • fact exp à exp + term •
exp fact à • ( exp ) term à term • * fact
fact à • Entier
exp à term • 2 *
* 7
term à term • * fact fact
term à term * • fact 10
term fact à • ( exp )
0 term fact à • Entier term à term * fact •
Entier (
Sà • exp
exp à • exp + term 3 Entier
(
exp à • term fact term à fact •
term à • term * fact ( +
term à • fact fact
fact à • ( exp )
fact à • Entier fact à (• exp ) 4
exp à • exp + term
( exp à • term exp 8
term à • term * fact fact à (exp •) )
term à • fact exp à exp • + term
fact à • ( exp )
Entier fact à • Entier
11

5 fact à (exp ) •

fact à Entier •
Entier

2020/2021 168
fact
6
1 + term
exp 9

term 2
*
7
* 10
term fact
Entier (
fact Entier
0 3 (
( +
fact
4
(
8
exp
)
11
Entier
5
Entier
Automate final

2020/2021 169
Analyse syntaxique Ascendante
SLR
Construction de la table d’analyse: Action et Aller_à
qSi l’état état_i contient une position d’analyse de la forme: notion Þ préfixe ● terminal suffixe
qet que: Aller_à( état_i, terminal ) = état_destination

q alors on choisit:
q ACTION ( état_i, terminal ) = SHIFT état_destination

qSi l’état état_i contient une position d’analyse: notion Þ corps ● où notion n’est pas S,
q alors pour tout terminal de Suivant(notion) on fixe:
q ACTION( état_i, terminal ) = REDUCE notion Þ corps

qSi l’état état_i contient la position d’analyse : S Þ axiome ●


q alors on choisit :
q ACTION( état_i, $) = ACCEPT (dernier REDUCE)

qToutes les entrées de la table action qui n’ont pas été garnies par les quatre considérations ci-dessus sont
marquées par:
q ACTION( état_i, terminal_i ) = ERROR

qon garde le contenu de la table ALLER_A pour toutes les entrées dont le second argument est une notion non
terminale

2020/2021 170
Analyse syntaxique Ascendante
Analyse SLR
Construction de la table Action
Etat Entier + * ( ) $
Etats x å = T-->états
0 S 5 S 4
1 S 6 Acc
S i= Shift, décaler
2 R 2 S 7 R 2 R 2 et empiler l’état i
3 R 4 R 4 R 4 R 4
4 S 5 S 4 R j = Reduce avec la régle j
5 R 6 R 6 R 6 R 6
6 S 5 S 4
7 S 5 S 4 R1: exp à exp + term
8 S 6 S 11 R2: exp à term
R3: term à term * fact
9 R 1 S 7 R1 R1
R4: term à fact
10 R3 R 3 R 3 R 3 R5: fact à ( exp )
11 R5 R5 R 5 R 5 R6: fact à Entier

2020/2021 171
Analyse syntaxique Ascendante
Construction de la table Aller_à
Etat exp term fact
Etats x å = NT-->états
0 1 2 3
1
2
3
4 8 2 3
5
6 9 3
7 10
8
9
10
11

2020/2021 172
R1: exp à exp + term Exemple
R2: exp à term
R3: term à term * fact
R4: term à fact Entier * Entier + Entier $
R5: fact à ( exp )
R6: fact à Entier Flux d’entrée
*entier+entier$ *entier+entier$ *entier+entier$ entier+entier$
0 S 5 0 Entier 5 R 6 0 fact 3 R 4 0 term 2 S 7 0 term 2 * 7

+entier$ +entier$
S 5 0 term 2 * 7 Entier 5 R 6 0 term 2 * 7 fact 10

+entier$ +entier$ entier$


R 3 0 term 2 R 2 0 exp 1 S 6 0 exp 1 + 6

$ $
S 5 0 exp 1 + 6 Entier 5 R 6 0 exp 1 + 6 fact 3

$ $
R 4 0 exp 1 + 6 term 9 R 1 0 exp 1 Acc

2020/2021 173

Vous aimerez peut-être aussi