Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

TD Corrigés Comp

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 50

Université Ibn Zohr

Faculté des Sciences Agadir

Département Informatique

Filières LF-Sciences Mathématiques et Informatique/


LP-Ingénierie Informatique

Semestre 5

Module Compilation

Travaux dirigés avec corrections

Pr. Mustapha Machkour

Année universitaire 2018-2019

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 ;

- La série 2 représente une introduction à l'analyse lexicale ;

- La série 3 : étudie les expressions régulières ;

- La série 4 : étudie les automates ;

- La série 5 et 6 font le point sur les liens entre automates at langages ;

- Les séries 7 et 8 traitent des grammaires hors contexte et le processus de


création des tables d'analyse pour l'analyse descendante S;

- Les séries 9 est un complément d'exercices sur les concepts traités en


chapitres 7 et 8 ;

- Les séries 10 et 11 traitent de l'analyse ascendante ;

- Une série révision termine cette liste des travaux dirigés.

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.

2. Pourquoi a-t-on besoin de traducteurs ?

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

3. Définir ce qui est la compilation. Donner un exemple de compilateur. exemple.

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.

11. Définir ce qui est l’analyse 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.

13. Donner un exemple d’optimisation de code.


3. a+b+c*d
L’optimisation de code consiste supprimer des instructions inutiles en gardant le sens du
code. Exemple d'optimisation de code :
- Code non optimisé : La notation infixe de a+b+c*d est +(+(a,b),*(c,d)) et sa représentation en arbre est
c=a+2;
b=c; //affectation inutile

- Code optimisé :
b=a+2;

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

Pour simplifier l'écriture des arbres abstraits, on utilise les notations préfixes des
expressions.

1. Y+1

La notation infixe de Y+1 est +(Y,1) et sa représentation en arbre est

2. X=y+1

La notation infixe de X=y+1 est =(X,+(Y,1)) et sa représentation en arbre est

5 6
4. a*b+c+d L'arbre de dérivation associé à ces dérivations est donné par

La notation infixe de a*b+c+d est +(+(*(a,b),c),d) et sa représentation en arbre est

Exercice 3 On obtient la même chose pour les dérivations à droite. En effet,


On considère la grammaire suivante : L=> L+C
- ListeListe+Chiffre => L+1
=> L-C+1
- ListeListe-Chiffre => L-2+1
- ListeChiffre => C-2+1
=> 3-2+1
- Chiffre0|1|2|…|9 L'arbre d'analyse associé à ces dérivations est donné par :
1. Donner l’arbre abstrait de 3-2+1

La notation infixe de 3-2+1 est +(-(3,2),1) et son abstrait est donné par

2. Donner l’arbre d’analyse de 3-2+1.


Exercice 4
L'arbre d'analyse de 3-2+1 s'obtient par les dérivations de Liste jusqu'aux feuilles formant
Soit la grammaire suivante :
les terminaux de la chaîne en question. Pour simplifier les dérivations et la construction
de l'arbre d'analyse, nous remplaçons Liste par L et Chiffe par C. Les dérivations à - Droite → Lettre = Droite
gauche sont alors
- Droite →Lettre
L=> L+C - Lettre → a|b|c…|z
=> L-C+C
1. Donner l’arbre d’analyse de l’expression a=b=c.
=> C-C+C
=> 3-C+C
=> 3-2+C
Les dérivations droites de la chaîne a=b=c dans cette grammaire sont données par :
=> 3-2+1

7 8
Série 2
Droite =>Lettre=Droite
=>Lettre=Lettre=Droite Exercice 1

=>Lettre=Lettre=Lettre On considère les unités lexicales suivantes :


=>Lettre=Lettre=c ID, NUM, REAL, IF, COMMA, LPAR, RPAR, EQ, NOTEQ, INF, RETURN, SEMI,
=>Lettre=b=c LBRACE, RBRACE, VOID, MAIN, PLUS, RELOP, ELSE et EOF.
=>a=b=c 1. Chercher les lexèmes et les unités lexicales associées dans le programme suivant :
L'arbre d'analyse qui résulte ce ces dérivations est donné par void main()
{
int z=1;
}

2. Donner le flot équivalent à ce programme en termes d’unités lexicales.

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.

3. Faire de même pour z2=a+b*c+d Exercice 3

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;
}

2. Donner le flot équivalent à ce programme en termes d’unités lexicales.

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.

