Académique Documents
Professionnel Documents
Culture Documents
PAIX-TRAVAIL-PATRIE PEACE-WORK-FATHERLAND
**************** ****************
UNIVERSITE DE NGAOUNDERE NGAOUNDERE UNIVERSITY
**************** ****************
FACULTE DES SCIENCES FACULTY OF SCIENCE
**************** ***************
DEPARTEMENT MATHEMATIQUES DEPARTMENT OF MATHEMATICS
& INFORMATIQUE AND COMPUTER SCIENCE
**************** ****************
THEME :
Analyse sémantique
EXAMINATEUR :
CONCLUSION
INTRODUCTION
A la sortie de l’analyse syntaxique, nous nous retrouvons avec un arbre syntaxique
ou arbre de dérivation abstraite qui contient toutes les informations pertinentes sur les
structures syntaxiques du programme. Nous avons donc vérifié que le programme est
syntaxiquement correct mais est-ce qu’il sémantiquement correct ? De même on a compris sa
structure syntaxique mais est-ce qu’on a compris sa signification ? Ce sont là les interrogations
dont nous tenterons d’apporter les réponses dans les lignes qui suivent.
I. Qu’est-ce que l’analyse sémantique ?
Définition
L’analyse sémantique est une technique qui permet d’analyser le sens d’un texte. La
notion de “sens” est centrale, lorsque l’on fait référence à la sémantique. Contrairement à
l’analyse syntaxique, l’enjeu n’est pas d’analyser la structure grammaticale d’une phrase…
Mais bel et bien les intentions, les ressentis et les émotions qui dictent le sens d’un message.
Ces deux techniques sont utilisées pour affiner la compréhension du langage naturel, par
exemple dans un contexte de relation client. Cette discipline est aussi appelée TAL ou
TALN, pour “Traitement Automatique des Langues Naturelles”.
Ainsi, lorsqu’un client sollicite un service client, l’enjeu de l’analyse sémantique est de
détecter tous les éléments subjectifs, présents lors d’un échange : prise de position,
sentiment positif, insatisfaction, impatience… Tous ces éléments nourrissent le processus
d’analyse sémantique, notamment pour affiner la connaissance client et améliorer la qualité
des réponses apportées.
• Déclaration des variables : dans les langages à typage statique, nous ne pouvons pas
utiliser une variable sans qu’elle ne soit déclarée au préalable.
Exemple :
𝑖𝑛𝑡 𝑎
𝑎 = 𝑏+5
Syntaxiquement parlant, ces deux instructions sont bien formées. Cependant, 𝑏 n’est pas
déclaré avant son utilisation.
• Déclarations multiples dans un bloc : on ne peut pas déclarer une variable plusieurs
fois dans une même portée c’est-à-dire dans un même bloc.
Exemple :
𝑖𝑛𝑡 𝑎
𝑎=5
𝑖𝑛𝑡 𝑎
Syntaxiquement parlant, ces trois instructions sont bien formées. Cependant, 𝑎 est déclarée à
deux reprises dans le même bloc.
𝑠𝑜𝑚𝑚𝑒(6, 4.78);
𝑠𝑜𝑚𝑚𝑒(15);
Syntaxiquement parlant, ces trois instructions sont bien formées. Cependant, les deux appels
ne respectent pas la définition de la fonction
Opérations sur des types non-autorisés : certaines opérations ne peuvent pas être effectuées
sur certains types.
Exemple :
𝑖𝑛𝑡 𝑎 = 5;
𝑠𝑡𝑟𝑖𝑛𝑔𝑏 = "𝑆𝐴𝐿𝑈𝑇";
𝑠𝑡𝑟𝑖𝑛𝑔 𝑐 = 𝑎 ∗ 𝑏;
Syntaxiquement parlant, ces trois instructions sont bien formées. Cependant, multiplier un
entier par une chaine de caractère n’as pas de sens dans un langage de programmation tel que
C# ou JAVA.
Un simple changement de ponctuation suffit à modifier le sens de cette phrase. C’est là toute
la subtilité de l’analyse sémantique : comprendre le sens logique qui lit les éléments d’une
phrase, et qui impacte donc sa signification.
Pour l’humain, rien de plus simple : reconnaître le sens d’une phrase grâce à sa ponctuation
ou l’intonation utilisée pour la prononcer est un jeu d’enfant. Mais pour les machines, le
challenge est de taille. Et c’est là que les outils d’analyse sémantique sont particulièrement
utiles.
L'analyse sémantique est cruciale car elle permet de détecter les erreurs qui ne peuvent pas
être détectées lors de l'analyse lexicale ou syntaxique. Par exemple, si une variable est utilisée
sans avoir été déclarée, cela ne sera pas détecté lors de l'analyse lexicale ou syntaxique, mais
cela sera détecté lors de l'analyse sémantique.
Un exemple concret d'analyse sémantique est la vérification des types. Pendant l'analyse
sémantique, le compilateur vérifie que les types des expressions sont cohérents. Par exemple,
si une variable de type entier est utilisée dans une expression qui attend un type flottant, cela
est détecté lors de l'analyse sémantique.
Prenons l'exemple suivant de code source :
int main() {
int x = 5;
float y = 3.14;
x = y;
return 0;
}
Lors de l'analyse sémantique, le compilateur détectera l'erreur sur la ligne `x = y;`, car il
essaie d'assigner une valeur de type flottant à une variable de type entier.
En outre, l'analyse sémantique peut également inclure des vérifications supplémentaires,
telles que la vérification de la portée des variables et la détection des boucles et des
conditions mal formées.
Vous l’avez compris : l’analyse sémantique offre une aide précieuse au service client, mais
aussi à l’ensemble des équipes d’une entreprise. Cet outil impacte également l’expérience
client à plusieurs niveaux. Voici un récapitulatif des principaux avantages de cette
technologie :
L’analyse sémantique place réellement le client au centre des attentions. Une telle
technologie contribue au déploiement d’une démarche Customer Centric, où chaque décision
est centrée client. Cette culture d’entreprise permet d’identifier plus facilement les clients
satisfaits, pour les transformer en Ambassadeurs et accélérer la fidélisation.
2. Vérification de portée : cette analyse consiste à vérifier que les variables sont utilisées dans
leur portée appropriée. Par exemple, si une variable locale est utilisée en dehors de la
fonction où elle est déclarée, cela sera détecté lors de l'analyse sémantique.
Exemple :
int main() {
int x = 5;
{
int y = 10;
}
x = y; // erreur de portée
return 0;
}
3. Analyse des tableaux : cette analyse consiste à vérifier les opérations sur les tableaux. Par
exemple, si une opération sur un tableau tente d'accéder à une position en dehors de la plage
définie du tableau, cela sera détecté lors de l'analyse sémantique.
Exemple :
int main() {
int a[5];
a[6] = 10; // erreur d'indice de tableau
return 0;
}
4. Analyse des pointeurs : cette analyse consiste à vérifier les opérations sur les pointeurs. Par
exemple, si une opération sur un pointeur tente d'accéder à une zone mémoire non allouée,
cela sera détecté lors de l'analyse sémantique.
Exemple :
int main() {
int *p = NULL;
*p = 10; // erreur de pointeur
return 0;
}
5. Vérification des fonctions et des procédures : cette analyse consiste à vérifier les appels de
fonctions et de procédures, y compris les paramètres et les valeurs de retour. Par exemple, si
une fonction est appelée avec le nombre incorrect de paramètres ou si le type de retour de la
fonction ne correspond pas à la valeur renvoyée par la fonction, cela sera détecté lors de
l'analyse sémantique.
Exemple :
int somme(int a, int b) {
return a + b;
}
int main() {
float x = 3.14;
somme(x, 5); // erreur de typage des paramètres
return 0;
}
En résumé, chacun de ces types d'analyse sémantique en compilation vise à détecter des
erreurs spécifiques dans le code source pour garantir qu'il est cohérent sémantiquement et
peut être compilé avec succès.
𝐸→𝐸− 𝐸
𝐸 →𝐸∗𝐸
𝐸 → 𝑛𝑜𝑚𝑏𝑟𝑒
E
-
E
E
E * E
Nombre
Nombre Nombre
E
E
-
+ Nombre
E + E
Nombre Nombre Nombre
Nombre
Nombre
𝐸 →𝐸∗𝐸
𝐸 → 𝑛𝑜𝑚𝑏𝑟𝑒 58
E
72
E
2
-
E 14
E * E 9
8
Nombre
14
Nombre Nombre
8 9