Vous êtes sur la page 1sur 26

CHAPITRE 01

Ones Sidhom Introduction


2022-2023
Plan du chapitre
Processeurs de langages 01
Phases et structure d’un compilateur 08
Phase d'analyse 11
Analyse lexicale 11
Analyse syntaxique 14
Analyse sémantique 16
Phase de synthèse 20
Génération de code intermédiaire 20
Optimisation de code 22
Génération de code 24
Phases parallèles 25
Gestion de la table des symboles 25
Gestion des erreurs 26
Ones Sidhom 2
Processeurs de langages
Introduction
La théorie des langages définit les langages de programmation.
La compilation transforme les programmes écrits dans ces langages en langage
machine.
Un langage de programmation
Un langage est une notation (ensemble de mots) décrivant un calcul
effectués sur des données.
On distingue trois aspects:
Lexical : concerne le vocabulaire du langage, les règles d'écriture des mots
du langage, les mots clés et les caractères spéciaux.
Syntaxique: spécifie la manière de construire des programmes dans ce
langage, autrement dit les règles grammaticales propres au langage.
Ones Sidhom Sémantique: la signification d’un programme 3
Processeurs de langages
Langage de haut niveau
Le langage de haut niveau est proche du programmeur.
Ces langages de programmation sont faciles à
comprendre pour les humains. Ils sont indépendants de
la machine.
Exp: Python, PHP, JavaScript,Ruby ...

Langage de bas niveau


Les langages bas niveau sont utilisés pour écrire des
programmes relatifs à l’architecture et au matériel
spécifiques d’un type d’ordinateur particulier.
Ils sont plus proches du langue maternelle d’un ordinateur
(le binaire), ce qui les rend plus difficiles à comprendre
pour les programmeurs.
Exp: le langage machine et le langage d'assemblage.. 4
Ones Sidhom
Processeurs de langages
Compilateur
Programme qui assure la traduction d’un programme source écrit en
un langage de haut niveau en un programme cible exécutable une fois pour toutes,
en signalant toute erreur dans le programme source.(C, C++, Pascal,...)
Sous Windows, cela donne un fichier avec l’extension « .EXE » (exe pour
exécutable).

Programme
Programme Compilateur cible
source

Messages d'erreur
Ones Sidhom 5
Processeurs de langages
Interpréteur
programme qui assure l’analyse et l’exécution du programme source (instruction
par instruction).
Un langage interprété est un langage dans lequel chaque ligne d’instruction est lue
et traduite pour être exécutée. Pour que cela fonctionne, l’interpréteur doit avoir
accès au code source.
Exemples de langages interprétés: Javascript, PHP,Python.
Données

Programme Interpréteur Programme


source cible

Ones Sidhom Messages d'erreur 6


Compilateur Interpréteur
La compilation se fait une fois pour Besoin de l’interpréteur à chaque
toute exécution
Un programme compilé est plus Un programme interprété est plus lent
rapide (instruction par instruction)
L’utilisateur final du programme n’a L’utilisateur final a un accès au code
pas accès au code source source et peut le modifier
Plus tolérant aux erreurs et plus
Moins tolérant aux erreurs
précis

Utilise plus de mémoire Utilise moins de mémoire

Ones Sidhom 7
Phases et structure d’un compilateur
Les différentes phases d’une compilation
On distingue deux catégories :
Phase d’analyse : reconnait les variables, les instructions et les opérateurs et
vérifie la correction syntaxique et sémantique. Elle produit une représentation
intermédiaire.
Phases de synthèse: construit le programme cible a partir de la présentation
intermédiaire.

Phase d’analyse Phase de synthèse

Analyse lexicale Génération de code


Analyse syntaxique intermédiaire
Analyse sémantique Optimisation de code
Génération de code machine
Ones Sidhom 8
Phases et structure d’un compilateur

Décomposer le compilateur en deux parties:

Partie frontale : liée au langage source, mais reste


indépendante le plus possible de la machine.
Partie finale : prend en considération des spécificités du
langage destination, mais reste indépendante de l’entrée.

Ones Sidhom 9
Phases et structure d’un compilateur

La table des
symboles
contient des
informations sur
les différents
symboles et les
Ones Sidhom attributs associes. 10
Phase d'analyse d’un compilateur
1. Analyse lexicale

Programme source Analyse lexicale Suite de lexèmes

Lire les caractères du code source et produit des lexèmes


lexème = mot du langage = {identificateur, mot-clé, littéral, opérateur, ...}

Associer à chaque lexème un token (unité lexicale)


token = type générique d’éléments lexicaux = (nom, valeur d’attribut)
Nom : symbole abstrait qui identifie un type de lexèmes
Valeur d’attribut : une référence vers une entrée de la table de symboles

Alimenter la table des symboles avec les identificateurs et les littéraux


Ones Sidhom Élimine les commentaires, espaces et tabulations (caractères superflus) 11
Phase d'analyse d’un compilateur
Exemple

Position = initiale + vitesse * 60

1. L’identificateur position ;
2. Le symbole d’affectation = ;
3. L’identificateur initiale ;
4. Le signe + ;
5. L’identificateur vitesse;
6. Le signe *;
7. Le nombre 60
Ones Sidhom 12
Phase d'analyse d’un compilateur
Exemple

Position = initiale + vitesse * 60

position: lexème auquel correspond le token <id , 1> avec