Le flot équivalent à ce programme en termes d'unités lexicales est donné par

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

2. Donner le flot équivalent à ce programme en termes d’unités lexicales.

Le flot généré par l'analyseur lexical du programme est :

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]+

ou bien en utilisant les définitions régulières :

Chiffre → [0-9]
Entier → Chiffre+

5. Expression régulière pour les nombres binaires divisible par 2.

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)*

0*10*1(0|1)* Les lexèmes contenant un nombre impair de a.

7. Expression régulière qui reconnait les chaines a, b ou c.

a|b|c

8. Expression régulière qui reconnait les chaines commençant par a suivi de


combinaison quelconque de a, b et c.

a(a|b|c)*

Exercice 2

Définissons les langages déterminés par les expressions régulières suivant :

1. (0|1)*0

Les mots composés de 0 et/ou 1 avec 0 à la fin.

2. (a|b)*aa(a|b)*

Les mots composés de a ou b et contenant aa.

3. (0|1)+0

Les nombres binaires divisibles par 2.

4. (aa)*

Les mots contenant un nombre pair de a et y compris la chaine vide.

5. (aa)+

Les lexèmes contenant un nombre pair de a.

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

Soit l'automate suivant :

5 6
Correction de la série 4 Exercice 2

Soit l’automate suivant :


Exercice 1 d
Soit l’automate suivant :
a b c
0 1 2 3
a c
0 1 2
c

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. Proposer une expression régulière pour les constantes entières.

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'ensemble des états de cet automate est : C → [0-9]


Entier → C+
E = {0, 1, 2, 3}.

L'état initial de cet automate est : Si on prend en considération des signes, on écrit l'expression suivante :

I= {0}; Entier → ('+'|'-')C+|C+


L'état final de cet automate est :
Après factorisation, on obtient l'expression régulière suivante :
F= {3}.
Entier → ('+'|'-'|ε)C+
2. Préciser l’alphabet de cet automate.
2. Donner l’automate fini non déterministe associé à l’expression trouvée.
L'alphabet de cet automate est :
L'automate fini non déterministe associé à Entier → C+ est donné par
∑={a, b}.

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,

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.

Entier → ('+'|'-'|ε)[0-9]+ T(y1, C)= ε-f(2)={1,2}=y1.

est donné par : Donc l'ensemble cherché Y des états est donné par :

Y={y0={0,1}, y1={1,2}} et l'automate associé à Y est donné par :

Après simplification, on obtient l'automate suivant :

On cherche maintenant l'automate déterministe Y associé à l'automate qui prend en


considération les signes, i.e.

3. Chercher l’automate fini déterministe équivalent à celui trouvé à la question


précédente.

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.

Soit Y l'automate déterministe associé à l'automate non déterministe en question : - y0=ε-f(0)={0,1}.

Cherchons les transitions possibles à partir de y0.

- T(y0, C)= ε-f(2)={1,2} que l'on nomme y1, i.e. y1={1,2}.


- T(y0, +)= ε-f(1)={1}=y2 ;
- T(y0, -)= ε-f(1)={1}=y2 ;

Soit y0 l'état initial de Y. Cherchons les autres états à partir de y1 et y2.

y0=ε-f(0)={0,1}. - T(y1, C)= ε-f(2)={1,2}=y1 ;


- T(y2, C)= ε-f(2)=y1 ;
Cherchons les transitions possibles à partir de y0.
Donc l'ensemble cherché Y des états est donné par :

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

Réal  (+|-|𝜀)C+.C+ | (+|-|𝜀)C+


C[0-9]
L'automate déterministe associé à cet automate non déterministe peut être déduit de
l'automate déterministe obtenu pour les entiers tout en y ajoutant la partie réelle. Ce qui
L'automate associée à cette expression est donnée par la concaténation de l'automate donne l'automate suivant :
suivant :

et l'automate :

13 14
Série 5 Exercice 5

Soit la table de transitions suivante :


Exercice 1
a b ε
Soit la table de transitions
0 0,1 0 1,2
1 1,3 2 3
a b c
2 0
0 0,1 3
3 4 0,1
1 2,4
4 1 4
2 3 0,4
3 3
avec état initial est 0 et état terminal est 3.
4 1
1. L’automate qu’elle décrit est-il déterministe ?
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 2. Construire un automate Déterministe qui lui est équivalent.
transitions :
abc, baabc, aabcbcab et abcabcca. Exercice 6

Exercice 2 Soit l’automate suivant :

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é.

