SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
COMPILATION
© MOURCHID Mohammed
Département d’Informatique
Faculté des Sciences Ibn Tofail
© Compilation / M.MOURCHID, SMI, 2023-2024
1
PLAN
1. Fondements de la compilation
2. Analyse lexicale
3. Analyse syntaxique
4. Analyse sémantique
© Compilation / M.MOURCHID, SMI, 2023-2024
2
CHAPITRE 1:
FONDEMENTS DE LA COMPILATION
© Compilation / M.MOURCHID, SMI, 2023-2024
3
SOMMAIRE
 Pourquoi étudier la construction de compilateurs?
 Qu’est-ce qu’un compilateur ?
 Phases d’un compilateur
© Compilation / M.MOURCHID, SMI, 2023-2024
4
POURQUOI ÉTUDIER LA CONSTRUCTION DE COMPILATEURS?
Très peu de gens écrivent des compilateurs comme profession.
Alors pourquoi apprendre à construire des compilateurs ?
Ca vous rendra plus compétent :
 Un informaticien compétent comprend les langages de haut niveau ainsi que
le matériel.
 Un compilateur relie les deux.
 Comprendre les techniques de compilation est essentiel pour comprendre
comment les langages de programmation et les ordinateurs interagissent.
 Les algorithmes et les outils de compilations sont repris dans d’autres
domaines informatiques ( TALN, Parser des documents, ….)
 I
© Compilation / M.MOURCHID, SMI, 2023-2024
5
POURQUOI ÉTUDIER LA CONSTRUCTION DE COMPILATEURS?
On compile ailleurs que dans les compilateurs :
 Beaucoup d’applications contiennent de petits langages pour leur
configuration et pour flexibiliser leur contrôle :
 les macros de Word, les scripts pour le graphisme et l’animation, les
descriptions de structures de données.
 Les techniques de compilation sont nécessaires pour correctement
implanter des
langages d’extension.
 Les formats de données sont aussi des langages formels. De plus en plus
de données en format interchangeable ressemblent `à un texte d’un langage
formel (p.ex. HTML, XML).
 Les techniques de compilation sont utiles pour lire, manipuler et écrire
des données.
© Compilation / M.MOURCHID, SMI, 2023-2024
6
QU’EST-CE QU’UN COMPILATEUR ?
Le rôle d’un compilateur:
 Le rôle principal d’un compilateur est de traduire des
programmes écrits dans un langage source donné en un
langage objet.
 Souvent, le langage source est un langage de programmation
et le langage objet est un langage machine.
 Quelques exceptions : traduction source-source, traduction de
code machine, manipulation de données en XML.
 Une partie du travail du compilateur est aussi de détecter si
un programme donné est conforme aux règles du langage
source.
© Compilation / M.MOURCHID, SMI, 2023-2024
7
PHASES D’UN COMPILATEUR
Schéma d’un compilateur:
© Compilation / M.MOURCHID, SMI, 2023-2024
8
 La phase frontale (ou phase d’analyse): traduit le code
source en une représentation intermédiaire (RI).
 La phase arrière (ou phase de synthèse) traduit la RI
en un code cible.
PHASES D’UN COMPILATEUR
Partie frontale:
© Compilation / M.MOURCHID, SMI, 2023-2024
9
 Rôle de la partie frontale d’un compilateur :La phase
frontale: traduit le code source en une représentation
intermédiaire (RI).
 Reconnaissance des éléments du programme source.
 Détection des erreurs.
 Production de la RI.
 Préparation du code pour la partie arrière.
PHASES D’UN COMPILATEUR
Partie frontale:
© Compilation / M.MOURCHID, SMI, 2023-2024
10
 Analyseur lexical (Scanner) :
 Rôle principal : délivrer les tokens à partir des flots de caractères (les
unités de base de la syntaxe).
Exemple: X = X + 1 devient:
< X, id >, < =, Opaff >, < X, id >, < +, Opadd>, < 1, Number >,
 Rôle secondaire : éliminer les ´éléments inutiles (espaces, tabulations,
commentaires).
PHASES D’UN COMPILATEUR
Partie frontale:
© Compilation / M.MOURCHID, SMI, 2023-2024
11
 Analyseur syntaxique (Parser) :
 Reconnaître les unités syntaxiques.
 Guider l’analyse sémantique (traduction dirigée par la syntaxe):
 Construire la RI.
 Produire les messages d’erreurs adéquats.
 Faciliter la correction des erreurs.
PHASES D’UN COMPILATEUR
Partie frontale: Analyseur sémantique
 L’analyseur sémantique contrôle le code pour s’assurer qu’il est
conforme aux spécifications du langage.
 Il contrôle :
 le typage.
 le flot d’exécution : branchements après un break.
 unicité des objets, des étiquettes, ...etc.
© Compilation / M.MOURCHID, SMI, 2023-2024
12
 Analyseur syntaxique (Parser) :
 Reconnaître les unités syntaxiques.
 Guider l’analyse sémantique (traduction dirigée par la syntaxe):
 Construire la RI.
 Produire les messages d’erreurs adéquats.
 Faciliter la correction des erreurs.
PHASES D’UN COMPILATEUR
Partie frontale: Analyseur sémantique
 L’analyseur sémantique contrôle le code pour s’assurer qu’il est
conforme aux spécifications du langage.
 Il contrôle :
 le typage.
 le flot d’exécution : branchements après un break.
 unicité des objets, des étiquettes, ...etc.
© Compilation / M.MOURCHID, SMI, 2023-2024
13
 Analyseur syntaxique (Parser) :
 Reconnaître les unités syntaxiques.
 Guider l’analyse sémantique (traduction dirigée par la syntaxe):
 Construire la RI.
 Produire les messages d’erreurs adéquats.
 Faciliter la correction des erreurs.
PHASES D’UN COMPILATEUR
Partie arrière : Génération de code intermédiaire
 Le générateur de code intermédiaire construit explicitement une
représentation intermédiaire du programme source.
 Cette représentation intermédiaire doit être facile à produire et
facile à traduire en langage cible.
© Compilation / M.MOURCHID, SMI, 2023-2024
14
PHASES D’UN COMPILATEUR
Partie arrière :
 Optimisation de code intermédiaire
 L’optimiseur de code intermédiaire tente d’améliorer le code
intermédiaire de façon que le code machine résultant
s’exécute le plus rapidement possible.
 Génération de code cible:
 Le générateur de code cible produit le code cible, c’est-`a-
