1 Nombres flottants

publicité
ENSEIRB 2009-2010 - Département informatique - Première année
IF114 - Automates finis et applications - http://www.enseirb.fr/~herbrete/IF114
TD 6 : Introduction à l’analyse lexicale
Les exercices suivants sont dédiés à l’application des automates finis à l’analyse lexicale. Les
automates finis sont utilisés comme un modèle d’algorithme pour décider si un flux de données
est valide. Nous voyons également qu’il suffit alors d’enrichir l’algorithme pour exploiter les
données contenues dans le flux.
1
Nombres flottants
Nous souhaitons décider si un entrée saisie au clavier par l’utilisateur représente un nombre
flottant ou non. La définition des nombres flottants dans la grammaire du langage C est la
suivante :
f loatnum ::= 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ésentation d’un nombre flottant ?
2. Donner une expression régulière qui décrit le langage des nombres flottants
3. Donner l’automate minimal qui accepte le langage décrit par l’expression régulière
précédemment obtenue.
Exercice 2: Mise en œuvre
Mettre en œuvre l’automate fini par un programme C qui décide si une entrée saisie au
clavier par l’utilisateur représente un nombre flottant.
Exercice 3: Évaluation
Enrichir votre programme pour qu’en plus de décider si l’entrée saisie est bien formée, il
calcule le nombre flottant correspondant.
1
2
Un fichier indexé
Nous souhaitons écrire un programme qui lit en entrée un fichier saisi au clavier par
l’utilisateur, puis décide s’il a la structure suivante :
A2
B1
A1
C4
B27
C2
B3
...
12.45
2.0
13.47
1.45
23.78
4.0
6.8
Les lignes du fichier définissent les entrées des tableaux A, B et C (dans cet exemple). Chaque
ligne a la structure suivante :
– une lettre en première colonne,
– immédiatement suivie d’un nombre (entier naturel),
– puis une séquence non vide d’espaces (’ ’ et ’\t’),
– un nombre flottant,
– et enfin, le caractère ”fin de ligne” ’\n’.
Des espaces supplémentaires peuvent se trouver en début ou en fin de ligne (i.e. immédiatement
avant ’\n’. Ils doivent être ignorés. Enfin, la fin du fichier est marquée par la lecture du caractère ”Fin de fichier” représenté par la constante symbolique EOF (définit 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 à l’exercice précédent par un programme
C qui lit le fichier sur son entrée standard et qui indique s’il a la bonne structure ou non.
Exercice 6: Mémorisation des données
Enrichissez votre programme pour qu’il mémorise les valeurs des tableaux A et B uniquement. Sur l’exemple ci-dessus, le tableau A contient 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 été fournie doivent contenir
0.0. Avant de stocker un élément dans un tableau, vous vérifierez que l’indice donné dans
le fichier ne provoque pas de débordement de capacité du tableau. Une fois l’intégralité du
fichier lue, votre programme affichera les contenus des tableaux A et B.
2
Téléchargement