2. Les mots formés de a et b contenant au moins trois a.


3. Les mots formés de a et b où chaque a est suivi immédiatement de b.

Exercice 4

Construire un automate qui peut reconnaître chacun des langages suivants :

1. Les mots composés de a et b avec un nombre pair de a et un nombre impair de b.


2. Les mots formés de a et de b et ne contenant pas le facteur abb.
3. Les mots formés de a,b et c avec deux a et un nombre impair de c.

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

Soit la table de transitions

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é.

Pour le mot abc

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 :

Pour le mot aabcbcab 𝐿 = { Les mots composés de a et b avec un nombre impair de b}


Son AFD équivalent :

Donc selon la méthode de construction d’intersection on trouve :


q 𝛿(𝑞, 𝑎) 𝛿(𝑞, 𝑏)
Le dernier état ne contient pas d'état final. Donc le mot aabcbcab n'est pas reconnu par ->(1,4) (2,4) (1,5)
le langage défini par la table de transitions.
(1,5) (2,5) (1,4)
(2,4) (3,4) (2,5)
Pour le mot abcabcca

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}

b) L={Les mots composés de a et b et ne contenant pas le facteur abb .}


Donc :
Le complément de L est :
𝐿 ={Les mots composés de a et b et contenant le facteur abb .}
L’AFD équivalent est : Exercice 6

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}

état a b {1,3} {3} {2,3}

0 0,1,2 0,1,2 {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 :

2. Donner et expliquer le schéma d’un analyseur lexical.


b
a c
0 1 2

2. Ecrire l’AFD associé à l’expression régulière suivante : a* | (bc)*.


3. Ecrire l’AFD associé à l’expression régulière suivante :
(a | bc)*.

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| 𝜀

2. Ecrire l’AFD associé à l’expression régulière suivante : a* | (bc)*.


3. Ecrire l’AFD associé à l’expression régulière suivante :
(a | bc)*.
5. L’automate qui reconnaît les nombres binaires multiples de 4 :
4. Donner l’automate qui reconnaît les phrases contenant a, b se terminant par ab.
L= { les nombres binaires qui se terminent par 000 }
5. Donner l’automate qui reconnaît les nombres binaires multiples de 4.
D’où :
6. Donner l’expression régulière qui définit les chaînes reconnaissables par l’automate les nombres 0 et 00 (autant
suivant :
que mots) sont multiple de
4.

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

On considère la grammaire suivante : On considère la grammaire suivante :


S (L)|a
LL,S | S S (L)|a
1. Préciser les terminaux, les non terminaux et l’axiome. LL,S | S
2. Donner les dérivations gauches de chacune des chaînes suivantes :
1. Préciser les terminaux, les non terminaux et l’axiome.
a) (a,a)
b) (a,(a,a)) Les terminaux de la grammaire sont :
c) (a,((a,a),(a,a))) T = {( ) a ,}

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 2 L’axiome de la grammaire est :


S={S}
Soit la grammaire suivante :
SiEtSS’ | a
S’ eS| ε 2. Donner les dérivations gauches de chacune des chaînes suivantes :
Eb
Chercher les terminaux, les non terminaux et l’axiome de cette grammaire. a) La dérivation gauche de la chaine (a,a)

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)

Exercice 4 b) La dérivation gauche de la chaine (a,(a,a))

On considère la grammaire suivante : S=>(L)


=>(L,S)
SaSbS|bSaS| ε =>(S,S)
=>(a,S)
1. Donner deux dérivations droites pour la chaîne abab. =>(a,(L))
2. Donner les arbres syntaxiques associés aux dérivations trouvées à la question =>(a,(L,S))
précédente. =>(a,(S,S))
3. Donner deux dérivations gauches pour la chaîne abab. =>(a,(a,S))
4. Donner les arbres syntaxiques associés aux dérivations trouvées à la question =>(a,(a,a))
précédente.

c) La dérivation gauche de la chaine (a,((a,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)))

a) La dérivation droite de la chaine (a,a)


4. Donner l’arbre d’analyse de la deuxième chaîne en utilisant une dérivation droite.
S=>(L)
=>(L,S)
=>(L,a)
=>(S,a)
=>(a,a)

