Académique Documents
Professionnel Documents
Culture Documents
Benyoucef benkhedda
Compilation
Analyse Lexicale
L3 Informatique : SI
Année universitaire
2023/2024
1
Qu’est-ce que la compilation ?
Aujourdhui, les programmes sont écrits en utilisant les langages de haut niveau
Un traducteur est donc necessaire pour passer d'un langage source au langage cible
Compilateur Assembleur
Compilation Assemblage
28/10/2023 2
Interpréteur versus Compilateur
Interpréteur Compilateur
• Analyse les instructions du • Effectue un pré-calcul sur un
programme source, les unes après programme P pour le transformer en
les autres, et exécute chacune d'elles une suite d’instructions P’.
immédiatement.
• Pas de création d'un programme • Création d’un code objet (fichier
objet équivalent. .obj)
28/10/2023 4
Analyse
• Vérifier si le programme source est correct
• Doit être la plus rapide possible, c’est pourquoi on la structure en trois parties.
Analyse
1 3 2 4 1 5 1 Code de l‘unité
Arbre syntaxique
(ident) (assign) (number) (opr) (ident) (opr) (ident)
"val" - 10 - "val" - "i" Valeur de l‘unité
28/10/2023 5
Analyse
Analyse Syntaxique
Statement
Arbre syntaxique
Expression MAJ
Term Statement
Expression
ident = number * ident + ident
Term
inttofloat
28/10/2023 ident = number * ident + ident 6
Synthèse (production)
• Phase de reconstruction de l’expression du langage cible à partir de l’arbre syntaxique
Sythèse
Réservation de l’espace en
mémoire pour des calculs intermédiaires ou Il s’agie de détecter
le passage des arguments d’une procédure des séquences de code cible qui
(Ramasse miettes ou Garbage Collector) peuvent etre optimisées.
28/10/2023 7
Phase parallèle
Phase parallèle
Un modèle
Un modèle est une règle associée à une unité lexicale qui décrit l’ensemble des chaines
du programme qui peuvent correspondre à cette unité lexicale
Exemple : L’unité lexicale IDENT a pour modèle toute suite non vide de caractères et
composée de chiffres, de lettres, ou de symboles, et qui commence par une lettre.
Un lexème (Token)
On appelle lexème toute suite de caractère du programme source qui concorde avec le
modèle d’une unité lexicale.
Exemple de lexèmes pour unité lexicale IDENT : a ; b ; tot1 ; x_1
28/10/2023 Cours Compilation - Analyse Lexicale 9
Analyse Lexicale
Introduction
• La première phase de compilation ;
• Segmenter le texte du programme source en un ensembles de lexèmes (classifiés) que
l’analyseur syntaxique va utiliser.
• Cette interaction est implantée en faisant de l’analyseur lexical un sous programme de
l’analyseur syntaxique, à la réception d’une commande « prochaine unité lexicale »
émanant de l’analyseur syntaxique, l’analyseur lexical lit les caractères d’entrées
jusqu’à ce qu’il puisse identifier la prochaine unité lexicale.
Utilise
Flots de données
Analyse Lexicale
Rappels
Alphabet
Un ensemble fini dont les éléments seront appelés lettres.
Exemple : 0,1 sont les lettres de l’alphabet binaire.
Mot sur un alphabet A
Une suite finie d’éléments de A.
Longueur d’un mot
Un mot de longueur n composé des lettres a1, a2……., an sera noté a1a2 …an,
Mot vide
Le mot vide est noté ε
Concaténation
La concaténation de deux mots m1 et m2 est notée m1m2
Ensemble des mots sur alphabet
Ensemble des mots sur un alphabet A est noté A*
Langage
Un langage sur un alphabet A est un ensemble de mots de A*
28/10/2023 Cours Compilation - Analyse Lexicale 12
Analyse Lexicale
Réalisation
Analyse lexicale
Définition
• Une expression régulière est une formule close permettant de désigner un ensemble de
chaines de caractères (Langage) construites à partir d’un alphabet Σ .
• Une expression régulière est une notation pour décrire un langage régulier.
Soit Σ un alphabet (un ensemble de lettres) :
1. Les éléments de Σ, ε (mot vide) et Ø (langage vide) sont des expressions régulières.
2. Si α et β sont des expressions régulières alors
• (α|β), (αβ) et α* sont des expressions régulières.
• (α|β) représente l’union,
• (αβ) la concaténation
• α * la répétition (Concaténations de α avec lui-même ou la chaîne vide).
• ε est l’élément neutre par rapport à la concaténation
• Ø (ensemble vide de caractère) neutre par rapport à l’union.
Exemple : L’expressions régulière a|b*c dénote l’ensemble des chaînes qui ont soit un
seul a ou un nombre quelconque; ou nul ; de b suivi par un c.
28/10/2023 Cours Compilation - Analyse Lexicale 14
Analyse Lexicale
Description (2)
Propriétés algébriques
Soit r,s et t des expressions régulières.
• r|s = s|r : l'opérateur | (ou) est commutatif.
• r|(s|t) = (r|s)|t : l'opérateur | est associatif.
• (rs)t = r(st) : la concaténation est associative.
• r(s|t)=rs|rt :la concaténation est distributive par rapport au |
• ε r = r ε = r : e est l'élément neutre de la concaténation.
Définition régulière
Une définition régulière est une suite de définitions de la forme:
d1 → r1
d2 → r2
. .
. .
dn → rn
Chaque di est un nom distinct et chaque ri est une expression régulière
sur l’alphabet :
Exemple
La définition régulière d'un identificateur :
Lettre → A|B|...|Z|a|b|...|z
Chiffre → 0|1|2...|9
Id → Lettre(Lettre|Chiffre)*
Théorème
Un langage régulier est reconnu par un automate fini.
• Un langage régulier (et donc une ER) peut être reconnu par un automate d’états finis.
• Donc, pour écrire un analyseur lexical de notre programme source, il suffit de d’écrire
un programme simulant l'automate.
• Lorsqu'une unité lexicale est reconnue, elle est envoyée à l'analyseur syntaxique qui la
traite puis repasse la main à l'analyseur lexical qui lit l'unité lexicale suivante dans le
programme source.
• Et ainsi de suite, jusqu'à tomber sur une erreur ou jusqu'à ce que le programme source
soit traité en entier (et alors on est content….).
28/10/2023 Cours Compilation - Analyse Lexicale 17
Analyse Lexicale
Reconnaissance
Exemple
Reconnaissance des unités lexicales INFEG, DIFF, INF, EGAL, SUPEG, SUP, IDENTIF,
respectivement définies par les expressions régulières <=, <>, <, =, >=, > et
lettre(lettre|chiffre)*.
Exemple:
Exemple:
• L’entrée pour la ligne i et le symbole a, donne l’ensemble des états qui peuvent être atteints à
partir de l’état i avec le symbole a.
Si un langage L est accepté par un automate fini non déterministe (AFN), alors il
existe un automate fini déterministe (AFD) acceptant L.
4. Pour N(r|s) on a :
e0
b e4
a e2
c
e5
e0
b e4
a e2
c
e5
L’AFD correspondant est donné par la figure ci-après, on constate que les états
ne sont pas disjoints (234, 34, 4).
1) Si on peut passer d’un état 1 à l’état 2 avec une transition étiquetée ε, on alimine
cette transition et on ajoute aux transitions de 1 toutes les transition de 2
a 4
ε c
1 2
5
b
3
1) Si on peut passer d’un état 1 à l’état 2 avec une transition étiquetée ε, on alimine
cette transition et on ajoute aux transitions de 1 toutes les transition de 2
a
c 4
a
ε c
1 2
5
b b
3
Exemlple
ε-fermeture(0) = {0 ,1 ,2 ,4 ,7} = A
DTran [E, a] ← B
ε-fermeture(Transiter(E, b)) = ε-fermeture({5}) = C
DTran [E, b] ← C
Après plusieurs itérations, on arrive ainsi à un point où tous les sous-ensembles d’états de
l’AFD sont marqués. A la fin les cinq ensembles d’états construits sont :
A = {0, 1, 2, 4, 7}
B = {1, 2, 3, 4, 6, 7, 8}
C = {1, 2, 4, 5, 6, 7}
D = {1, 2, 4, 5, 6, 7, 9}
E = {1, 2, 4, 5, 6, 7, 10}
• A est l’état initial de l’automate et E son état final.
Résultat
• Un état e est accessible s’il existe une chaine menant à e à partir de l’état initial.
•
q est un état puits s’il n’existe aucun chemin menant de l’état q vers un état final.
2. S’il existe un symbole a et deux états e1 et e2 d’une même classe tels que
Transiter(e1,a) et Transiter(e2,a) n’appartiennent pas à la même classe
(d’arrivée), alors créer une nouvelle classe et séparer e1 et e2. On laisse dans la
même classe tous les états qui donnent un état d’arrivée dans la même classe.
• Edward F. Moore, ‘’Gedenken Experiments on sequential machines’’, Automata studies,Annals of mathematic studies,no.34,
Princeton,N.J.,Princeton University Press,1956,pp.129-153,
28/10/2023 Cours Compilation - Analyse Lexicale 46
Algorithme de reconnaissance d'une entité lexicale:
• A partir d’une chaine d’entrée S terminée par un caractère spécial #, l’algorithme parcoure la
table de transition T pour vérifier si elle appartient au langage ou pas
Algorithme SimulationAFD ;
Debut
Lire (entité) ;
Tc := 1er caractère de l'entité ;
Ec:= état initial;
Tant que ( Ec≠∅ ) et ( ¬Fin entité )
Faire
Ec := T[Ec, Tc] ;
Tc := Tc +1 ;
Fait;
Si Ec=∅ Alors Erreur : entité incorrecte ;
Sinon Si Ec∉F Alors Erreur : entité incorrecte;
Sinon '' entité correcte '' ;
codifier l'entité ;
Insérer l'entité dans la table des symboles;
Fsi;
Fsi;
Fin.
28/10/2023 Cours Compilation - Analyse Lexicale 47
Algorithme de reconnaissance d'une entité lexicale: