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.
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 (”−” |
”+”).
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
Ch
Ch Ch
start s0 s1 s2
” − ”|” + ”
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
” − ”|” + ”
Solution d’exercice N ◦ 3 :
Char − {0 }
0 0
start s0 s1 s2
0 0
S3
start s0 s1 s2
0
Solution d’exercice N ◦ 4 :
”/”
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
”=”