b) La dérivation droite de la chaine (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

Soit la grammaire suivante :


SiEtSS’ | a
S’ eS| ε
Eb

Chercher les terminaux, les non terminaux et l’axiome de cette grammaire.

Les terminaux sont T = {i, t, a, e, b}


Les non terminaux sont NT = { S, S’, E} et
L’axiome S={S} .

Exercice 3

1. Construire une grammaire hors contexte pour l’expression régulière suivante (ab)*.

Une grammaire hors contexte pour (ab)* est :


S  abS | ε
Une autre réponse est donnée par :
S  Sab | ε

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)*

Une autre solution est donnée par :

S aSa | 𝜀

On peut aussi utiliser la grammaire :

S Saa | 𝜀

Exercice 4

On considère la grammaire suivante :

SaSbS|bSaS| ε

29 30
1. Donner deux dérivations droites pour la chaîne abab.

La première dérivation droite pour la chaine abab est donnée par :

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 ε

La deuxième dérivation droite pour la chaine abab est donnée par :

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.

La première dérivation gauche pour la chaine abab est donnée par :


2. Donner les arbres syntaxiques associés aux dérivations trouvées à la question
précédente. S =>aSbS
=>abSaSbS On a utilisé la production S bSaS
=>abaSbS On a utilisé la production S ε
L'arbre syntaxique de la première dérivation droite est donné par : =>ababS On a utilisé la production S ε
=>abab On a utilisé la production S ε

La deuxième dérivation gauche pour la chaine abab est donnée par :

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 ε

4. Donner les arbres syntaxiques associés aux dérivations trouvées à la question


précédente.

L'arbre syntaxique de la première dérivation gauche est donné par :


L'arbre syntaxique de la deuxième dérivation droite est donné par :

31 32
Série 8

Exercice 1

1. Proposer une grammaire GHC pour les nombres entiers.


2. Proposer une grammaire GHC pour les identificateurs.

Exercice 2

Soit la grammaire G définie par :

S aSe
SB
B bBe
L'arbre syntaxique de la deuxième dérivation gauche est donné par : BC
CcCe
Cd

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

Soit la grammaire G définie par :

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

On considère la grammaire suivante :

SA|B
AaAb|0
BaBbb|1

1. Chercher premier et suivant des symboles S, A et B.

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
SSc
Sab 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
SSc
Entier  Chiffre Entier | Chiffre
Sab|d
Chiffre  0|1
3. Eliminer la récursivité gauche dans la grammaire suivante :
2. Proposer une grammaire GHC pour les identificateurs.
SAd|b|c
AAa|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

Soit la grammaire G définie par :


S aSe
SB
B bBe
BC
CcCe
Cd

1. Chercher premier de S, B et C.

Les premiers des non terminaux sont écrits dans le tableau suivant :

Non terminal Premier


S abcd
B bcd
C cd

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$ SB
$eB de$ BC
On donne d'abord la table de prédiction de productions $eC de$ Cd
$ed de$
Production Prédiction $e e$
SaSe Premier(aSe)=a $ $

SB Premier(B)=b c d
Exercice 3
B bBe Premier(bBe)=b
BC Premier(C)=c d Soit la grammaire G définie par :

CcCe Premier(cCe)=c S ABc


A a
Cd Premier(d)=d A ε
B b
Bε

On calcule maintenant la table d’analyse de la grammaire 1. Chercher premier de S, B et C.

On donne les premiers des non terminaux dans la table suivante :


NT/T a b c d
S SaSe SB SB SB NT Premier
S abc
B B bBe BC BC A aε
B bε
C CcCe Cd
2. Chercher suivant de S, B et C.
On voit bien que cette table représente une grammaire LL(1) parce que chacune des
cases de la table contient une seule production. On donne les suivants des non terminaux dans la table suivante :

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 :

On donne d'abord la table des prédictions des productions NT Premier Suivant


S a01 ↋
Productions Prédiction A a0 b↋
SABc abc B a1 b↋
Aa a
A ε Suivant(A)=b c
Bb b 2. Donner la table d’analyse de cette grammaire.
B ε Suivant(B)=c
On cherche d'abord la table de prédictions de productions. Cette table est affichée ci-
après :
La table d'analyse de cette grammaire est donnée par :
Productions Prédictions
NT/T a b c SA a0
S SABc SABc SABc SB a1
A Aa A ε A ε AaAb a
B err B b B ε A0 0
BaBbb a
Expliciter le processus de reconnaissance de la phrase abc. B1 1

S=>ABc La table d'analyse demandée s'obtient en utilisant la table ci-dessus :


