ENSEIRB 2009-2010 - D´epartement informatique - Premi`ere ann´ee
IF114 - Automates finis et applications - http://www.enseirb.fr/~herbrete/IF114
TD 6 : Introduction `a l’analyse lexicale
Les exercices suivants sont d´edi´es `a l’application des automates finis `a l’analyse lexicale. Les
automates finis sont utilis´es comme un mod`ele d’algorithme pour d´ecider si un flux de donn´ees
est valide. Nous voyons ´egalement qu’il suffit alors d’enrichir l’algorithme pour exploiter les
donn´ees contenues dans le flux.
1 Nombres flottants
Nous souhaitons d´ecider si un entr´ee saisie au clavier par l’utilisateur repr´esente un nombre
flottant ou non. La d´efinition des nombres flottants dans la grammaire du langage C est la
suivante :
floatnum ::= sign value exponent
sign ::= | − | +
value ::= num |num . num
num ::= digit |digit num
digit ::= 0|1|2|3|4|5|6|7|8|9
exponent ::= |expsym sign num
expsym ::= E|e
Exercice 1: Formalisation
1. Quel est l’alphabet de travail ? Quels sont les symboles qui peuvent apparaˆıtre dans la
repr´esentation d’un nombre flottant ?
2. Donner une expression r´eguli`ere qui d´ecrit le langage des nombres flottants
3. Donner l’automate minimal qui accepte le langage d´ecrit par l’expression r´eguli`ere
pr´ec´edemment obtenue.
Exercice 2: Mise en œuvre
Mettre en œuvre l’automate fini par un programme C qui d´ecide si une entr´ee saisie au
clavier par l’utilisateur repr´esente un nombre flottant.
Exercice 3: ´
Evaluation
Enrichir votre programme pour qu’en plus de d´ecider si l’entr´ee saisie est bien form´ee, il
calcule le nombre flottant correspondant.
1
2 Un fichier index´e
Nous souhaitons ´ecrire un programme qui lit en entr´ee un fichier saisi au clavier par
l’utilisateur, puis d´ecide s’il a la structure suivante :
A2 12.45
B1 2.0
A1 13.47
C4 1.45
B27 23.78
C2 4.0
B3 6.8
...
Les lignes du fichier d´efinissent les entr´ees des tableaux A,Bet C(dans cet exemple). Chaque
ligne a la structure suivante :
une lettre en premi`ere colonne,
imm´ediatement suivie d’un nombre (entier naturel),
puis une s´equence non vide d’espaces ( et ’\t’),
un nombre flottant,
et enfin, le caract`ere ”fin de ligne” ’\n’.
Des espaces suppl´ementaires peuvent se trouver en d´ebut ou en fin de ligne (i.e. imm´ediatement
avant ’\n’. Ils doivent ˆetre ignor´es. Enfin, la fin du fichier est marqu´ee par la lecture du ca-
ract`ere ”Fin de fichier” repr´esent´e par la constante symbolique EOF (d´efinit dans stdlib.h
pour le langage C).
Exercice 4: Formalisation
Donnez un l’automate fini minimal qui accepte le langage des fichiers (vus comme des
mots) qui ont la structure ci-dessus.
Exercice 5: Mise en œuvre
Mettez en œuvre l’automate fini minimal obtenu `a l’exercice pr´ec´edent par un programme
C qui lit le fichier sur son entr´ee standard et qui indique s’il a la bonne structure ou non.
Exercice 6: M´emorisation des donn´ees
Enrichissez votre programme pour qu’il m´emorise les valeurs des tableaux Aet Bunique-
ment. Sur l’exemple ci-dessus, le tableau Acontient 12.45 en case d’indice 2 et 13.47 en case
d’indice 1. Les cases du tableau pour lesquelles aucune valeur n’a ´et´e fournie doivent contenir
0.0. Avant de stocker un ´el´ement dans un tableau, vous v´erifierez que l’indice donn´e dans
le fichier ne provoque pas de d´ebordement de capacit´e du tableau. Une fois l’inegralit´e du
fichier lue, votre programme affichera les contenus des tableaux Aet B.
2
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !