Vous êtes sur la page 1sur 3

Techniques de compilation

TD 1 : Analyse lexicale

EXERCICE 1 :

Lister les lexèmes et les unités lexicales correspondantes dans le programme suivant :

fonction max(i, j : integer)

begin

if i>j then max: = i

else max : = j

end;

EXERCICE 2:

Simulez le travail de l’analyseur lexical pour la chaine suivante :

MONTANT = PRIX (QUANTITE) + 12.7

EXERCICE 3 :

Soient les lignes de code suivantes extraites d’un programme Java :

Classe Cercle // définition d’une classe


{
Private double rayon ;
Public void setRayon (double r)
{
rayon = r ;
}
Public double aire ( )
{
return rayon * rayon * PI ;
}
}

Reproduire puis remplir le tableau suivant :


UL lexème ER correspondante

Olfa Mouelhi |
olfa.mouelhi@esprit.tn
EXERCICE 4 :

Supposant que le compilateur d’un langage de programmation assigne l’unité lexicale suivante
OPREL pour les opérateurs relationnels : <, >, <=, >=,= et < >.

Proposer un diagramme de transition qui reconnait ce type d’unité lexicale et qui est, une fois arrivé à
des états finaux de l’automate, émet comme message : retourne (< OPREL, le lexème de l’opérateur
en question >).

EXERCICE 5 :

Supposant que dans un langage de programmation X, les noms de variables doivent être écrits en
commençant par V suivi (non obligatoirement) d’une suite quelconque de lettres écrites en majuscule
et / ou de chiffres de 1 à 5.

1. Donner 3 exemples de variables écrites dans le langage X et tel que :


a) La première variable est de taille égale à 6.
b) La deuxième variable est de taille égale à 15.
c) La troisième variable comporte le nombre 2132 et les lettres C, D au mois une fois et la
lettre Z exactement une fois.
2. Donner les expressions régulières du modèle associé aux variables de X.
3. Proposer un automate qui permet de reconnaitre le modèle des variables de X.

EXERCICE 6 :

Une commande est composée de 4 parties dont seul la première est obligatoire.

 La première partie est constituée du nom de la commande (un identificateur).


 La deuxième partie est composée du nom d’une variable (un identificateur) sur laquelle la
commande est appliquée.
 La troisième partie correspond à l’ensemble des paramètres : c’est une suite non nulle de
paramètres (qui sont ici des caractères) séparés par des virgules, encadrés par des accolades.
 La dernière partie correspond à la partie option. Elle est constituée par une suite non nulle
d’options séparées par des points virgules, encadrées par des crochets. Une option est
représentée par un caractère.

Donner des exemples de commandes lexicalement correctes.

Ecrire une définition régulière décrivant la syntaxe d’une commande.

EXERCICE 7 :

On vous demande de donner une définition régulière décrivant la syntaxe d’expressions


vectorielles sachant que :

 Une expression vectorielle (v) est :

1. Soit une suite de nombres encadrés par des crochets. (Ex : [4, 2, 9] ).
2. Ou bien la somme de deux expressions vectorielles.
(Ex : [3, 5, 7] + [1,4,9])
Olfa Mouelhi |
olfa.mouelhi@esprit.tn
3. Ou bien le produit d’une expression vectorielle par un nombre.
(Ex : 3*[3, 5, 7] ou [1, 4, 9]*2)

 Un nombre (nb) étant défini comme un entier.

EXERCICE 8 :

1. Donner un automate fini déterministe qui reconnait dans une chaine de caractères les unités
lexicales suivantes :
 Les opérateurs + et - ;
 Les identificateurs en pascal composés uniquement de chiffres et de caractères ;
 Les entiers non signés ;
 Un sous ensemble des réels comportant syntaxiquement une suite de chiffres suivis de la
lettre e suivis d’une suite de chiffres éventuellement signés (exemple : 24e-3, 4e56)
2. Donner pour chaque unité lexicale une description régulière qui la définit.
3. Comment l’analyseur lexical décompose-t-il les chaines suivantes :
 +- ;
 Aa+9 ;
 Ae9+9 ;
 13e12 ;
 6 b+a ;

EXERCICE 9 :

On considère un langage de programmation contenant uniquement les mots clés do, od, et les
identificateurs en pascal.

1. Donner un automate fini déterministe qui effectue l’analyse lexicale de ces trois types
d’unités.
2. Implémenter à la main l’analyseur lexical à partir de l’automate obtenu.

EXERCICE 10 :

On souhaite écrire un analyseur lexical pour le langage de commandes suivant :

1. Une commande est composée d’un nom de la commande, suivi d’une liste optionnelle
d’arguments, suivie d’une liste facultative d’options.
2. Une liste d’arguments est une suite d’arguments.
3. Une liste d’options est une suite non vide d’options encadrée par crochets. A l’intérieur de la
quelle les options sont s éparées par « , ».
4. Une option est un caractère précédé par un tiret.
5. Un argument est un identificateur, de même le nom de la commande.

Par exemple macom arg1 arg2 [-t,-o] est une commande.

Q1- Quelles sont les unités lexicales nécessaires à la description d’une commande ?

Q2- Donner pour chacune une description régulière qui la définit.

Olfa Mouelhi |
olfa.mouelhi@esprit.tn

Vous aimerez peut-être aussi