TD Corrigés Comp
TD Corrigés Comp
TD Corrigés Comp
Département Informatique
Semestre 5
Module Compilation
i
Table des matières Correction de la série 6 .................................................................................................. 22
Cours .......................................................................................................................... 22
Table des matières ............................................................................................................ ii Exercices .................................................................................................................... 23
Introduction ...................................................................................................................... v Série 7............................................................................................................................. 25
Série 1............................................................................................................................... 1 Correction de la série 7 .................................................................................................. 26
Correction de la série 1 .................................................................................................... 3 Exercice 1 ................................................................................................................... 26
Exercice 1 ..................................................................................................................... 3 Exercice 2 ................................................................................................................... 30
Exercice 2 ..................................................................................................................... 5 Exercice 3 ................................................................................................................... 30
Exercice 3 ..................................................................................................................... 7 Exercice 4 ................................................................................................................... 30
Exercice 4 ..................................................................................................................... 8 Série 8............................................................................................................................. 34
Série 2............................................................................................................................. 10 Correction de la série 8 .................................................................................................. 36
Correction de la série 2 .................................................................................................. 11 Exercice 1 ................................................................................................................... 36
Exercice 1 ................................................................................................................... 11 Exercice 2 ................................................................................................................... 36
Exercice 2 ................................................................................................................... 11 Exercice 3 ................................................................................................................... 38
Exercice 3 ................................................................................................................... 13 Exercice 4 ................................................................................................................... 39
Série 3............................................................................................................................... 1 Exercice 5 ................................................................................................................... 41
Correction de la série 3 .................................................................................................... 2 Série 9............................................................................................................................. 43
Exercice 1 ..................................................................................................................... 2 Correction de la série 9 .................................................................................................. 45
Exercice 2 ..................................................................................................................... 3 Exercice 1 ................................................................................................................... 45
Série n°4 ........................................................................................................................... 5 Exercice 2 ................................................................................................................... 46
Correction de la série 4 .................................................................................................... 7 Exercice 3 ................................................................................................................... 48
Exercice 1 ..................................................................................................................... 7 Exercice 4 ................................................................................................................... 50
Exercice 2 ..................................................................................................................... 8 Exercice 5 ................................................................................................................... 52
Exercice 3 ..................................................................................................................... 9 Série 10........................................................................................................................... 54
Exercice 4 ................................................................................................................... 10 Correction de la série 10 ................................................................................................ 56
Exercice 5 ................................................................................................................... 13 Exercice 1 ................................................................................................................... 56
Série 5............................................................................................................................. 15 Exercice 2 ................................................................................................................... 58
Correction de la série 5 .................................................................................................. 17 Exercice 3 ................................................................................................................... 60
Exercice 1 ................................................................................................................... 17 Série 10........................................................................................................................... 63
Exercice 2 ................................................................................................................... 18 Correction de la série 10 ................................................................................................ 64
Exercice 3 ................................................................................................................... 18 Série 11........................................................................................................................... 67
Exercice 4 ................................................................................................................... 18 Correction de la série 11 ................................................................................................ 68
Exercice 5 ................................................................................................................... 19 Série révision.................................................................................................................. 70
Exercice 6 ................................................................................................................... 20 Correction de la série révision........................................................................................ 72
Série 6............................................................................................................................. 21 Cours .......................................................................................................................... 72
ii iii
Exercice 1 ................................................................................................................... 74
Exercice 2 ................................................................................................................... 76
Exercice 3 ................................................................................................................... 76 Introduction
Exercice 4 ................................................................................................................... 77
Exercice 5 ................................................................................................................... 78 Ce document contient des travaux dirigés de la matière compilation qui fait partie
de semestre 5 de la filière fondamentale SMI version 2014-2019 et la filière
professionnalisante LPII version 2015-2019. Ils contiennent des questions
relatives aux concepts traités dans le cours magistral. Il est divisé en séries décrites
brièvement comme suit :
- La série 1 : traite des généralités des langages, traducteurs et compilateurs ;
iv v
1. Donner l’arbre abstrait de 3-2+1
2. Donner l’arbre d’analyse de 3-2+1.
Série 1
Exercice 4
Exercice 1 Soit la grammaire suivante :
1. Définir ce qui est la traduction. Donner un exemple de traducteur. - Droite → Lettre = Droite
2. Pourquoi a-t-on besoin de traducteurs ? - Droite →Lettre
3. Définir ce qui est la compilation. Donner un exemple de compilateur. - Lettre → a|b|c…|z
4. Donner un schéma simple qui montre le lien entre un compilateur et les langages 1. Donner l’arbre d’analyse de l’expression a=b=c.
de programmation. 2. Dans un langage à trois adresses, donner la séquence d’affectations pour évaluer
5. Définir ce qui un interpréteur. Donner un exemple. l’expression z1=a+b+c.
6. Donner un schéma qui montre le lien entre interpréteur et les langages de 3. Faire de même pour z2=a+b*c+d
programmation. Exercice 5
7. Quelles sont les différences entre un langage interprété et un langage compilé ? 1. Ecrire un programme qui reconnait les identificateurs.
8. Existe-t-il des langages qui combinent interprétation et compilation ? Donner un 2. Faire de même pour les nombres entiers.
exemple. 3. Faire de même pour les nombres réels.
9. Pourquoi ce genre de langages (de la question précédente) existe ? 4. Construite un programme qui lit une chaîne et affiche la liste des mots qu'elle contient
10. Donner la définition de l’analyse lexicale. avec leurs natures : identificateur, nombre entier, nombre réel et autre.
11. Définir ce qui est l’analyse syntaxique.
12. Définir ce qui est l’analyse sémantique.
13. Donner un exemple d’optimisation de code.
Exercice 2
Donner l’arbre abstrait de chacune des expressions suivantes :
1. Y+1
2. X=y+1
3. a+b+c*d
4. a*b+c+d
Exercice 3
On considère la grammaire suivante :
- Liste → Liste + Chiffre
- Liste → Liste - Chiffre
- Liste → Chiffre
- Chiffre → 0|1|2|…|9
2
1
Correction de la série 1 Exemples d'interpréteur :
- Interpréteur javascript;
Exercice 1 - Interpréteur php.
1. Définir ce qui est la traduction. Donner un exemple de traducteur. 6. Donner un schéma qui montre le lien entre interpréteur et les langages de
programmation.
La traduction est l'opération qui consiste à transformer (traduire) un programme écrit
dans un langage A en un autre programme écrit dans un langage B tout en conservant le
sens.
Les ordinateurs sont des machines qui ne comprennent que les langages machine. Ces 7. Quelles sont les différences entre un langage interprété et un langage compilé ?
derniers utilisés en programmation présentent beaucoup d'inconvénients et la rendent
difficile. Pour programmer avec les langages évolués ou de haut niveau non compris par Un langage interprété est portable.
les processeurs des ordinateurs, nous devons traduire le code de haut niveau en code Un langage compilé est plus efficace.
machine. Pour ce faire, nous avons besoin d'un programme qui fait la traduction de
langage haut niveau en langage binaire et qui s'appelle un traducteur. 8. Existe-t-il des langages qui combinent interprétation et compilation ? Donner un
La compilation est la traduction d’un programme source écrit dans un langage évolué en Java est un langage semi-compilé et semi-interprété, il combine à la fois la
programme en langage machine (langage binaire). compilation(javac) et l'interprétation(java).
Exemples de compilateur
- Compilateur du langage : cc;
- Compilateur de Java : javac. 9. Pourquoi ce genre de langages (de la question précédente) existe ?
4. Donner un schéma simple qui montre le lien entre un compilateur et les langages de Ce genre de langage combine les avantages de l’interprétation et de compilation.
programmation.
10. Donner la définition de l’analyse lexicale.
Le schéma qui montre le lien entre compilateur et les langages de programmation est
donné par L’analyse lexicale est une tâche du front end d’un compilateur. Durant cette tâche le
compilateur lit le programme source caractère par caractère pour former les mots
(lexèmes) en utilisant les séparateurs et les envoyer à l'analyseur syntaxique.
5. Définir ce qui un interpréteur. Donner un exemple. L’analyse syntaxique (parsing) est une tâche du front end du compilateur. Elle consiste
à vérifier la syntaxe d’un programme en se basant sur le résultat de l’analyseur lexicale
et la syntaxe du langage.
Interpréteur est un programme qui analyse, traduit et exécute un programme (écrit en
un langage interprétable comme php, javascript, etc.) instruction par instruction. Il n’y
a pas d'exécutable dans ce genre de traduction. 12. Définir ce qui est l’analyse sémantique.
3 4
L’analyse sémantique est l’opération qui passe après la fin de l’analyse syntaxique est
qui consiste à vérifier le sens du programme. Par exemple, la vérification de la
comptabilité des types de variables dans une opération arithmétique ou affectation.
- Code optimisé :
b=a+2;
Exercice 2
1. Y+1
2. X=y+1
3. a+b+c*d
4. a*b+c+d
Pour simplifier l'écriture des arbres abstraits, on utilise les notations préfixes des
expressions.
1. Y+1
2. X=y+1
5 6
4. a*b+c+d L'arbre de dérivation associé à ces dérivations est donné par
La notation infixe de 3-2+1 est +(-(3,2),1) et son abstrait est donné par
7 8
Série 2
Droite =>Lettre=Droite
=>Lettre=Lettre=Droite Exercice 1
Exercice 2
1. Chercher les lexèmes et les unités lexicales associées dans le programme suivant :
int main()
{
2. Dans un langage à trois adresses, donner la séquence d’affectations pour évaluer int x, y;
l’expression z1=a+b+c. x=1 ;
y=2 ;
z=x+y;
La séquence d'affectations est comme suit : return z;
x=a+b }
z1 = x + c
2. Donner le flot équivalent à ce programme en termes d’unités lexicales.
La séquence d'affectations cherchée est : 1. Chercher les lexèmes et les unités lexicales associées dans le programme suivant :
x=b*c int f ( real x)
y=a+x {
z2 = y + d if (x<0.0)
return -1;
else
if (x==0)
return 0;
return 1;
}
9 10
Correction de la série 2 int main()
{
int x, y;
Exercice 1 x=1 ;
y=2 ;
1. Chercher les lexèmes et les unités lexicales associées dans le programme suivant : z=x+y;
return z;
}
void main()
{ On donne dans le tableau ci-après les lexèmes et les unités lexicales associées dans le
int z=1; programme ci-dessus.
}
Les lexèmes et les unités lexicales associées dans ce programme sont répertoriés dans Lexèmes Unités lexicale associée
le tableau ci-après: int INT
main MAIN
( LPAR
Lexèmes Unités lexicale associée ) RPAR
void VOID { LBRACE
main MAIN Int INT
( LPAR X ID
) RPAR , COMMA
Y ID
{ LBRACE
; SEMI
int INT
X ID
Z ID = ASSOP
= ASSOP 1 NUM
1 NUM ; SEMI
; SEMI Y ID
} RBRACE = ASSOP
2 NUM
; SEMI
2. Donner le flot équivalent à ce programme en termes d’unités lexicales. Z ID
= ASSOP
Le flot équivalent à ce programme est donné, en repectant le format <lexème, unité X ID
lexicale>, par : + PLUS
y ID
<void,VOID> <main, MAIN> <(,LPAR> <),RPAR> <{,LBRACE> <int,INT> <z,ID> ; SEMI
<=,ASSOP> <1,NUM> <;,SEMI> <},RBRACE> return RETURN
z ID
Exercice 2 ; SEMI
} RPRACE
1. Chercher les lexèmes et les unités lexicales associées dans le programme suivant :
2. Donner le flot équivalent à ce programme en termes d’unités lexicales.
11 12
Lexèmes Unités lexicale associée
INT MAIN LPAR RPAR INT ID COMMA ID SEMI ID ASSOP NUM SEMI ID int INT
ASSOP NUM ID ASSOP ID PLUS ID SEMI f ID
RETURN ID SEMI LPRACK ( LPAR
real REAL
Exercice 3 x ID
) LPAR
1. Chercher les lexèmes et les unités lexicales associées dans le programme suivant :
{ LBRACE
int f ( real x) if IF
{ ( LPAR
if (x<0.0) x ID
return -1;
< LESS
else
if (x==0) 0.0 REAL
return 0; ) LPAR
return 1; return RETURN
} -1 NUM
; SEMI
else ELSE
if IF
( LPAR
x ID
== EQUAL
0 NUM
) RPAR
return RETURN
0 NUM
; SEMI
return RETURN
1 NUM
; SEMI
} RBRACE
INT ID LPAR REAL ID RAPR LBARCE IF LPAR ID LESS REAL RPAR RETURN
NUM SEMI ELSE IF LPAR ID EQUAL NUM RPAR RETURN NUM SEMI
RETURN NUM SEMI RETURN NUM SEMI RPAR
13 14
Série 3 Correction de la série 3
Exercice 1 Exercice 1
1. Proposer une expression régulière pour les chiffres. 1. Expression régulière pour les chiffres.
2. Proposer une expression régulière pour les lettres.
Chiffre → 0|1|2|3|4…|9 ou bien
3. Proposer une expression régulière pour les identificateurs.
Chiffre → [0-9]
4. Proposer une expression régulière pour les nombres entiers.
5. Proposer une expression régulière pour les nombres binaires divisibles par 2. 2. Expression régulière pour les lettres.
6. Proposer une expression régulière pour les nombres binaires contenant au moins
deux un. Lettre → a|b|c|…|z|A|B|C…|Z ou bien
Lettre → [a-zA-Z]
7. Donner l’expression régulière qui reconnaît les chaînes a, b ou c.
8. Donner l’expression régulière qui reconnaît les chaînes commençant par a suivi
3. Expression régulière pour les identificateurs.
d’une combinaison quelconque de a, b ou c.
ID → [a-zA-Z]([0-9] | [a-zA-Z] ) *
Exercice 2
On peut aussi utiliser les définitions régulières :
Définir le langage déterminé par chacune des expressions régulières suivantes :
Chiffre → [0-9]
1. (0|1)*0
Lettre → [a-zA-Z]
2. (a|b)*aa(a|b)*
3. (0|1)+0 ID → Lettre(Chiffre | Lettre)*
4. (aa)*
4. Expression régulière pour les nombres entiers.
5. (aa)+
6. a(aa)*.
Entier → [0-9]+
Chiffre → [0-9]
Entier → Chiffre+
Les nombres binaires divisible par 2 sont les nombres binaires qui ont le chiffre 0 à la
fin :
(0|1)*0
2
1
6. Expression régulière pour les nombres binaires contenant au moins deux un. 6. a(aa)*
a|b|c
a(a|b|c)*
Exercice 2
1. (0|1)*0
2. (a|b)*aa(a|b)*
3. (0|1)+0
4. (aa)*
5. (aa)+
3 4
Série n°4
b
Exercice 1 a a
0 1 3
Soit l’automate suivant :
b a
b
a c 2
0 1 2
1. Préciser les états, l’état initial et les états finaux dans cet automate. 1. Préciser les états, l’état initial et les états finaux dans cet automate.
2. Préciser l’alphabet de cet automate. 2. Préciser l’alphabet de cet automate.
3. Cet automate est-il déterministe ? 3. Cet automate est-il déterministe ?
4. Donner une expression régulière qui peut être associée à cet automate. 4. Donner une expression régulière qui peut être associée à cet automate.
Exercice 2 Exercice 4
Soit l’automate suivant : 1. Proposer une expression régulière pour les constantes entières.
d 2. Donner l’automate fini non déterministe associé à l’expression trouvée.
3. Chercher l’automate fini déterministe équivalent à celui trouvé à la question
a b c précédente.
0 1 2 3
c Exercice 5
IDEM que l’exercice précédent mais pour les constantes réelles à virgule fixe.
1. Préciser les états, l’état initial et les états finaux dans cet automate.
2. Préciser l’alphabet de cet automate.
3. Cet automate est-il déterministe ?
4. Donner une expression régulière qui peut être associée à cet automate.
Exercice 3
5 6
Correction de la série 4 Exercice 2
1. Préciser les états, l’état initial et les états finaux dans cet automate.
1. Préciser les états, l’état initial et les états finaux dans cet automate. L'ensemble des états de cet automate est :
E = {0, 1, 2, 3}.
Les états de cet automate sont donnés par l'ensemble E suivant :
L'état initial de cet automate est :
E = {0, 1, 2}.
I= {0};
L'état initial de cet automate est :
L'état final de cet automate est :
I= {0};
F= {1}.
Les états finaux de cet automate sont :
2. Préciser l’alphabet de cet automate.
F= {0, 2}.
2. Préciser l’alphabet de cet automate. L'alphabet de cet automate est :
∑={a, b, c, d}.
L'alphabet de cet automate est :
3. Cet automate est-il déterministe ?
∑={a, c}.
3. Cet automate est-il déterministe ? Cet automate est déterministe car il ne contient pas de transition epsilon, et pour chaque
transition T(état, symbole) il y a au plus un état. En effet,
Cet automate est déterministe car il ne contient pas de transition epsilon, et pour chaque
T(0,a)={1},
transition T(état, symbole) il y a au plus un état. En effet,
T(1,b)={2},
T(0,a)={1} et T(1,c)={2}.
T(1,c)={3},
4. Donner une expression régulière qui peut être associée à cet automate.
T(2,c)={3}.
L'expression régulière associée à cet automate est donnée par :
T(3,d)={0}.
ac | ↋
7 8
4. Donner une expression régulière qui peut être associée à cet automate. T(0,b)={2},
T(1,b)={1},
L'expression régulière associée à cet automate est donnée par :
T(1,a)={3},
a | (a(bc | c)da)+
T(2,a)={2},
Exercice 3
T(2,b)={3}.
Soit l'automate suivant :
4. Donner une expression régulière qui peut être associée à cet automate.
b
a 1 a L'expression régulière associée à cet automate est donnée par :
0 3
a ab*a | ba*b
b
b
2 Exercice 4
1. Préciser les états, l’état initial et les états finaux dans cet automate.
L'expression simplifiée pour les entiers est donnée par
L'état initial de cet automate est : Si on prend en considération des signes, on écrit l'expression suivante :
Cet automate est déterministe car il ne contient pas de transition epsilon, et pour chaque
transition T(état, symbole) il y a au plus un état. En effet,
T(0,a)={1},
9 10
T(y0, C)= ε-f(2)={1,2} que l'on nomme y1, i.e. y1={1,2}.
L'automate fini non déterministe (sans numérotation des états) associé à Cherchons les transitions possibles à partir de y1.
est donné par : Donc l'ensemble cherché Y des états est donné par :
Nous allons utiliser l'algorithme de transformation d'un automate fini non déterministe
en automate déterministe. Soit y0 l'état initial de Y.
11 12
Y={y0={0,1}, y1={1,2}, y2={1}} et l'automate associé à Y est donné par :
plus l'automate (les entiers sont des cas particuliers des réels) :
Exercice 5
Rappel
Extension d’expression régulière
a{1-3} = (a | aa || aaa) Ce qui donne l'automate suivant :
Une expression régulière pour les constantes réelles peut être donnée par :
Réal (+|-|𝜀)[0-9]+.[0-9]+
ou bien
et l'automate :
13 14
Série 5 Exercice 5
Construire un automate qui reconnaît le langage défini par chacune des expressions
régulières suivantes : a b
0 1 3
1. (ab|ba)+ b a
a a
2. (a|b)*ab(a|b)* b
2
3. aab(a|b)*(bb|aa)+
1. Cet automate est-il déterministe ?
Exercice 3
2. Chercher l’AFD qui lui équivaut.
Donner un automate qui reconnaît chacun des langages suivants :
3. Chercher une expression régulière qui peut représenter le langage reconnu par
1. Les mots formés de a et b contenant toujours trois a. l’automate trouvé.
Exercice 4
15 16
Correction de la série 5 Les chemins suivis par le mot abcabcca ne permettent pas d'absorber tous ses symboles
et particulièrement le dernier symbole a. Donc ce mot n'est pas reconnu par le langage
défini par la table de transitions.
Exercice 1
a b c
0 0,1 3 Exercice 2
1 2,4
2 3 0,4 Exercice 3
3 3
4 1 Donnons un automate qui reconnait les langages suivant :
1. Les mots formés de a et b contenant toujours trois a
L’état initial est 0 et les états terminaux sont 1 et 3.
Vérifier si les mots suivants font partie ou non du langage défini par cette table de
transitions : 2. Les mots formés de a et b contenant au moins trois a
abc, baabc, aabcbcab et abcabcca.
En parcourant tous les chemins possibles si le dernier symbole du mot se trouve dans
3. Les mots formés de a et b ou chaque a est suivi immédiatement de b
un état final alors il est accepté par l’automate sinon il n’est pas accepté.
Exercice 4
Le dernier état contient 1 comme état final. Donc le mot abc fait partie du langage Construction d’un automate qui reconnait le langage :
défini par la table de transitions. a) L={Les mots composés de a et b avec un nombre pair de a et un nombre impair
de b.}
Pour le mot baabc
L= 𝐿 ∪ 𝐿 .
A l'état 0 lorsqu'on reçoit b premier symbole de baabc, la table signale une erreur. Donc
Avec 𝐿 = { Les mots composés de a et b avec un nombre pair de a}
on ne pas construire le mot baabc et le mot baabc ne fait pas partie du langage défini
par la table de transitions. Son afd équivalent :
17 18
(2,5) (3,5) (2,4)
La table de transition d’AFD équivalent :
(3,4) (2,4) (3,5)
(3,5) (2,5) (3,5) état a b
->{0,1,2} {0,1,2,3,4} {0,1,2}
D’où l’automate cherché est :
{0,1,2,3,4} {0,1,2,3,4} {0,1,2,3,4}
D’où l’AFD cherché est : 1. 𝛿(0, a)= {1,2} donc l’automate n’est pas déterministe
(𝛿 𝑒𝑠𝑡 𝑙𝑎 𝑓𝑜𝑛𝑐𝑡𝑖𝑜𝑛 𝑑𝑒 𝑡𝑟𝑎𝑛𝑠𝑖𝑡𝑖𝑜𝑛).
c) Les mots composés de a et b et c avec deux a et un nombre impair de c . 2. Par la méthode de construction par sous-ensemble on trouve :
En utilisant la même méthode que dans question a), on trouve :
q 𝛿(q, a)= 𝛿(q, a)
0 {1,2} ∅
Exercice 5 {1,2} {1} {2,3}
1. L’automate contient des transition 𝜀 donc il n’est pas déterministe . ∅ ∅ ∅
2. Construction par sous-ensemble de l’afd équivalent :
D’abord on supprime les transition 𝜀 du tableau de transition ( parmi les {1} ∅ {2,3}
solutions est construire l’automate est suivre les cas possible des transition) {2,3} {1,3} {3}
1 0,1,3,4 0,2
D’où l’automate équivalent est :
2 0,1,2 0,1,2,3
3. Expression régulière associée au langage :
3 0,1,2,3,4 0,1,2,3
4 0,1,2,3 4 ER a(ab|ba)*ba*
D’où :
19 20
Série 6 Correction de la série 6
Cours Cours
1. Expliquer les raisons d’avoir une analyse lexicale séparée des autres phases d’un 1. Expliquer les raisons d’avoir une analyse lexicale séparée des autres phases d’un
compilateur compilateur.
2. Donner et expliquer le schéma d’un analyseur lexical.
Parmi les raisons d’avoir une analyse lexicale séparée des autres phases d’un
3. Définir ce qui est une expression régulière.
compilateur :
- Facilité de conception
Exercices
- Portabilité de compilateur
- Efficacité (tache mécanique)
1. Donner l’expression régulière qui définit les chaînes reconnaissables par l’automate
- Existence de générateur d’analyseur lexical (exemple Flex)
suivant :
4. Donner l’automate qui reconnaît les phrases contenant a, b se terminant par ab.
5. Donner l’automate qui reconnaît les nombres binaires multiples de 4.
6. Donner l’expression régulière qui définit les chaînes reconnaissables par l’automate
3. Définir ce qui est une expression régulière.
suivant :
Expression régulière est une description algébrique d’un langage sous forme de séquence
de symboles de l’alphabet de ce langage avec des opérateurs :
b - Concaténation ;
- Union ;
- Fermeture positive (+) ;
a c
0 1 2 - Fermeture de Kleene (*).
21 22
Exercices
1. Donner l’expression régulière qui définit les chaînes reconnaissables par l’automate
suivant :
b
3. l’AFD associé à l’expression régulière suivante : (a | bc)*
a c (a | bc) * = a* | bc* afd en question 2
0 1 2 4. L’automate qui reconnaît les phrases contenant a, b se terminant par ab :
L'expression régulière qui définit les chaînes reconnaissables par l’automate est :
(ab)+(c | 𝜀) | ac | 𝜀 equivalent (ab)+c ?|ac| 𝜀
b
a c
0 1 2
1. l’expression régulière qui définit les chaînes reconnaissables par l’automate est :
(ab)+(c | 𝜀) | ac | 𝜀 equivalent (ab)+c ?|ac| 𝜀 . 6. L’expression régulière qui définit les chaînes reconnaissables par l’automate
mentionné en sujet :
2. l’AFD associé à l’expression régulière suivante : a* | (bc)* ac(bc)* | 𝜀
23 24
Série 7 Correction de la série 7
Exercice 1 Exercice 1
3. Donner les dérivations droites de chacune de ces chaînes. Les non terminaux de la grammaire sont :
4. Donner l’arbre d’analyse de la deuxième chaîne en utilisant une dérivation droite. NT = { S ,L}
Exercice 3 S=>(L)
=>(L,S)
1. Construire une grammaire hors contexte pour l’expression régulière suivante (ab)*. =>(S,S)
2. Construire une grammaire hors contexte pour les mots contenant un nombre pair de =>(a,S)
a. =>(a,a)
25 26
S=>(L) c) La dérivation droite de la chaine (a,((a,a),(a,a)))
=>(L,S)
=>(S,S)
=>(a,S) S=>(L)
=>(a,(L)) =>(L,S)
=>(a,(L,S)) =>(L,(L))
=>(a,(S,S)) =>(L,(L,S))
=>(a,((L),S)) =>(L,(L,(L)))
=>(a,((L,S),S)) =>(L,(L,(L,S)))
=>(a,((S,S),S)) =>(L,(L,(L,a)))
=>(a,((a,S),S)) =>(L,(L,(S,a)))
=>(a,((a,a),S)) =>(L,(L,(a,a)))
=>(a,((a,a),(L))) =>(L,(S,(a,a)))
=>(a,((a,a),(L,S))) =>(L,((L),(a,a)))
=>(a,((a,a),(S,S))) =>(L,((L,S),(a,a)))
=>(a,((a,a),(a,S))) =>(L,((L,a),(a,a)))
=>(a,((a,a),(a,a))) =>(L,((S,a),(a,a)))
=>(L,((a,a),(a,a)))
=>(S,((a,a),(a,a)))
3. Donner les dérivations droites de chacune de ces chaînes. =>(a,((a,a),(a,a)))
S=>(L)
=>(L,S)
=>(L,(L))
=>(L,(L,S))
=>(L,(L,a))
=>(L,(S,a))
=>(L,(a,a))
=>(S,(a,a))
=>(a,(a,a))
27 28
On peut aussi la représenter par : Exercice 2
Exercice 3
1. Construire une grammaire hors contexte pour l’expression régulière suivante (ab)*.
Ou bien encore :
2. Construire une grammaire hors contexte pour les mots contenant un nombre pair de
a.
Une grammaire hors contexte pour les mots contenant un nombre pair de a est donnée
par :
S aaS | 𝜀
Elle correspond à l’expression régulière définie par : (aa)*
S aSa | 𝜀
S Saa | 𝜀
Exercice 4
SaSbS|bSaS| ε
29 30
1. Donner deux dérivations droites pour la chaîne abab.
S =>aSbS
=>aSb On a utilisé la production S ε
=>abSaSb On a utilisé la production S bSaS
=>abSab On a utilisé la production S ε
=>abab On a utilisé la production S ε
S =>aSbS
=>aSbaSbS On a utilisé la production S aSbS
=>abSaSb On a utilisé la production S ε
=>abSab On a utilisé la production S ε
=>abab On a utilisé la production S ε 3. Donner deux dérivations gauches pour la chaîne abab.
S =>aSbS
=>abS On a utilisé la production S ε
=>abaSbS On a utilisé la production S aSbS
=>ababS On a utilisé la production S ε
=>abab On a utilisé la production S ε
31 32
Série 8
Exercice 1
Exercice 2
S aSe
SB
B bBe
L'arbre syntaxique de la deuxième dérivation gauche est donné par : BC
CcCe
Cd
1. Chercher premier de S, B et C.
2. Chercher suivant de S, B et C.
3. Donner la table d’analyse de cette grammaire.
4. Montrer que la phrase ade est reconnue par cette grammaire.
Exercice 3
S ABc
A a
A ε
B b
Bε
1. Chercher premier de S, B et C.
2. Chercher suivant de S, B et C.
3. Donner la table d’analyse.
4. Expliciter le processus de reconnaissance de la phrase abc.
Exercice 4
SA|B
AaAb|0
BaBbb|1
33
34
2. Donner la table d’analyse. Correction de la série 8
3. Cette grammaire est-elle LL(1) ?
4. Donner le processus de reconnaissance de la chaine aa0bb.
Exercice 1
Exercice 5
1. Proposer une grammaire GHC pour les nombres entiers.
1. Eliminer la récursivité gauche dans la grammaire suivante :
Une GHC pour les nombres entiers (système décimal) peut être donnée par
SSc
Sab Entier Chiffre Entier | Chiffre
Chiffre [0-9]
2. Eliminer la récursivité gauche dans la grammaire suivante :
Une GHC pour les nombres entiers (système binaire) peut être donnée par
SSc
Entier Chiffre Entier | Chiffre
Sab|d
Chiffre 0|1
3. Eliminer la récursivité gauche dans la grammaire suivante :
2. Proposer une grammaire GHC pour les identificateurs.
SAd|b|c
AAa|b| ε
Une GHC pour les identificateurs est donnée par :
ID Lettre AN
AN (Lettre | Chiffre | _) AN | 𝜀
Lettre [a-zA-Z]
Chiffre [0-9]
Exercice 2
1. Chercher premier de S, B et C.
Les premiers des non terminaux sont écrits dans le tableau suivant :
35 36
4. Montrer que la phrase ade est reconnue par cette grammaire.
2. Chercher suivant de S, B et C.
S=> aSe
Les suivants des non terminaux sont données à la table suivante : => aBe
=> aCe
Non terminal Suivant => ade
S ↋e
B ↋e $pile Entrée& Productions
C ↋e $S ade$ S aSe
$eSa ade$
3. Donner la table d’analyse de cette grammaire. $eS de$ SB
$eB de$ BC
On donne d'abord la table de prédiction de productions $eC de$ Cd
$ed de$
Production Prédiction $e e$
SaSe Premier(aSe)=a $ $
SB Premier(B)=b c d
Exercice 3
B bBe Premier(bBe)=b
BC Premier(C)=c d Soit la grammaire G définie par :
NT Suivant
S ε
A bc
B c
37 38
1. Chercher premier et suivant des symboles S, A et B.
3. Donner la table d’analyse.
On donne les premiers et suivants des non terminaux dans la table suivante :
39 40
Le processus de reconnaissance par la table des prédictions de la phrase aa0bb est
donnée à la table suivante :
S Ad | d | c
$pile Entrée& Productions A (b|ε)A'
$S aa0bb$ S A A' aA' | ε
$A aa0bb$ AaAb
$bAa aa0bb$
$bA a0bb$ AaAb Cette grammaire devient après une distribution au niveau du non terminal A :
$bbAa a0bb$
$bbA 0bb$ A0 S Ad | d | c
$bb0 0bb$ A bA'|A'
$bb bb$ A' aA' | ε
$b b$
$ $
Exercice 5
SSc
Sab
Pour éliminer cette récursivité, on ajoute le non terminal S' de la façon suivante :
S abS’
S' cS' | ε
SSc
Sab|d
Pour éliminer cette récursivité, on ajoute le non terminal S' de la façon suivante :
S (ab | d)S’
S' cS' | ε
SAd|b|c
AAa|b| ε
Pour éliminer cette récursivité, on ajoute le non terminal A' de la façon suivante :
41 42
Série 9
Exercice 1 Exercice 4
S (L)|a S+SS|*SS|a
1. Eliminer la récursivité à gauche de cette grammaire. 2. Chercher suivant des non terminaux de la grammaire.
2. Chercher premier des non terminaux dans la grammaire obtenue. 3. Construire la table d’analyse associée à cette grammaire.
3. Chercher suivant des non terminaux dans la grammaire obtenue. 4. Cette grammaire est-elle LL(1) ?
4. Construire la table d’analyse associée à cette grammaire. 5. Donner le processus de reconnaissance de la chaîne +*aaa
Soit la grammaire suivante : 1. Chercher premier des non terminaux de cette grammaire.
1. Chercher premier des non terminaux de la grammaire. 5. Donner le processus de reconnaître de la chaîne 000111.
Exercice 3
44
43
Correction de la série 9 La table d'analyse est donnée par :
Exercice 1 NT\T ( ) A ,
S S (L) Sa
On considère la grammaire suivante :
L LSL1 LSL1
S (L)|a L1 L1↋ L1,SL1
LL,S | S
5. Cette grammaire est-elle LL(1) ?
45 46
NT Premier 5. Donner le processus de reconnaissance de la phrase ibtaea.
S ia
E b Les dérivations gauches de la phrase ibtaea sont données par :
S' eε
S=>iEtSS'
=>ibtSS'
=>ibtaS'
2. Chercher suivant des non terminaux de la grammaire. =>ibtaeS
=>ibtaea
NT Suivant $pile Entrée$ Productions
S εe $S ibtaea$ SiEtSS'
E t $S'StEi ibtaea$
S' εe $S'StE btaea$ Eb
$S'Stb btaea$
$S'St taea$
$S'S aea$ Sa
3. Construire la table d’analyse associée à cette grammaire. $S'a aea$
$S' ea$ S'eS
$Se ea$
On donne d'abord la table de prédiction des productions.
$S a$ Sa
$a a$
Productions Prédictions $ $
SiEtSS' i
Sa a
Exercice 3
S' eS e
S' ε εe
On considère la grammaire suivante :
Eb b
SaSbS|bSaS| ε
La table de prédiction de la grammaire est : 1. Chercher premier des non terminaux de la grammaire.
NT\T i a e b t ↋ NT Premier
S SiEtSS' Sa S abε
E Eb
S' S' eS S' ε 2. Chercher suivant des non terminaux de la grammaire.
S' ε
Cette grammaire n'est pas LL(1) car l'entrée de [S',e] comprend deux valeurs ou
3. Construire la table d’analyse associée à cette grammaire.
productions : S'eS et S' ε
On construit la table de prédictions des productions.
47 48
Productions Prédictions Une autre façon pour dériver abab à partir de cette grammaire est la suivante :
SaSbS a
SbSaS b S=>aSbS
S ε abε =>abSaSbS
=>abaSbS
=>ababS
La table d'analyse de cette grammaire est donnée par : =>abab
49 50
Productions Prédictions Exercice 5
S+SS +
S*SS * On considère la grammaire suivante :
S a a S0 S 1| 0 1
1. Chercher premier des non terminaux de cette grammaire.
La table d'analyse de cette grammaire est donnée par :
NT Premier
NT\T + * a S 0
S S+SS S*SS S a
$pile Entrée$ Productions La table d'analyse de cette grammaire est donnée par :
$S +*aaa$ S+SS
$SS+ +*aaa$
NT\T 0 1
$SS *aaa$ S*aa
S S0 S 1
$Saa* *aaa$
S0 1
$Saa aaa$ S ε
$Sa aa$
$S a$ S a 4. Cette grammaire est-elle LL(1) ?
$a a$
$ $
Cette grammaire n'est pas LL(1) car l'entrée [S,0] a deux productions :
S0 S 1 et
S 0 1
5. Donner le processus de reconnaître de la chaîne 000111.
51 52
S=>0S1
=>00S11 Série 10
=>000111
Exercice 1
Soit la grammaire suivante :
Le processus de reconnaissance de la chaine 000111 est :
S Ab
$pile Entrée$ Productions Aa
$S 000111$ S0S1 AB
$1S0 000111$ A ε
$1S 00111$ S0S1 Bb
$11S0 00111$ B ε
$11S 0111$ S 01
$1110 0111$ 1. Chercher premiers des non terminaux.
$111 111$
2. Chercher suivants des non terminaux.
$11 11$
$1 1$ 3. Donner la table de prédiction de productions.
$ $< 4. Donner la table d’analyse de cette grammaire.
5. Montrer que la chaine bb est reconnue par cette grammaire.
Exercice 2
Soit la grammaire suivante :
S ABBA
Aa
A ε
Bb
B ε
Exercice 3
On donne la grammaire hors contexte suivante :
Exp-Exp
Exp(Exp)
ExpVar ExpR
ExpR-Exp
ExpR ε
VarID VarR
53
54
VarR(Exp) Correction de la série 10
VarR ε
Exercice 1
1. Chercher premiers des non terminaux.
2. Chercher suivants des non terminaux. Soit la grammaire suivante :
3. Donner la table de prédiction de productions. S Ab
4. Donner la table d’analyse de cette grammaire. A a
A B
A ε
B b
B ε
Les premiers des non terminaux sont donnés dans la table suivante :
NT Premier
S ab
A ab↋
B b↋
Les suivants des non terminaux sont donnés dans la table suivante :
NT Suivant
S ↋
A b
B b
Productions Prédictions
SAb ab
Aa a
AB b
A ε b
Bb b
B ε b
55 56
4. Donner la table d’analyse de cette grammaire. Exercice 2
S ABBA
NT/T a b A a
S SAb SAb A ε
A Aa AB B b
A ε B ε
B Bb
B ε 1. Chercher premiers des non terminaux.
NT/T a b ↋($)
S S ABBA S ABBA S ABBA
A Aa A ε A ε
A ε
B B ε Bb B ε
B ε
Cette grammaire n'est pas LL(1) car il y a des entrées qui contiennent deux productions.
Par exemple l'entrée [A,a] contient les productions : Aa et Aε. La même chose pour
l'entrée [B,b] qui contient les productions Bb et B ε.
57 58
Exercice 3
6. Donner le processus de reconnaissance de la phrase ab.
On donne la grammaire hors contexte suivante :
Avec les dérivations gauches, on obtient la séquence suivante :
Exp-Exp
S=> ABBA Exp(Exp)
=> aBBA (production utilisée Aa) ExpVar ExpR
=> abBA (production utilisée Bb) ExpR-Exp
=> abA (production utilisée B↋) ExpR ε
=> ab (production utilisée A↋) VarID VarR
VarR(Exp)
Avec la table de prédictions, on a la table suivante : VarR ε
59 60
4. Donner la table d’analyse de cette grammaire.
NT\T - ( ) ID ↋
Exp Exp-Exp Exp(Exp) ExpVar ExpR ExpR ε
ExpR ExpR-Exp ExpR ε
Var VarID VarR
VarR VarR ε VarR(Exp) VarR ε VarR ε
Exp => (Exp) (en utilisant la production Exp(Exp)) Une autre façon de représenter cet arbre est donné par :
=> (Var ExpR) (en utilisant la production ExpVar ExpR)
=> (ID VarR ExpR) (en utilisant la production VarID VarR)
=> (ID ExpR) (en utilisant la production VarR ε)
=> (ID) (en utilisant la production ExpR ε)
61 62
Correction de la série 10
Série 10
On considère la grammaire suivante :
On considère la grammaire suivante :
(1) E → E * B
(1) E → E * B (2) E → E + B
(2) E → E + B (3) E → B
(3) E → B (4) B → 0
(4) B → 0 (5) B → 1
(5) B → 1
Soit les tables d’action et de successeur associées à cette grammaire :
Soit les tables d’action et de successeur associées à cette grammaire :
Etat Action Successeur
Etat Action Successeur
* + 0 1 $ E B
* + 0 1 $ E B
0 s1 s2 3 4
0 s1 s2 3 4
1 r4 r4 r4 r4 r4
1 r4 r4 r4 r4 r4
2 r5 r5 r5 r5 r5
2 r5 r5 r5 r5 r5
3 s5 s6 acc
3 s5 s6 acc
4 r3 r3 r3 r3 r3
4 r3 r3 r3 r3 r3
5 s1 s2 7
5 s1 s2 7
6 s1 s2 8
6 s1 s2 8
7 r1 r1 r1 r1 r1
7 r1 r1 r1 r1 r1
8 r2 r2 r2 r2 r2
8 r2 r2 r2 r2 r2
1. Montrer comment l’algorithme d’analyse LR arrive à reconnaître la phrase 1 + 1
1. Montrer comment l’algorithme d’analyse LR arrive à reconnaître la phrase 1 + 1
dans cette grammaire.
dans cette grammaire.
On va expliciter le processus de reconnaissance LR(0) comme indiqué dans la table
2. Faites de même pour la phrase 1+1*1.
suivante. On rappelle que dans cette table, les initiales qui nomment les colonnes
3. Donner les schémas de dérivation droite de chacune de ces phrases.
désignent :
T : tête de la pile P ;
P : pile qui contient les états de l'automate utilisé par le programme moteur ;
A : l'action à exécuter, s pour shift et r pour réduction.
S : pour shift-reduce les productions à utiliser pour dériver la phrase.
64
63
T Entrée$ S P A Le schéma de dérivation de 1+1 s'obtient à partir de l'inverse de la dernière séquence de
la colonne. C’est-à-dire la séquence : 2,5,3,5. On rappelle que ces numéros sont les
0 1+1$ 0 s2 numéros des productions de la grammaire. Donc, si on fait les dérivations droites en
2 +1$ 0,2 r5 respectant cet ordre, on obtient :
4 +1$ 5 0,4 r3 E=>E+B (en utilisant la production 2)
3 +1$ 5,3 0,3 s6 =>E+1 (en utilisant la production 5)
=>B+1 (en utilisant la production 3)
6 1$ 5,3 0,3,6 s2 =>1+1 (en utilisant la production 5)
2 $ 5,3 0,3,6,2 r5 Pour le schéma de dérivation de 1+1*1, on a la séquence 1,5,2,5,3,5 qui est l'inverse de
8 $ 5,3,5 0,3,6,8 r2 la dernière séquence de la colonne S. En faisant les dérivations droites en respectant cet
ordre, on obtient :
3 $ 5,3,5,2 0,3 acc
E=>E*B (en utilisant la production 1)
=>E*1 (en utilisant la production 5)
2. Faites de même pour la phrase 1+1*1. =>E+B*1 (en utilisant la production 2)
=>E+1*1 (en utilisant la production 5)
Le processus qui permet de reconnaitre la phrase 1+1*1 est visualisé dans la table =>B+1*1 (en utilisant la production 3)
suivante : =>1+1*1 (en utilisant la production 5)
h
T Entrée$ S P A
0 1+1*1$ 0 s2
2 +1*1$ 0,2 r5
4 +1*1$ 5 0,4 r3
3 +1*1$ 5,3 0,3 s6
6 1*1$ 5,3 0,3,6 s2
2 *1$ 5,3 0,3,6,2 r5
8 *1$ 5,3,5 0,3,6,8 r2
3 *1$ 5,3,5,2 0,3 s5
5 1$ 0,3,5 s2
2 $ 0,3,5,2 r5
7 $ 5,3,5,2,5 0,3,5,7 r1
3 $ 5,3,5,2,5,1 0,3 acc
65 66
Correction de la série 11
Série 11
Soit la grammaire hors contexte suivante : Soit la grammaire hors contexte suivante :
(1) S → C C (1) S → C C
(2) C → c C (2) C → c C
(3) C → d (3) C → d
Soit les tables d’analyse LR associée à cette grammaire : Soit les tables d’analyse LR associée à cette grammaire :
Etat c d $ S C Etat c d $ S C
0 d3 d4 1 2 0 d3 d4 1 2
1 acc 1 acc
2 d6 d7 5 2 d6 d7 5
3 d3 d4 8 3 d3 d4 8
4 r3 r3 4 r3 r3
5 r1 5 r1
6 d6 d7 9 6 d6 d7 9
7 r3 7 r3
8 r2 r2 8 r2 r2
9 r2 9 r2
1. Expliciter le processus de l’analyseur LR sur la chaîne cdd. 1. Expliciter le processus de l’analyseur LR sur la chaîne cdd.
2. En déduire la dérivation droite inverse associée à cette reconnaissance. Le processus de reconnaissance de la chaine cdd est donné à la table suivante :
68
67
T Entrée$ S P A
0 cdd$ 0 d3 Série révision
3 dd$ 0,3 d4 Cours
4 d$ 0,3,4 r3
1. Définir le rôle de la phase d’analyse syntaxique.
8 d$ r3 0,3,8 r2 2. Donner le schéma d’un analyseur syntaxique ascendant et décrire le rôle de chaque
2 d$ r3, r2 0,2 d7 élément qui y figure.
3. Donner le schéma d’un analyseur syntaxique utilisant une table de prédiction et
7 $ 0,2,7 r3 expliquer le rôle de chacun de ses éléments.
5 $ r3, r2, r3 0,2,5 r1 4. A quoi sert une grammaire BNF ?
5. Montrer que la grammaire ci-dessous n’est pas LL(1) :
1 $ r3, r2, r3, r1 0,1 acc
SABBA
Aa
Aε
Bb
Bε
2. En déduire la dérivation droite inverse associée à cette reconnaissance.
Exercice 1
La dérivation droite inversée de la chaine cdd est donnée à la colonne S. en effet, si on On considère la grammaire suivante :
fait appel aux productions dans l'ordre r1, r3, r2, r3, on obtient :
(1) EFTd
S=>C C (en utilisant la production 1) (2) Ff
=>C d (en utilisant la production 3) (3) Fε
=>c C d (en utilisant la production 2) (4) Tt
=>c d d (en utilisant la production 3) (5) T ε
Ce qui prouve bien la dérivation demandée. 1. Préciser les terminaux et les non terminaux de cette grammaire.
2. Chercher les premiers des non terminaux.
3. Chercher les suivants des non terminaux.
4. Construire la table d’analyse de prédiction de cette grammaire.
5. Donner le processus de reconnaissance de la chaîne ftd.
Exercice 2
S Ad
A ab
Aa
Exercice 3
69
70
3. En déduire la GHC associée à l’expression régulière suivante : Correction de la série révision
ab*c| ba*.
Cours
Exercice 4
1. Définir le rôle de la phase d’analyse syntaxique.
Soit la grammaire :
Un analyseur syntaxique reçoit une chaine d’unités lexicales de l’analyseur lexical et
S AS | b vérifie si la structure de cette chaîne est conforme aux productions définies dans la
A SA | a grammaire. Dans l'affirmative, il crée l'arbre syntaxique associé à cette chaine sinon il
génère une erreur syntaxique.
1. Donner la dérivation droite de la chaîne ababab.
2. Construire l’arbre syntaxique issu de la dérivation droite de la chaîne ababab. 2. Donner le schéma d’un analyseur syntaxique ascendant et décrire le rôle de chaque
élément qui y figure.
Exercice 5
Le schéma d'un analyseur syntaxique ascendant est donné par :
Soit G la grammaire hors contexte définie par les règles :
(1) A → A * B
(2) A → A + B
(3) A → B
(4) B → a
(5) B → b
71 72
Successeur[état][NT] prend l’une des - VT : ensemble de symboles terminaux ;
valeurs suivantes : - VN : ensemble de symboles non terminaux ;
- état à empiler ; - Le symbole S0 є VN particulier, appelé symbole de départ ou axiome ;
- vide pour indiquer erreur. - L'ensemble P de productions, qui sont des règles de la forme
S → S1S2 … Sk avec S є VN et Si є VN U VT.
- La pile est constituée des états empilés et dépilés par le programme moteur ;
- Si la phrase est correcte, l'analyseur en crée un arbre syntaxique. Sinon, il retourne
une erreur ;
- Le programme moteur est le programme responsable de toutes les opérations 5. Montrer que la grammaire ci-dessous n’est pas LL(1).
effectuées par l'analyseur syntaxique : empilement, dépilement, décalage, réduction,
acceptation ou erreur.
SABBA
Aa
3. Le schéma d’analyseur syntaxique utilisant une table de prédiction et expliquer le Aε
rôle de chacun de ses éléments. Bb
Bε
Le schéma d'analyseur syntaxique utilisant une table d'analyse prédictive est donné par :
On a S=>A et S=>B, et A et B toutes les deux se dérivent en ε. Donc cette grammaire
n'est pas LL(1).
Exercice 1
(1) EFTd
(2) Ff
(3) Fε
(4) Tt
(5) T ε
Les éléments de ce schéma sont :
- Entrée$ : désigne la phrase à analyser terminée par $; 1. Préciser les terminaux et les non terminaux
- La table d'analyse est constituée des productions à utiliser lors de la reconnaissance Les non terminaux et les terminaux de la grammaire sont classés dans la table suivante :
de la phrase ou erreurs. Chaque production est déterminée par une double entrée définie
par [NT,T] ; Non Terminaux Terminaux
- La pile peut contenir des terminaux et des non terminaux ; E d
- Le programme contrôleur réalise les opérations de décalage, empilement, dépilement F f
et reconnaissance de la phrase ou erreur ; T t
- Entrée$ : même explication que dans l'analyse ascendante ;
- Arbre syntaxique ou erreur même explication que dans l'analyse syntaxique. 2. Les premiers de non-terminaux
Les premiers des non terminaux sont :
4. A quoi sert une grammaire BNF ?
BNF est l'abréviation de Backus-Naur form. Une grammaire hors contexte est dite aussi
grammaire BNF. Elle est formée d'un quadruplet G = (VT , VN, S0, P) dont les éléments
sont définis par :
73 74
Non Terminaux Premier Pile Chaine Production
E ftdƐ $E ftd$ EFTd
F fƐ $dTF ftd$ Ff
T tƐ $dTf ftd$
$dT td$ Tt
$dt td$
3. Les suivants de non-terminaux : $d d$
$ $
Les suivants des non terminaux sont :
A a(b|Ɛ)
Productions Prédictions
EFTd ftd On ajoute maintenant un nouveau non terminal nommé A' pour renommer l'expression
Ff f (b|Ɛ) :
A'(b|Ɛ)
Fε td
La grammaire factorisée a l'expression :
Tt t
T ε d
S Ad
A aA'
On cherche maintenant la table d'analyse prédictive : A' b| Ɛ
d f t Exercice 3
E EFTd EFTd EFTd
F Fε Ff Fε On considère l’expression régulière suivante :
T T ε Tt
ab*c
5. Processus de reconnaissance de chaine ftd
1. Donner la GHC qui lui est équivalente.
Le processus de reconnaissance de la phrase ftd est explicité dans la table suivante :
Pour transformer ab*c en GHC, on commence par écrire des productions qui
remplacent la fermeture b*. Cela s'obtient, en écrivant des productions comportant une
récursivité, par ajout du non terminal B défini par :
BbB | Ɛ
75 76
La grammaire cherchée est la grammaire avec l'axiome S1 défini par : La dérivation droite de la chaine ababab est donnée par :
S1aBc S=> AS
B bB | Ɛ => Ab
=> SAb
Il est possible de remplacer la récursivité BbB par => Sab
=> ASab
BBb => Abab
=> SAbab
ou bien encore par => Sabab
=> ASabab
BbB => Ababab
=> ababab
S2bA
A aA | Ɛ
Pour avoir la grammaire de cette question, on rassemble les deux grammaires trouvées
aux questions précédentes en utilisant le nouvel axiome S défini par :
SS1|S2
S1aBc
B bB | Ɛ
S2bA
A aA | Ɛ
Exercice 4
Soit la grammaire :
Exercice 5
S AS | b
A SA | a (1) A → A * B
(2) A → A + B
1. Donner la dérivation droite de la chaîne ababab. (3) A → B
(4) B → a
(5) B → b
77 78
Expliciter le processus de l’analyseur LR sur la chaîne a* b + b.
Le processus de l’analyseur LR pour la chaine a*b+b est détaillé dans la table suivante :
T Chaine S P A
0 a*b+b$ 0 d1
1 *b+b$ 0,1 r4
4 *b+b$ 4 0,4 r3
3 *b+b$ 4,3 0,3 d5
5 b+b$ 0,3,5 d2
2 +b$ 0,3,5,2 r5
7 +b$ 4,3,5 0,3,5,7 r1
3 +b$ 4,3,5,1 0,3 d6
6 b$ 0,3,6 d2
2 $ 0,3,6,2 r5
8 $ 4,3,5,1,5 0,3,6,8 r2
3 $ 4,3,5,1,5,2 0,3 acc
79