=> aBc
=> abc NT/T a b 0 1
S SA SA SB
SB
$pile Entrée& Productions A AaAb A0
$S abc$ S ABc B BaBbb B1
$cBA abc$ Aa
$cBa abc$
$cB bc$ Bb 3. Cette grammaire est-elle LL(1) ?
$cb bc$
$cb bc$ Cette grammaire n'est pas LL(1) car la cellule identifiée par [S,a] contient deux
$c c$ productions : SA et SB.
$ $
4. Donner le processus de reconnaissance de la chaine aa0bb.
Exercice 4
Les dérivations gauches pour la phrase aa0bb sont données par :
On considère la grammaire suivante :
S=>A
SA|B =>aAb
AaAb|0 =>aaAbb
BaBbb|1 =>aa0bb

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$ AaAb
$bAa aa0bb$
$bA a0bb$ AaAb Cette grammaire devient après une distribution au niveau du non terminal A :
$bbAa a0bb$
$bbA 0bb$ A0 S  Ad | d | c
$bb0 0bb$ A  bA'|A'
$bb bb$ A'  aA' | ε
$b b$
$ $

Exercice 5

1. Eliminer la récursivité gauche dans la grammaire suivante :

SSc
Sab

Pour éliminer cette récursivité, on ajoute le non terminal S' de la façon suivante :

S  abS’
S'  cS' | ε

2. Eliminer la récursivité gauche dans la grammaire suivante :

SSc
Sab|d

Pour éliminer cette récursivité, on ajoute le non terminal S' de la façon suivante :

S  (ab | d)S’
S'  cS' | ε

3. Eliminer la récursivité gauche dans la grammaire suivante :

SAd|b|c
AAa|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

On considère la grammaire suivante : On considère la grammaire suivante :

S (L)|a S+SS|*SS|a

LL,S | S 1. Chercher premier des non terminaux de la grammaire.

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

5. Cette grammaire est-elle LL(1) ?


Exercice 5
6. Donner le processus de reconnaissance de la chaîne : (a,a)
On considère la grammaire suivante :
Exercice 2 S0 S 1| 0 1

Soit la grammaire suivante : 1. Chercher premier des non terminaux de cette grammaire.

SiEtSS’ | a 2. Chercher suivant des non terminaux de cette grammaire.

S’ eS| ε 3. Construire la table d’analyse associée à cette grammaire.

Eb 4. Cette grammaire est-elle LL(1) ?

1. Chercher premier des non terminaux de la grammaire. 5. Donner le processus de reconnaître de la chaîne 000111.

2. Chercher suivant des non terminaux de la grammaire.


3. Construire la table d’analyse associée à cette grammaire.
4. Cette grammaire est-elle LL(1) ?
5. Donner le processus de reconnaissance de la phrase ibtaea.

Exercice 3

On considère la grammaire suivante :


SaSbS|bSaS| ε
1. Chercher premier des non terminaux de la grammaire.
2. Chercher suivant des non terminaux de la grammaire.
3. Construire la table d’analyse associée à cette grammaire.
4. Cette grammaire est-elle LL(1) ?
5. Montrer que l'on peut dériver la phrase abab à partir de cette grammaire.

44
43
Correction de la série 9 La table d'analyse est donnée par :

Exercice 1 NT\T ( ) A ,
S S (L) Sa
On considère la grammaire suivante :
L LSL1 LSL1
S (L)|a L1 L1↋ L1,SL1
LL,S | S
5. Cette grammaire est-elle LL(1) ?

1. Eliminer la récursivité à gauche de cette grammaire.


