Vous êtes sur la page 1sur 2

source: https://eboik.

com/
Département de Mathématiques, Informatique et
Gestion
Sciences Mathématiques et Informatique (SMI/S5)
Compilation
Prof. : M. BENADDY
A.U:2019/2020
TD : Série 1
Exercice 1 Rappel programmation en C :
Passage des paramètres à la fonction main
Ecrire un programme en langage C, qui passe des paramètres à la fonction main en ligne de commande, le
programme affichera ensuite le nombre et les paramètres passés.
Exemple d'exécution :

Ecrire une calculette en langage C, qui calcule les expressions arithmétiques binaires, avec les nombres
entiers, et avec les quatre opérations arithmétiques. L’expression est a saisir en ligne de commande. Par
exemple, si le programme s’appelle calculette, l'appel en ligne de commande :
calculette 0.5 + 3.2
affichera à l'écran 3.7

Exercice 2 :
Décrire les langages dénotés par les expressions régulières suivantes :
1. a(a|b)*a : ensemble des mots commençant et se terminant par a séparés par 0 ou plusieurs a et/ou b
2. (("ɛ|a)*)* :
3. (a|b)*a(a|b)(a|b) : ensemble des mots formés de plusieurs a et/ou b suivis d’un mot de longueur 2
formé de a et/ou b.
4. a*ba*ba*ba* : ensemble des mots constitués de 3 b commençant, se terminant et séparés par 0 ou
plusieurs a et/ou b.
5. (aa|bb)*((ab|ba)(aa|bb)*(ab|ba)(aa|bb)*)*: ensemble des mots constitués du mot vide (epsilon) ou des
mots formés d’un nombre paire de a et d’un nombre paire de b.

Exercice 3 :
Écrire les expressions régulières correspondantes aux langages suivants :
1. Les commentaires formés des lettres minuscules délimités par les caractères /* et */
2. Toutes les chaînes formées des lettres a et b, avec un nombre paire des a et un nombre impaire des b.
Transformer les AFN suivants en AFD :

Automate a Automate b

Appliquer l'algorithme de simulation d'un AFN aux automates a et c sur la chaîne d'entrée x=aabb et
déterminer s’ils acceptent la chaîne x.
Exercice 4 :
Convertir les expressions régulières suivantes en des AFN puis en des AFD :
1. a(a|b)*a 2. (("ɛ|a)*)* 3. (a|b)*a(a|b)(a|b) 4. (a|b)*a(a|b)(a|b)(a|b)
5. a*ba*ba*ba* 6. (aa|bb)*((ab|ba)(aa|bb)*(ab|ba)(aa|bb)*)* 7. aba*b*
8. (a|b)*aa(a|b)* (exam2016) 9. b*(abb*)*(a|ɛ) (examRAT2016) 10. ((xy*x) (yx*y))?
(exam2017) 11. a((b|a*c))x*|x*a (examen 2018). 12. c(a*b|cd*)+|c (b*a|d*c) (examen rat. 2018)
Minimiser les AFD obtenus.
Exercice 5 :
1. Ecrire un programme Flex qui copie un programme écrit en C et qui remplace le mot clé float par
double. (examen rat. 2018)
2. Écrire un programme (F)Lex qui permet de compter le nombre de lignes, de mots et de caractères
d'un fichier en entrée. Le programme affichera ensuite ces nombres.
3. Écrire un programme (F)Lex qui numérote les lignes d’un fichier (hormis les lignes blanches).
4. Écrire un programme (F)Lex qui n’imprime que les commentaires d’un programmes. Ceux-ci sont
compris entre { }.
5. Écrire un programme (F)Lex qui transforme un texte en remplaçant le mot compilateur par interp si
la ligne début par a, par binterp si la ligne débute par b et par cinterp! si la ligne débute par c.
6. Ecrire un programme en (F)Lex qui supprime une suite d’espaces et les remplace par un seul espace.
7. Écrire un programme en (F)Lex qui convertit une chaîne en majuscule si elle est minuscules et
inversement.
Exercice 6 :

Le tableau suivant énumère les expressions régulières de base utilisées en Lex :


En utilisant les expressions ci-dessous :
1. Écrire un programme (F)Lex qui reconnaît une adresse électronique simple.
2. Écrire un programme (F)Lex qui reconnaît les commentaires en langage C.
3. Écrire un programme (F)Lex qui reconnaît les chaînes contenant un nombre pair de a.
4. Écrire un programme (F)Lex qui reconnaît les chaînes ne contenant pas les caractères x jusqu'à z.
5. Écrire un programme (F)Lex qui reconnaît les chaînes commençant par les lettres acc.

Vous aimerez peut-être aussi