Vous êtes sur la page 1sur 6

Université Amar Telidji Laghouat Année Universitaire : 2020/2021

Faculté des Sciences 3 ème Licence Informatique


Département d’Informatique Module : Compilation
26/11/2020

Série N ◦1
Analyse lexicale : expressions régulières, automates finis et algorithme de reconnaissance d’une
entité lexicale

Exercice N ◦ 1 :
Rappeler les différentes phases de l’analyse d’un programme et leur rôle.
Exercice N ◦ 2 :
Écrire des expressions régulières et des automates finis déterministes pour reconnaitre :
1. Les identificateurs du C ++ (commencent par une lettre ou un ” ” , puis une suite de chiffres,
lettres ou ” ”) ;
2. Les entiers (toute suite non vide de chiffres précédée éventuellement d’un seul caractère parmi
(”−” | ”+”)) ;
3. Les réels (toute entité correspondante à entier suivi éventuellement d’un point et d’une suite non
vide de chiffres.) ;
4. Reprendre les étapes précédentes en Flex.
Exercice N ◦ 3 :
On définit une chaine de caractères comme étant n’importe quelle suite de caractères est comprise entre
deux apostrophes, si on veut que l’apostrophe apparaisse dans la chaine, il faut la doubler.

– ’Licence3tinformatique’ {chaine de 21 caractères}


– ” {chaine vide}
– ”” {chaine contenant un seul caractère, l’apostrophe}

1. Donner un automate déterministe correspondant.


2. Écrire un algorithme lexical de reconnaissance d’une chaine de caractères, sachant que sa longueur
ne doit pas dépasser 64 caractères.

Exercice N ◦ 4 :
Soit une structure d’une fonction écrite dans un mini-langage L suivante :
Structure d’une fonction en L Exemple d’une fonction écrite en L
Fonction < nom f onction > (Les paramètres : type) : type ; Fonction M ax (a, b : reel) : reel ;
Debut Debut
< liste des instructions > si a >= b alors
M ax ←− a ;
sinon
< nom f onction > ←− expression ; M ax ←− b ;
Fin ; Fin ;
Nous supposons que ce mini-langage considère :
– Identificateur : un identificateur est une chaı̂ne de caractères commençant par une lettre et ne
contenant que des lettres, des chiffres ou ” ” dont la longueur est au plus de 32 caractères.
– Entier : toute suite non vide de chiffres précédée éventuellement d’un seul caractère parmi (”−” |
”+”).

TD N ◦ 1 Compilation Page 1/6 2020/2021


– Reel : toute entité correspondante à entier suivi d’un point et d’une suite non vide de chiffres.
– Opérateurs des expressions arithmétiques : ”+” ”−”
– Opérateur d’affectation : ”←−”
– Opérateurs des expressions relationnelles : ”<” ”<=” ”>” ”>=”
– Séparateurs : ” (” ” ) ” ”,” ” ;” ” :”
– Les mots réservés : fonction, entier, reel, debut, fin, si, sinon, alors.
– Chaine de caractères : est définit dans l’exercice (3).
– Commentaire d’une ligne : est définit comme étant n’importe quelle suite de caractères est précédée
par ”//”.

1. Donner un automate à état finis déterministe reconnaissant les différentes entités de ce mini-
langage.
2. Écrire un algorithme de reconnaissance d’une entité lexicale de ce mini-langage.
3. Reprendre les étapes précédentes en Flex.

Exercice N ◦ 5 :

On veut analyser lexicalement des expressions arithmétiques. Les opérandes sont des nombres bi-
naires à virgule. Les opérateurs permis sont +, − et × .
1. Donner un automate à état finis déterministe reconnaissant les différentes entités de l’analyseur
lexical qui correspond à la description donnée ci-dessus.
2. Ecrire un algorithme de reconnaissance d’une suite d’entités lexicales d’une expression arithmétique.

Remarque : Les espaces ne sont pas significatifs à l’intérieur d’une expression arithmétique, par
exemple :
1101.101 × 1001.10 et 1101.101 × 1001.10 sont équivalents.

Solutions
Exercice N ◦ 2 :
Écrire des expressions régulières et des automates finis déterministes pour reconnaitre :
1. Les identificateurs du C ++ (commencent par une lettre ou un ” ” , puis une suite de chiffres,
lettres ou ” ”) ;
Solution :
Soit : L={a..z,A..Z} ; Ch={0..9}
ER= (” ”|L)(L|” ”|Ch)∗

L|” ”|Ch
” ”|L

start s0 s1

F IGURE 1 – AEFD d’un identificateur du C ++

TD N ◦ 1 Compilation Page 2/6 2020/2021


