1. Ecole Normale Supérieure Kouba Module : Compilation
Département Informatique Année : 2023/2024
1
Chapitre 01 : Analyse lexicale
I. Introduction
L’analyse lexicale consiste à partir d’un programme qui est une suite de caractères
séparés ou non par des blancs à :
1. Spécifier les différentes entités (mots) du langage. On parlera d’entités lexicales.
Parmi ces entités on reconnait :
Les identificateurs
Les mots clés
Les constantes
Les séparateurs
2. Eliminer les blancs, s’ils existent ainsi que les commentaires.
3. Coder les différentes entités lexicales.
4. Construire la table des informations (Table des symboles)
Remarques :
- Les mots clés et les séparateurs représentent une donnée du programme à compiler.
Les identificateurs est les constantes sont données par l’utilisateur.
- Dans certains langages les mots clés ne sont pas réservés, ils peuvent être utilisés
comme identificateurs.
- Certains langages n’acceptent pas que les mots clés soient utilisés en temps
qu’identificateurs. Ils sont alors directement insérés dans la table des symboles.
II. Implémentation d’un analyseur lexical :
Les entités lexicales sont décrites à l’aide des grammaires régulières qui sont
reconnues par des automates déterministes à état finis.
Rappels :
Grammaire Régulière à droite :
Soit G= <T, N, S, P> où :
T : Ensemble des terminaux de la grammaire.
N : Ensemble des non-terminaux de la grammaire.
S : Axiome de la grammaire.
P : Ensemble des règles de production.
On dit qu’une grammaire est régulière à droite si toutes les productions sont de la forme :
Programme Source Scanner Entités Lexicales
2. Ecole Normale Supérieure Kouba Module : Compilation
Département Informatique Année : 2023/2024
2
A→ aB / b, a ϵ T+
, A, B ϵ N
b ϵ T*
Grammaire Régulière à gauche
Une grammaire est régulière à gauche, si toutes les productions sont du type :
A→ Ba / b, a ϵ T+
, A, B ϵ N
b ϵ T*
Automate :
Soit A= <T, N, S, F, I> où :
T : Ensemble des terminaux.
N : Ensemble des états de l’automate.
S : Etat initial de l’automate.
F : Ensemble des états finaux.
I : Ensemble des transitions.
On appelle un automate d’état finis, un système qui fait correspondre à une entité
(chaine ϵ T*) une réponse qui peut prendre l’une des deux valeurs, vrai ou faux.
I(Si, ai) = Sj, , Si, Sj ϵ N, a ϵ T
I(Si, ε) = Si
Définition : Le langage généré par l’automate A est noté par L(A), tel que :
L(A)= { w / S Ⱶ*
w Sk, Sk ϵ F }
Exemple1.
1. Correspondance entre Automate et Grammaire :
a. Passage d'une grammaire régulière à droite à un automate :
On considère une grammaire régulière à droite G = ˂T, N, S, P ˃ et un automate
A = ˂ T', N', S', F', I'˃ où :
T' : Ensemble des terminaux de l'automate, donc T'= T.
N' : Ensemble des états de l'automate : N' = N {Sf}.
S' : Etat initiale de l'automate : S' = S.
F' : Ensemble des états finaux : F' = {Sf}.
I' = Ensemble des transitions :
Si A→ aB Alors I' (A, a) = B ⩝ A, B ϵ N, a ϵ T'
3. Ecole Normale Supérieure Kouba Module : Compilation
Département Informatique Année : 2023/2024
3
Si A→ a Alors I' (A, a) = Sf ⩝ A ϵ N, a ϵ T'
Exemple 2.
b. Passage d'un automate à une grammaire régulière à droite :
Soit A = ˂ T', N', S', F', I'˃ un automate et G = ˂T, N, S, P ˃ une grammaire régulière
à droite, Nous avons :
S = S' (l'axiome est l'état initiale)
T= T'
N = N' - {Sf}
Si I' (A, a) = B et B n’appartient pas à F' alors A → a B
Si I' (A, a) = B et B ϵ F' alors A → a
Exemple 3.
c. Passage d'une grammaire régulière à gauche à un automate :
Soient une grammaire régulière à gauche G = ˂T, N, S, P ˃ et un automate
A = ˂ T', N', S', F', I'˃, alors T'= T.
Lors de la construction de l'automate à partir d'une grammaire régulière à gauche, l'axiome de
la grammaire devient l'état final de l'automate donc :
F' = {S}, On crée donc un état initiale d'où N' = N {S'} avec S' l’état initial.
I' :
Si A → a Alors I' (S', a) = A
Si A → Ba Alors I' (B, a) = A
Exemple 4.
2. Représentation d'un Automate en mémoire :
- On représente un automate par « une matrice de transition T ». Une ligne pour chaque
état de l'automate et une colonne pour chaque caractère (terminal de l'automate),
- Une constante pour l'état initiale
- Un vecteur d'états finaux
Exemple 5.
4. Ecole Normale Supérieure Kouba Module : Compilation
Département Informatique Année : 2023/2024
4
3. Algorithme de simulation (Reconnaissance d’une entité lexicale)
En entrée, nous disposons d’une entité lexicale, nous utilisons l’automate afin de
vérifier si elle appartient au langage ou pas.
Exemple 6.
Début
Lire(entité) ;
tc← 1er
caractère de l’entité ;
ec← l’état initial ;
Tant que (ec ≠ϕ) et non fin de l’entité
Faire
ec := T[ec, tc] ; /* T la matrice des transitions */
tc← tc+1 ;
Fait
Si (ec =ϕ) alors l’entité n’appartient pas au langage
Sinon
Si ec n’appartient pas à F alors l’entité n’appartient pas au langage
Sinon « l’entité ϵ au langage »
Codifier et insérer l’entité dans la table des symboles
Fin si
Fin si
Fin