Université A/ Mira de Béjaia.
janvier 2021
Département d’informatique
3eme année Licence académique
Module Compilation
Série TD N°01
Exercice 01 :
Soit le programme suivant :
function 1factorielle(n: integer): integer$;
begin!
if n <= 1 then
factorielle := 1,1,
else
factorielle := n*fact(n - 1);
end;
1. Corriger les erreurs lexicales du programme ;
2. Identifier les lexèmes et préciser les modèles qui dénotent les unités lexicales du programme. Dresser la table des
symboles.
Exercice 02 :
Pour chacun des fragments du programme Java suivant, identifiez le type d’erreur : Lexicale (détectée par le scanner),
Syntaxique (détectée par le parser), Sémantique statique (détectée par l'analyse sémantique au moment de la
compilation), sémantique dynamique (détectée au moment de l'exécution).
h. class A {
a. int num = 2.3; b. int;
private int num;
c. int@ d. int num1, num2; }
num1 = 12; class B {
num2 = num1 / 0; A a;
e. int num; int num;
String str = “dook”; void m() { a = new A();
num = str; f. int int; num = a.num;
}
g. int num; }
if (“unc”) { num = 1; }
Exercice 03 :
Donner pour chacun langages suivants son expression régulière ; écrire un analyseur lexical à la main pour les 02
langages :
- L1 = {acab, aaca}
- L2 = aa*db*𝑐 +
- L3 = L1 ou L2
Exercice 04 :
Soit le langage 𝐿𝑖𝑑 des identificateurs, composés d’une lettre au moins, éventuellement suivie de chiffres, de lettres
et de ‘_’, se terminant par une lettre ou un chiffre.
- Déterminer l’expression régulière de 𝐿𝑖𝑑 puis construire son automate à états finis déterministe (AFD)
- Modifier l’AFD pour qu’il reconnaisse aussi le mot clé if ; déterminer sa matrice de transition.
- Ecrire un algorithme de reconnaissance des identificateurs par 02 méthodes différentes. Modifier l’algorithme
pour que la longueur de l’identifiant ne dépasse pas 10 caractères.