2. Les entiers (toute suite non vide de chiffres précédée éventuellement d’un seul caractère parmi (-
| +)) ;
Solution :
ER= Ch+ |(” + ”|” − ”)Ch+

Ch
Ch Ch

start s0 s1 s2

” − ”|” + ”

F IGURE 2 – AEFD d’un nombre entier

3. Les réels (toute entité correspondante à entier suivi éventuellement d’un point et d’une suite non
vide de chiffres.
Solution :
ER= [Ch+ |(” + ”|” − ”)Ch+ ](”.”Ch+ |)

”.”
Ch Ch
Ch Ch

start s0 s1 s2 s3 s4
Ch

” − ”|” + ”

F IGURE 3 – AEFD d’un nombre réel

Solution d’exercice N ◦ 3 :

Char − {0 }
0 0

start s0 s1 s2
0 0

S3

F IGURE 4 – AEF indéterministe d’une chaine de caractères

TD N ◦ 1 Compilation Page 3/6 2020/2021


Char − {0 }
0 0

start s0 s1 s2
0

F IGURE 5 – AEFD d’une chaine de caractères

Algorithme 1 : Reconnaissance d’une chaine de caractères


er
1 Lire (chaine) ; tc ← 1 car de l’entité ; E c ← S0 ;
2 si (longueur(chaine)> 66) alors
3 Ecrire (”chaine trop longue”) ;
4 sinon
5 tant que (Ec 6= φ) et (¬ fin de chaine) faire
6 Ec ← T ransition(Ec , tc , T ) ; //T : Table de Transitions;
7 tc ← ts;
8 fin
9 si (Ec == φ) alors
10 Ecrire (”chaine erronée”) ;
11 sinon
12 si (Ec 6= S2 ) alors
13 Ecrire (”chaine erronée”) ;
14 sinon
15 Ecrire (”Entité correcte”) ;
16 Inserer T S(entite) ; //TS : Table de Symboles ;
17 Inserer CR(N um entite) ; //CR : Chaine de Références ;
18 fin
19 fin
20 fin

Solution d’exercice N ◦ 4 :

TD N ◦ 1 Compilation Page 4/6 2020/2021


Char − {\n}

”/”
s14 s15

Char − {0 }
0

”/”
s12 s13
0
0

s11
”(”|”)”|”, ”|”; ”|” : ”
L|” ”|Ch Ch ”.” Ch

s0 L s1 s2 Ch s3 s4 Ch s5
start

Ch
” − ”|” + ”
”−” ”−”
”<” s6 s7 s8

”>”
”=”

s9 s10
”=”

F IGURE 6 – AEFD des différentes entités de mini-langage L.

TD N ◦ 1 Compilation Page 5/6 2020/2021


Algorithme 2 : Reconnaissance d’une entité lexicale de mini-langage L.
1 Début
2 // Remplissage des mots clès dans la table de symboles TS
3 // Remplissage de la table de transitions T
4 Lire (entité) ;
5 si (Rech TS (TS , entité) = faux) alors
6 tc ← 1er car de l’entité ; Ec ← S0 ;
7 tant que (Ec 6= φ) et (¬ fin d’entité) faire
8 Ec ← T ransition(Ec , tc , T ) ; tc ← ts;
9 fin
10 si (Ec == φ) alors
11 Ecrire (”Entité erronée”);
12 Sinon
13 si (Ec 6= F ) alors
14 Ecrire (”Entité erronée”);
15 Sinon
16 Ecrire (”Entité correcte”) ;
17 Cas Ec parmi :
18 {
19 S1 :
20 si longueur(entité)>32 alors
21 Ecrire (”identificateur trop long”);
22 Sinon
23 Inserer T S(entite) ; // TS. ˆ type := ’identificateur’ ;
24 fin
25 S2 : Inserer T S(entite) ; // TS. ˆ type := ’entier’ ;
26 S3 : Inserer T S(entite) ; //TS. ˆ type := ’Op arithmétique’ ;
27 S5 : Inserer T S(entite) ; //TS. ˆ type := ’réel’ ;
28 S6,S9,S10 : Inserer T S(entite) ; TS. ˆ type := ’Op relationnel’ ;
29 S8 : Inserer T S(entite) ; //TS. ˆ type := ’Op affectation’ ;
30 S11 : Inserer T S(entite) ;// TS. ˆ type := ’séparateur’ ;
31 S13 : Inserer T S(entite) ; // TS. ˆ type := ’chaine’ ;
32 }
33 Inserer CR(N um entite) ;
34 fin
35 fin
36 Sinon
37 Inserer CR(N um entite) ;
38 fin
39 Fin

TD N ◦ 1 Compilation Page 6/6 2020/2021

Vous aimerez peut-être aussi