La grammaire initiale n'est pas LL(1) car elle est récursive à gauche.
Sa transformée est LL(1) d'après la table d'analyse trouvée ci-dessus.
La grammaire non récursive associée à cette grammaire est donnée par :
S (L)|a
6. Donner le processus de reconnaissance de la chaîne : (a,a)
LS L1
L1,S L1| ε
$pile Entrée$ Productions
$S (a,a)$ S (L)
2. Chercher premier des non terminaux dans la grammaire obtenue. $)L( (a,a)$
$)L a,a)$ LSL1
$)L1S a,a)$ Sa
NT Premier $)L1a a,a)$
S (a $)L1 ,a)$ L1,SL1
L (a $)L1S, ,a)$
L1 ,↋ $)L1S a)$ Sa
$)L1a a)$
3. Chercher suivant des non terminaux dans la grammaire obtenue. $)L1 )$ L1↋
$) )$
$ $
NT Suivant
S ↋,)
L ) Exercice 2
L1 )
Soit la grammaire suivante :
4. Construire la table d’analyse associée à cette grammaire. SiEtSS’ | a
On calcule d'abord la table de prédictions des productions. Cette table est donnée par : S’ eS| ε
Productions prédictions Eb
S (L) (
Sa a 1. Chercher premier des non terminaux de cette grammaire.
LSL1 (a
L1,SL1 ,
L1↋ )

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$ SiEtSS'
E t $S'StEi ibtaea$
S' εe $S'StE btaea$ Eb
$S'Stb btaea$
$S'St taea$
$S'S aea$ Sa
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$ Sa
$a a$
Productions Prédictions $ $
SiEtSS' i
Sa a
Exercice 3
S' eS e
S' ε εe
On considère la grammaire suivante :
Eb b
SaSbS|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 SiEtSS' Sa S abε
E Eb
S' S' eS S' ε 2. Chercher suivant des non terminaux de la grammaire.
S' ε

4. Cette grammaire est-elle LL(1) ? NT Suivant


S abε

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 :
SaSbS a
SbSaS b S=>aSbS
S ε abε =>abSaSbS
=>abaSbS
=>ababS
La table d'analyse de cette grammaire est donnée par : =>abab

La vérification via la table de prédiction est donnée à la table suivante :


NT\T a b ↋
S SaSbS SbSaS S ε
S ε S ε $pile Entrée$ Productions
$S abab$ SaSbS
4. Cette grammaire est-elle LL(1) ? $SbSa abab$
$SbS bab$ S bSaS
$SbSaSb bab$
Cette grammaire n'est pas LL(1) car l'entrée [S,a] contient deux productions : SaSbS $SbSaS ab$ S ε
et S ε. Il en est de même pour l'entrée [S,b] qui contient les deux productions $SbSa ab$
SbSaS et S ε. $SbS b$ S ε
$Sb b$
5. Montrer que l'on peut dériver la phrase abab à partir de cette grammaire. $S $ S ε
$ $
Les dérivations gauches pour la phrase sont données par :
Exercice 4
S=>aSbS
=>abS On considère la grammaire suivante :
=>abaSbS S+SS|*SS|a
=>ababS
=>abab 1. Chercher premier des non terminaux de la grammaire.

La vérification via la table de prédiction est donnée à la table suivante :


NT Premier
S +*a
$pile Entrée$ Productions
$S abab$ SaSbS 2. Chercher suivant des non terminaux de la grammaire.
$SbSa abab$
$SbS bab$ S ε
$Sb bab$ NT Suivant
$S ab$ SaSbS S ε+*a
$SbSa ab$
$SbS b$ S ε
$Sb b$ 3. Construire la table d’analyse associée à cette grammaire.
$S $ S ε
$ $
On construit la table de prédictions des productions.

49 50
Productions Prédictions Exercice 5
S+SS +
S*SS * On considère la grammaire suivante :
S a a S0 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

2. Chercher suivant des non terminaux de cette grammaire.


4. Cette grammaire est-elle LL(1) ?
Oui, cette grammaire est LL(1).
NT Premier
S ε1
5. Donner le processus de reconnaissance de la chaîne +*aaa.
3. Construire la table d’analyse associée à cette grammaire.
Les dérivations gauches pour la phrase +*aaa sont :
S=>+SS On donne d'abord la table de prédictions des productions :
=>+*SSS
=>+*aSS
=>+*aaS Productions Prédictions
=>+*aaa S0 S 1 0
S0 1 0
Le processus de reconnaissance de la chaine +*aaa est :

$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 S0 S 1
$Saa* *aaa$
S0 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 :
S0 S 1 et
S 0 1
5. Donner le processus de reconnaître de la chaîne 000111.

Les dérivations gauches pour la phrase 000111 sont :

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 Aa
$S 000111$ S0S1 AB
$1S0 000111$ A ε
$1S 00111$ S0S1 Bb
$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
Aa
A ε
Bb
B ε

1. Chercher premiers des non terminaux.


2. Chercher suivants des non terminaux.
3. Donner la table de prédiction de productions.
4. Donner la table d’analyse de cette grammaire.
5. Cette grammaire est-elle LL(1)?
6. Donner le processus de reconnaissance de la phrase ab.

Exercice 3
On donne la grammaire hors contexte suivante :

Exp-Exp
Exp(Exp)
ExpVar ExpR
ExpR-Exp
ExpR ε
VarID 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 ε

1. Chercher premiers des non terminaux.

Les premiers des non terminaux sont donnés dans la table suivante :

NT Premier
S ab
A ab↋
B b↋

2. Chercher suivants des non terminaux.

Les suivants des non terminaux sont donnés dans la table suivante :

NT Suivant
S ↋
A b
B b

3. Donner la table de prédictions des productions.

La table de prédictions des productions est affichée comme suit :

Productions Prédictions
SAb ab
Aa a
AB b
A ε b
Bb 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 SAb SAb A ε
A Aa AB B b
A ε B ε
B Bb
B ε 1. Chercher premiers des non terminaux.

5. Montrer que la chaine bb est reconnue par cette grammaire. NT Premier


S ab↋
Avec les dérivations A a↋
B b↋
S=> Ab
=> Bb 2. Chercher suivants des non terminaux.
=> bb
NT Suivant
Avec le programme contrôleur et la table d'analyse. S ↋
A ab↋
$pile Entrée$ Productions B ab↋
$S bb$ SAb
$bA bb$ AB 3. Donner la table de prédiction de productions.
$bB bb$ Bb
$bb bb$ Production Prédiction
$b b$ S ABBA ab↋
$ $ Aa a
A ε ab↋
L'arbre d'analyse de cette phrase est donné par : Bb b
B ε ab↋

4. Donner la table d’analyse de cette grammaire.

NT/T a b ↋($)
S S ABBA S ABBA S ABBA
A Aa A ε A ε
A ε
B B ε Bb B ε
B ε

5. Cette grammaire est-elle LL(1) ?

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 : Aa et Aε. La même chose pour
l'entrée [B,b] qui contient les productions Bb 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 Aa) ExpVar ExpR
=> abBA (production utilisée Bb) ExpR-Exp
=> abA (production utilisée B↋) ExpR ε
=> ab (production utilisée A↋) VarID VarR
VarR(Exp)
Avec la table de prédictions, on a la table suivante : VarR ε

1. Chercher premiers des non terminaux.


$pile Entrée$ Productions
$S ab$ SABBA La table ci-après affiche les premiers des non terminaux.
$ABBA ab$ Aa
$ABBa ab$ NT Premier
$ABB b$ Bb Exp - ( ID
$ABb b$ ExpR -ε
$AB $ B↋ Var ID
$A $ A↋ VarR (ε
$ $
2. Chercher suivants des non terminaux.
La chaine ab peut être dérivée autrement en utilisant la séquence suivante :
La table ci-après affiche les suivants des non terminaux.
S=> ABBA
=> aBBA (production utilisée Aa) NT Suivant
=> aBA (production utilisée B↋) Exp ↋)
=> abA (production utilisée Bb) ExpR ↋)
=> ab (production utilisée A↋) Var -ε
VarR -ε
Le processus de reconnaissance associé à cette séquence est donné à la table suivante :
3. Donner la table de prédiction de productions.
$pile Entrée$ Productions
$S ab$ SABBA La table de prédictions des productions est donnée par :
$ABBA ab$ Aa
$ABBa ab$ Productions Prédictions
$ABB b$ B↋ Exp-Exp -
$AB b$ Bb Exp(Exp) (
$Ab b$ ExpVar ExpR ID
$A $ A↋ ExpR-Exp -
$ $ ExpR ε ↋)
VarID VarR ID
VarR(Exp) (
VarR ε -ε)

59 60
4. Donner la table d’analyse de cette grammaire.

La table d'analyse pour une analyse prédictive est donnée par :

NT\T - ( ) ID ↋
Exp Exp-Exp Exp(Exp) ExpVar ExpR ExpR ε
ExpR ExpR-Exp ExpR ε
Var VarID VarR
VarR VarR ε VarR(Exp) VarR ε VarR ε

5. Montrer que l'instruction (ID) est reconnue dans cette grammaire.

Avec les dérivations

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 ExpVar ExpR)
=> (ID VarR ExpR) (en utilisant la production VarID VarR)
=> (ID ExpR) (en utilisant la production VarR ε)
=> (ID) (en utilisant la production ExpR ε)