id : un symbole modélisant les identificateurs
1 : un pointeur vers une entrée dans la table des symbole. Cette
entrée contient des informations concernant cet identificateur tels que
son nom et son type
= : lexème auquel correspond le token <=>
60: lexème auquel correspond le token <60>

Ones Sidhom 13
Phase d'analyse d’un compilateur
2. Analyse syntaxique

Suite de lexèmes Analyse syntaxique Arbre de syntaxe


abstraite
L'analyse syntaxique doit détecter les erreurs de syntaxe, les
parenthésés non fermées,Oubli ";" à la fin d’une instruction...
Construire à partir des tokens l’arbre de syntaxe abstraite ( Abstract
Syntax Tree (AST))
L’arbre de syntaxe abstraite est généralement utilisé pour représenter la
structure du programme. Il devient alors possible de vérifier que l’arbre
respecte la grammaire du langage.
Grammaire: ensemble de règles décrivant la syntaxe du langage (l’ordre
dans lequel les lexèmes doivent être agencés) 14
Ones Sidhom
Phase d'analyse d’un compilateur
Exemple

Position = initiale + vitesse * 60

Ones Sidhom 15
Phase d'analyse d’un compilateur
3. Analyse sémantique
Arbre de syntaxe Arbre de syntaxe
Analyse sémantique
abstraite abstraite enrichi

Vérifie que l’assemblage des parties du code a un sens.


Vérifie les types et garde des informations les concernant, dans la
table, pour la phase d’analyse.
Opère des conversions de types.
Exemples :
Additionner une chaine et un réel.
Affecter une variable à une constante.
Ones Sidhom 16
Phases d'analyse d’un compilateur
Nous distinguons deux types d’erreurs sémantiques :

sémantiques statiques : contrôlées au moment de la


compilation (variable non déclarée, utilisation des variables
avant leur initialisation, typage incorrect des expressions...)
sémantiques dynamiques : contrôlées au moment de
l’exécution (division par zéro, boucles infinies...)

Ones Sidhom 17
Phase d'analyse d’un compilateur
Exemple Position initiale + vitesse *
= 60

Table des id de variables


Var
N Lexème Type
Position, initiale, vitesse: réel ;
1 Position Réel
2 initiale Réel
3 vitesse Réel
Une Contrainte sémantique doit être vérifiée :
L’opérateur de multiplication doit être appliqué à deux opérandes de
même type (entier, entier) ou (réel, réel)
Pour notre exemple, Vitesse est un réel et 60 est un nombre entier, il
Ones Sidhom
faut alors convertir 60 d’entier vers réel (60.0) 18
Phases d'analyse d’un compilateur
Exemple
Position = initiale + vitesse * 60

Ones Sidhom 19
Phases de synthèse d’un compilateur
1. Génération de code intermédiaire
Arbre de syntaxe Génération de code code
abstraite enrichi intermédiaire intermédiaire

Générer un code, équivalent au code source, en un langage qui:


Facile à produire à partir de l’arbre syntaxique.
Facile à traduire en langage machine
Utilise des opérations standards, des variables temporaires...
Fixe l’ordre du calcul

Ones Sidhom 20
Phases d'analyse d’un compilateur
Code source
Position = initiale + vitesse * 60

Code intermédiaire
T1 = inttofloat (60)

T2 = id3 * T1

T3 = id2 + T2

Ones Sidhom
id1= T3 21
Phases de synthèse d’un compilateur
2. Optimisation de code
Objectifs:
Réduire la taille du code
Améliorer la performance du code
L’optimisation peut se faire à deux niveaux:
Code intermédiaire: optimisation indépendante de la machine
(élimination des calculs inutiles, propagation des constantes,
mettre certaines instructions hors des boucles, ...)
Code objet: optimisation dépendante de la machine (remplacer
certaines instructions par d’autres plus efficaces et plus rapides,
Ones Sidhom
utilisation optimale des boucles, ...) 22
Phases d'analyse d’un compilateur
Code intermédiaire
T1 = inttofloat (60)
T2 = id3 * T1
T3 = id2 + T2
id1= T3

Code optimisé
T1 = id3 * 60.0
id1 = id2 + T1
Ones Sidhom 23
Phases de synthèse d’un compilateur

3. Génération de code
Traduire le code écrit en langage intermédiaire en un code
écrit en langage cible
Si le langage cible est le langage machine, le générateur de
code choisit des emplacements mémoire pour les variables
en leur faisant correspondre un registre ou une adresse
mémoire.

Ones Sidhom 24
Phases parallèles
Gestion de la table des symboles
La table des symboles contient des informations sur les différents
symboles et les attributs associes (type, emplacement mémoire...)
Chaque entrée de la table représente un identificateur du
programme source (créée lors de l’analyse lexicale)
A chaque fois qu’une unité lexicale id est trouvée par l’analyse
lexicale, le lexème associé est inséré dans la table des symboles s’il
n’a pas été déjà inséré et l’analyse lexicale retourne id et un pointeur
vers une entrée de la table des symboles.
Elle permet un accès rapide aux informations liées aux
Ones Sidhom identificateurs. 25
Phases parallèles
Gestion des erreurs
Détecter les erreurs à chaque phase de la compilation
Informer, le plus précisément possible, l’utilisateur
Traiter les erreurs pour que le compilateur puisse continuer et
détecter d’autres erreurs
Certaines erreurs ne peuvent être traités et engendre l’arrêt du
compilateur

Ones Sidhom 26

Vous aimerez peut-être aussi