dire du code machine translatable ou du code en langage
d’assemblage.
 Les emplacements mémoire pour chacune des variables
utilisées dans le programme sont s´sélectionnées.
© Compilation / M.MOURCHID, SMI, 2023-2024
15
SCHÉMA GLOBAL D’UN COMPILATEUR
© Compilation / M.MOURCHID, SMI, 2023-2024
16
L’ANALYSEUR LEXICAL
Rôle : l’analyseur lexical prend en entrée le flot de caractères constituant le
programme source et délivre les unités lexicales.
 Le flot de caractères du programme source est lu de gauche à droite.
 Les caractères formant un sens sont groupés en unités lexicales (tokens).
 Les caractères superflus sont supprimés par l’analyseur lexical.
 Une des tâches de l’analyseur lexical est d’ignorer les commentaires.
Unité lexicale (token) : c’est une suite de caractères ayant une signification
collective.
L’analyseur lexical doit aussi déterminer si chaque lexème est un mot correct du
vocabulaire du langage.
© Compilation / M.MOURCHID, SMI, 2023-2024
17
L’ANALYSEUR LEXICAL
 Exemple
 Soit l’instruction Pascal :
aire:=base*hauteur/2
 L’analyse lexicale reconnait les lexèmes suivants :
 Les unités lexicales reconnues sont :
<identificateur> aire
<affectation> :=
<identificateur> base
<opérateur> *
<identificateur> hauteur
<opérateur> /
<nombre> 2
© Compilation / M.MOURCHID, SMI, 2023-2024
18
aire := base * hauteur / 2
L’ANALYSEUR SYNTAXIQUE
Rôle : l’analyseur syntaxique prend en entrée un flot d’unités lexicales fournit par
l’analyseur lexical et délivre les unités syntaxiques.
 Une unité syntaxique est une structure grammaticale représentée généralement par
des arbres dites « arbres syntaxiques ».
L’analyseur syntaxique doit également déterminer si chaque unité syntaxique est
une phrase correcte du langage, c’est-à-dire qu’elle vérifie sa grammaire. Cette
dernière est définie par un ensemble de règles de production.
© Compilation / M.MOURCHID, SMI, 2023-2024
19
L’ANALYSEUR SYNTAXIQUE
 Exemple
 L ’arbre syntaxique produit est :