Avec le programme contrôleur et la table d'analyse, on obtient la table suivante :

$pile Entrée$ Productions


$Exp (ID)$ Exp(Exp)
$)Exp( (ID)$
$)Exp ID)$ ExpVar ExpR
$) ExpR Var ID)$ VarID VarR
$) ExpR VarR ID ID)$
$) ExpR VarR )$ VarR ε
$) ExpR )$ ExpR ε
$) )$
$ $

6. Donner l'arbre d'analyse de l'instruction (ID)

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

3. Donner les schémas de dérivation droite de chacune de ces phrases.

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
SABBA
Aa
Aε
Bb
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) EFTd
S=>C C (en utilisant la production 1) (2) Ff
=>C d (en utilisant la production 3) (3) Fε
=>c C d (en utilisant la production 2) (4) Tt
=>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

Donner la factorisation de la grammaire suivante :

S Ad
A  ab
Aa

Exercice 3

On considère l’expression régulière suivante :


ab*c
1. Donner la GHC qui lui est équivalente.
2. Faire de même pour l’expression régulière ba*.

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

Soit les tables d’analyse LR associée à cette grammaire :

état terminaux Non terminaux


* + a b $ A B
0 d1 d2 3 4
1 r4 r4 r4 r4 r4
2 r5 r5 r5 r5 r5
3 d5 d6 acc
Dans ce schéma, on trouve les éléments suivants :
4 r3 r3 r3 r3 r3
5 d1 d2 7 - Entrée$ : désigne la phrase à analyser terminée par $;
- La table d'analyse composée de deux tables Action et Successeur expliquées comme
6 d1 d2 8 suit :
7 r1 r1 r1 r1 r1 - La table Action est définie par :
8 r2 r2 r2 r2 r2 Action[état][T] prend l’une des valeurs
suivantes :
Expliciter le processus de l’analyseur LR sur la chaîne a* b + b. - di : décaler(entrée) et empiler l’état i ;
- ri : réduire en utilisant la production i ;
- vide pour indiquer erreur ;.
- accepter(la chaîne est correcte).