© Compilation / M.MOURCHID, SMI, 2023-2024
20
Instruction d’affectation
identificateur := Expression
Expression Expression
Expression Expression
identificateur
identificateur
Nombre
base
hauteur 2
*
/
aire
L’ANALYSEUR SÉMANTIQUE
L’analyse sémantique contrôle si le programme source contient des erreurs
sémantiques et collecte des informations de type destinées à la phase de
production de code qui la suit.
 L’analyseur sémantique prend en entrée l’arbre syntaxique délivré par l’analyseur
syntaxique pour identifier les opérateurs et les opérandes des expressions, ainsi que
les instructions.
 La tâche importante de l’analyseur sémantique est la vérification de type. Par
exemple, dans la plupart des langages de programmation, l’indice d’un tableau doit
être de type entier et non pas de type réel.
© Compilation / M.MOURCHID, SMI, 2023-2024
21
L’ANALYSEUR SÉMANTIQUE
 Une autre activité de l’analyseur sémantique est la conversion implicite de type.
 Par exemple, additionner un « float » et un « int » ne se fait pas directement, il faut
transformer la valeur int en une valeur float (elles n’ont pas la même représentation
binaire).
Autres activités de l’analyseur sémantique :
 Détecter les erreurs d’incompatibilité de types : opération sur deux types
incompatibles (« fichier + ensemble » ou « fonction * tableau »).
 Détecter certaines erreurs de calcul : division par 0, racine carrée ou logarithme
d’un nombre négatif.
© Compilation / M.MOURCHID, SMI, 2023-2024
22
L’ANALYSEUR SÉMANTIQUE
 Exemple
 Ici l’analyseur sémantique va effectuer la conversion
implicite de type
© Compilation / M.MOURCHID, SMI, 2023-2024
23
:=
aire *
hauteur /
base Conversion « int réel »
2.0

Contenu connexe

Similaire à Compilationnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn

Algorithme et programmation.pdf
Algorithme et programmation.pdfAlgorithme et programmation.pdf
Algorithme et programmation.pdfGhassenHaamdi
 
Programmation-en-C-ESIITECH-2023-2024.pptx
Programmation-en-C-ESIITECH-2023-2024.pptxProgrammation-en-C-ESIITECH-2023-2024.pptx
Programmation-en-C-ESIITECH-2023-2024.pptxOlyvierNzighou1
 
Programmation-en-C-ESIITECH-2023-2024-bis.pptx
Programmation-en-C-ESIITECH-2023-2024-bis.pptxProgrammation-en-C-ESIITECH-2023-2024-bis.pptx
Programmation-en-C-ESIITECH-2023-2024-bis.pptxOlyvierNzighou1
 
[FR] Guide de codage des programmes automates
[FR] Guide de codage des programmes automates[FR] Guide de codage des programmes automates
[FR] Guide de codage des programmes automatesItris Automation Square
 
Algorithmique et methodes de programmation
Algorithmique et methodes de programmationAlgorithmique et methodes de programmation
Algorithmique et methodes de programmationSageKataliko1
 
Algorithme & structures de données Chap I
Algorithme & structures de données Chap IAlgorithme & structures de données Chap I
Algorithme & structures de données Chap IInes Ouaz
 
cours Algorithmique SMP-SMC s2 by coursedu.blogspot.com
cours Algorithmique SMP-SMC s2 by coursedu.blogspot.comcours Algorithmique SMP-SMC s2 by coursedu.blogspot.com
cours Algorithmique SMP-SMC s2 by coursedu.blogspot.comcoursedu
 
LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdf
LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdfLUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdf
LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdfRedaBelattar
 
Vbscript
VbscriptVbscript
Vbscriptouedib
 
Outils de construction pour la recherche
Outils de construction pour la rechercheOutils de construction pour la recherche
Outils de construction pour la rechercheJohan Moreau
 
cours fortran.pptx
cours fortran.pptxcours fortran.pptx
cours fortran.pptxMED B
 

Similaire à Compilationnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn (20)

Algorithme et programmation.pdf
Algorithme et programmation.pdfAlgorithme et programmation.pdf
Algorithme et programmation.pdf
 
Pl 2-bis
Pl 2-bisPl 2-bis
Pl 2-bis
 