- La table Successeur est définie par :

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.
SABBA
Aa
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. Bb
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

On considère la grammaire suivante :

(1) EFTd
(2) Ff
(3) Fε
(4) Tt
(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$ EFTd
F fƐ $dTF ftd$ Ff
T tƐ $dTf ftd$
$dT td$ Tt
$dt td$
3. Les suivants de non-terminaux : $d d$
$ $
Les suivants des non terminaux sont :

Non Terminaux Suivant


Exercice 2
E Ɛ
F td Donner la factorisation de la grammaire suivante :
T d
S Ad
4. La table d’analyse A  ab
Pour trouver la table d'analyse, on calcule d'abord la table de prédictions de productions. Aa
Cette table est donnée par :
(1) EFTd La factorisation de cette grammaire s'obtient de la façon suivante.
(2) Ff On rapproche les productions A  ab et Aa en utilisant l'opérateur "|" :
(3) Fε A  ab|a
(4) Tt
(5) T ε et on met en facteur "a" pour avoir la forme ou l'écriture suivante :

A  a(b|Ɛ)
Productions Prédictions
EFTd ftd On ajoute maintenant un nouveau non terminal nommé A' pour renommer l'expression
Ff f (b|Ɛ) :
A'(b|Ɛ)
Fε td
La grammaire factorisée a l'expression :
Tt t
T ε d
S  Ad
A  aA'
On cherche maintenant la table d'analyse prédictive : A'  b| Ɛ
d f t Exercice 3
E EFTd EFTd EFTd
F Fε Ff Fε On considère l’expression régulière suivante :
T T ε Tt
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 :

BbB | Ɛ

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 :

S1aBc S=> AS
B bB | Ɛ => Ab
=> SAb
Il est possible de remplacer la récursivité BbB par => Sab
=> ASab
BBb => Abab
=> SAbab
ou bien encore par => Sabab
=> ASabab
BbB => Ababab
=> ababab

2. Faire de même pour l’expression régulière ba*.


2. Construire l’arbre syntaxique issu de la dérivation droite de la chaîne ababab.
On commence par transformer la fermeture a* par la récursivité définie par :
L'arbre syntaxique associé à la dérivation droite ci-dessus est donné par :
AaA | Ɛ

La grammaire cherchée ayant l'axiome S2 est définie par :

S2bA
A aA | Ɛ

3. En déduire la GHC associée à l’expression régulière suivante :


ab*c| ba*.

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 :

SS1|S2
S1aBc
B bB | Ɛ
S2bA
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

Vous aimerez peut-être aussi