Programmation-en-C-ESIITECH-2023-2024.pptx
Programmation-en-C-ESIITECH-2023-2024.pptxProgrammation-en-C-ESIITECH-2023-2024.pptx
Programmation-en-C-ESIITECH-2023-2024.pptx
 
Programmation-en-C-ESIITECH-2023-2024-bis.pptx
Programmation-en-C-ESIITECH-2023-2024-bis.pptxProgrammation-en-C-ESIITECH-2023-2024-bis.pptx
Programmation-en-C-ESIITECH-2023-2024-bis.pptx
 
[FR] Guide de codage des programmes automates
[FR] Guide de codage des programmes automates[FR] Guide de codage des programmes automates
[FR] Guide de codage des programmes automates
 
Algorithmique et methodes de programmation
Algorithmique et methodes de programmationAlgorithmique et methodes de programmation
Algorithmique et methodes de programmation
 
Algorithme chap 1
Algorithme chap 1Algorithme chap 1
Algorithme chap 1
 
43_pps.pdf
43_pps.pdf43_pps.pdf
43_pps.pdf
 
Algorithme & structures de données Chap I
Algorithme & structures de données Chap IAlgorithme & structures de données Chap I
Algorithme & structures de données Chap I
 
cours Algorithmique SMP-SMC s2 by coursedu.blogspot.com
cours Algorithmique SMP-SMC s2 by coursedu.blogspot.comcours Algorithmique SMP-SMC s2 by coursedu.blogspot.com
cours Algorithmique SMP-SMC s2 by coursedu.blogspot.com
 
Introduction à ASP.NET
Introduction à ASP.NETIntroduction à ASP.NET
Introduction à ASP.NET
 
Fascicule tp programmation c
Fascicule tp programmation cFascicule tp programmation c
Fascicule tp programmation c
 
LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdf
LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdfLUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdf
LUP IRT 2021_2022 - Cours - Programmation Python (Partie I).pdf
 
[FR] Papier Cetsis 2014 - PLC Checker
[FR] Papier Cetsis 2014 - PLC Checker[FR] Papier Cetsis 2014 - PLC Checker
[FR] Papier Cetsis 2014 - PLC Checker
 
Automat-wd.info utilisation des outils bureautiques
Automat-wd.info utilisation des outils bureautiquesAutomat-wd.info utilisation des outils bureautiques
Automat-wd.info utilisation des outils bureautiques
 
Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)
 
Vbscript
VbscriptVbscript
Vbscript
 
Outils de construction pour la recherche
Outils de construction pour la rechercheOutils de construction pour la recherche
Outils de construction pour la recherche
 
Cours langage-c
Cours langage-cCours langage-c
Cours langage-c
 
cours fortran.pptx
cours fortran.pptxcours fortran.pptx
cours fortran.pptx
 

Compilationnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn

  • 1. COMPILATION © MOURCHID Mohammed Département d’Informatique Faculté des Sciences Ibn Tofail © Compilation / M.MOURCHID, SMI, 2023-2024 1
  • 2. PLAN 1. Fondements de la compilation 2. Analyse lexicale 3. Analyse syntaxique 4. Analyse sémantique © Compilation / M.MOURCHID, SMI, 2023-2024 2
  • 3. CHAPITRE 1: FONDEMENTS DE LA COMPILATION © Compilation / M.MOURCHID, SMI, 2023-2024 3
  • 4. SOMMAIRE  Pourquoi étudier la construction de compilateurs?  Qu’est-ce qu’un compilateur ?  Phases d’un compilateur © Compilation / M.MOURCHID, SMI, 2023-2024 4
  • 5. POURQUOI ÉTUDIER LA CONSTRUCTION DE COMPILATEURS? Très peu de gens écrivent des compilateurs comme profession. Alors pourquoi apprendre à construire des compilateurs ? Ca vous rendra plus compétent :  Un informaticien compétent comprend les langages de haut niveau ainsi que le matériel.  Un compilateur relie les deux.  Comprendre les techniques de compilation est essentiel pour comprendre comment les langages de programmation et les ordinateurs interagissent.  Les algorithmes et les outils de compilations sont repris dans d’autres domaines informatiques ( TALN, Parser des documents, ….)  I © Compilation / M.MOURCHID, SMI, 2023-2024 5
  • 6. POURQUOI ÉTUDIER LA CONSTRUCTION DE COMPILATEURS? On compile ailleurs que dans les compilateurs :  Beaucoup d’applications contiennent de petits langages pour leur configuration et pour flexibiliser leur contrôle :  les macros de Word, les scripts pour le graphisme et l’animation, les descriptions de structures de données.  Les techniques de compilation sont nécessaires pour correctement implanter des langages d’extension.  Les formats de données sont aussi des langages formels. De plus en plus de données en format interchangeable ressemblent `à un texte d’un langage formel (p.ex. HTML, XML).  Les techniques de compilation sont utiles pour lire, manipuler et écrire des données. © Compilation / M.MOURCHID, SMI, 2023-2024 6
  • 7. QU’EST-CE QU’UN COMPILATEUR ? Le rôle d’un compilateur:  Le rôle principal d’un compilateur est de traduire des programmes écrits dans un langage source donné en un langage objet.  Souvent, le langage source est un langage de programmation et le langage objet est un langage machine.  Quelques exceptions : traduction source-source, traduction de code machine, manipulation de données en XML.  Une partie du travail du compilateur est aussi de détecter si un programme donné est conforme aux règles du langage source. © Compilation / M.MOURCHID, SMI, 2023-2024 7
  • 8. PHASES D’UN COMPILATEUR Schéma d’un compilateur: © Compilation / M.MOURCHID, SMI, 2023-2024 8  La phase frontale (ou phase d’analyse): traduit le code source en une représentation intermédiaire (RI).  La phase arrière (ou phase de synthèse) traduit la RI en un code cible.
  • 9. PHASES D’UN COMPILATEUR Partie frontale: © Compilation / M.MOURCHID, SMI, 2023-2024 9  Rôle de la partie frontale d’un compilateur :La phase frontale: traduit le code source en une représentation intermédiaire (RI).  Reconnaissance des éléments du programme source.  Détection des erreurs.  Production de la RI.  Préparation du code pour la partie arrière.
  • 10. PHASES D’UN COMPILATEUR Partie frontale: © Compilation / M.MOURCHID, SMI, 2023-2024 10  Analyseur lexical (Scanner) :  Rôle principal : délivrer les tokens à partir des flots de caractères (les unités de base de la syntaxe). Exemple: X = X + 1 devient: < X, id >, < =, Opaff >, < X, id >, < +, Opadd>, < 1, Number >,  Rôle secondaire : éliminer les ´éléments inutiles (espaces, tabulations, commentaires).
  • 11. PHASES D’UN COMPILATEUR Partie frontale: © Compilation / M.MOURCHID, SMI, 2023-2024 11  Analyseur syntaxique (Parser) :  Reconnaître les unités syntaxiques.  Guider l’analyse sémantique (traduction dirigée par la syntaxe):  Construire la RI.  Produire les messages d’erreurs adéquats.  Faciliter la correction des erreurs.
  • 12. PHASES D’UN COMPILATEUR Partie frontale: Analyseur sémantique  L’analyseur sémantique contrôle le code pour s’assurer qu’il est conforme aux spécifications du langage.  Il contrôle :  le typage.  le flot d’exécution : branchements après un break.  unicité des objets, des étiquettes, ...etc. © Compilation / M.MOURCHID, SMI, 2023-2024 12  Analyseur syntaxique (Parser) :  Reconnaître les unités syntaxiques.  Guider l’analyse sémantique (traduction dirigée par la syntaxe):  Construire la RI.  Produire les messages d’erreurs adéquats.  Faciliter la correction des erreurs.
  • 13. PHASES D’UN COMPILATEUR Partie frontale: Analyseur sémantique  L’analyseur sémantique contrôle le code pour s’assurer qu’il est conforme aux spécifications du langage.  Il contrôle :  le typage.  le flot d’exécution : branchements après un break.  unicité des objets, des étiquettes, ...etc. © Compilation / M.MOURCHID, SMI, 2023-2024 13  Analyseur syntaxique (Parser) :  Reconnaître les unités syntaxiques.  Guider l’analyse sémantique (traduction dirigée par la syntaxe):  Construire la RI.  Produire les messages d’erreurs adéquats.  Faciliter la correction des erreurs.
  • 14. PHASES D’UN COMPILATEUR Partie arrière : Génération de code intermédiaire  Le générateur de code intermédiaire construit explicitement une représentation intermédiaire du programme source.  Cette représentation intermédiaire doit être facile à produire et facile à traduire en langage cible. © Compilation / M.MOURCHID, SMI, 2023-2024 14
  • 15. PHASES D’UN COMPILATEUR Partie arrière :  Optimisation de code intermédiaire  L’optimiseur de code intermédiaire tente d’améliorer le code intermédiaire de façon que le code machine résultant s’exécute le plus rapidement possible.  Génération de code cible:  Le générateur de code cible produit le code cible, c’est-`a- dire du code machine translatable ou du code en langage d’assemblage.  Les emplacements mémoire pour chacune des variables utilisées dans le programme sont s´sélectionnées. © Compilation / M.MOURCHID, SMI, 2023-2024 15
  • 16. SCHÉMA GLOBAL D’UN COMPILATEUR © Compilation / M.MOURCHID, SMI, 2023-2024 16
  • 17. L’ANALYSEUR LEXICAL Rôle : l’analyseur lexical prend en entrée le flot de caractères constituant le programme source et délivre les unités lexicales.  Le flot de caractères du programme source est lu de gauche à droite.  Les caractères formant un sens sont groupés en unités lexicales (tokens).  Les caractères superflus sont supprimés par l’analyseur lexical.  Une des tâches de l’analyseur lexical est d’ignorer les commentaires. Unité lexicale (token) : c’est une suite de caractères ayant une signification collective. L’analyseur lexical doit aussi déterminer si chaque lexème est un mot correct du vocabulaire du langage. © Compilation / M.MOURCHID, SMI, 2023-2024 17
  • 18. L’ANALYSEUR LEXICAL  Exemple  Soit l’instruction Pascal : aire:=base*hauteur/2  L’analyse lexicale reconnait les lexèmes suivants :  Les unités lexicales reconnues sont : <identificateur> aire <affectation> := <identificateur> base <opérateur> * <identificateur> hauteur <opérateur> / <nombre> 2 © Compilation / M.MOURCHID, SMI, 2023-2024 18 aire := base * hauteur / 2
  • 19. L’ANALYSEUR SYNTAXIQUE Rôle : l’analyseur syntaxique prend en entrée un flot d’unités lexicales fournit par l’analyseur lexical et délivre les unités syntaxiques.  Une unité syntaxique est une structure grammaticale représentée généralement par des arbres dites « arbres syntaxiques ». L’analyseur syntaxique doit également déterminer si chaque unité syntaxique est une phrase correcte du langage, c’est-à-dire qu’elle vérifie sa grammaire. Cette dernière est définie par un ensemble de règles de production. © Compilation / M.MOURCHID, SMI, 2023-2024 19
  • 20. L’ANALYSEUR SYNTAXIQUE  Exemple  L ’arbre syntaxique produit est : © Compilation / M.MOURCHID, SMI, 2023-2024 20 Instruction d’affectation identificateur := Expression Expression Expression Expression Expression identificateur identificateur Nombre base hauteur 2 * / aire
  • 21. L’ANALYSEUR SÉMANTIQUE L’analyse sémantique contrôle si le programme source contient des erreurs sémantiques et collecte des informations de type destinées à la phase de production de code qui la suit.  L’analyseur sémantique prend en entrée l’arbre syntaxique délivré par l’analyseur syntaxique pour identifier les opérateurs et les opérandes des expressions, ainsi que les instructions.  La tâche importante de l’analyseur sémantique est la vérification de type. Par exemple, dans la plupart des langages de programmation, l’indice d’un tableau doit être de type entier et non pas de type réel. © Compilation / M.MOURCHID, SMI, 2023-2024 21
  • 22. L’ANALYSEUR SÉMANTIQUE  Une autre activité de l’analyseur sémantique est la conversion implicite de type.  Par exemple, additionner un « float » et un « int » ne se fait pas directement, il faut transformer la valeur int en une valeur float (elles n’ont pas la même représentation binaire). Autres activités de l’analyseur sémantique :  Détecter les erreurs d’incompatibilité de types : opération sur deux types incompatibles (« fichier + ensemble » ou « fonction * tableau »).  Détecter certaines erreurs de calcul : division par 0, racine carrée ou logarithme d’un nombre négatif. © Compilation / M.MOURCHID, SMI, 2023-2024 22
  • 23. L’ANALYSEUR SÉMANTIQUE  Exemple  Ici l’analyseur sémantique va effectuer la conversion implicite de type © Compilation / M.MOURCHID, SMI, 2023-2024 23 := aire * hauteur / base Conversion « int réel » 2.0