Vous êtes sur la page 1sur 132

UNIVERSITE HASSAN II

FACULTÉ DES SCIENCES AIN CHOC CASABLANCA


SMI

M28 : Compilation

Session Automne

Pr Errais Mohammed
mahammed.errais@gmail.com
Organisation du cours

1 Introduction

2 Analyse lexicale

Analyse Syntaxique
3

Analyse sémantique
4

2
Objectifs du cours

 Comprendre le fonctionnement d’un


compilateur
Maitriser les étapes et les principes d’un
compilateur
Apprendre à manipuler correctement les
compilateurs
Introduire les notions de base de la théorie
des langages

3
Objectifs du cours

Initiation aux principes de base à la


réalisation des compilateurs : analyse
lexicale, analyse syntaxique

Comprendre les outils fondamentaux


utilisés pour effectuer ces analyses :
automates, langages rationnels,
grammaires

4
Organisation du cours

 Cours magistrale : Aspects théoriques


(~50%)

 Travaux dirigées : Exercices sur les


automates, les grammaires ( ~30%)

Travaux Pratiques : Laboratoire sur la


mise en place des compilateur ( ~20%)

5
Organisation du cours
Contenu des modules
Automates finis et expression régulière.
Grammaires.
Analyse lexicale.
Analyse syntaxique.
Analyse sémantique.

6
Organisation du cours
Note du module

Examen de fin de semestre 75%


Contrôles continus et TP 25%

7
Organisation du cours

1 Introduction

2 Analyse lexicale

Analyse Syntaxique
3

Analyse sémantique
4

8
Introduction – Plan de cours

I. Introduction
1. Introduction générale
2. Qu’est ce que la compilation?
3. Pourquoi ce cours ?
4. Structure d’un compilateur

9
Introduction
Introduction générale
L’exécution des programmes directement sur
les machines ( processus mémoire, circuits
…) nécessite l’utilisation des langages de bas
niveaux  Assembleur, codage binaire (0 …1 )

Très difficile à gérer par le programmeur

Comment faire le lien entre les deux


niveaux (haut /bas) ?
10
Introduction
Introduction générale

C
Maple
Java
Python

11
Introduction
Introduction générale
Un interprète prend en entrée un
programme P écrit dans le langage L et
des données et produit en sortie un
résultat correspondant à l'exécution de P
avec les données.

12
Introduction
Introduction générale
Contrairement à un interpréteur, le
compilateur donne comme résultat un autre
programme écrit dans un autre langage.

13
Introduction
Qu’est ce que la compilation?

Tout programmeur utilise un outil essentiel


à la réalisation des programmes
informatiques Le compilateur.

Définition :
Un compilateur est un logiciel particulier
qui traduit un programme écrit dans un
langage de haut niveau par le
programmeur en instructions exécutables

14
Introduction
Qu’est ce que la compilation?

Emacs, bloc note

L’outil gcc

15
Introduction
Pourquoi ce cours?
Il est important de comprendre le
fonctionnement d’un compilateur pour :
 La compilation peut être utilisé pour la
transformation d’un programme d’un langage de
haut nivaux à un autre (C à pascal).
 Besoin de retrouver un code à partir d’un
exécutable
 La compréhension du fonctionnement du
compilateur permet d’implémenter d’une manière
plus efficace.

16
Introduction – Plan de cours

I. Introduction
1. Introduction générale
2. Qu’est ce que la compilation?
3. Pourquoi ce cours ?
4. Structure d’un compilateur

17
Introduction
Structure d’un compilateur
La sortie d’un compilateur varie selon
l’application :
 Un programme exécutable pour un processus
physique (processeur, mémoire)
 Fichier de code pour une VM( exemple JAVA)
 Code abstrait destiné à un outil particulier.

18
Introduction
Structure d’un compilateur
La compilation se décompose en deux phases :

Phase d’analyse : Phase de synthèse :


Permet de reconnaitre Permet de produire le
les variables, les programme cible.
instructions et élaborer
la structure syntaxique.

19
Introduction
Structure d’un compilateur

20
Introduction
Structure d’un compilateur
Analyse lexicale
Permet de reconnaitre les types des caractères
lu par le compilateur.
 Les caractères sont exprimés par des unités lexicales
( identificateur, constante, opérateur ….)
Les objectifs de cette étape :
 Eliminer les caractères superflu (espaces,
commentaires ..)
 Identifier les symbole  les unités lexicales

21
Introduction
Structure d’un compilateur
Exemple d’analyse
lexical d’une
l’expression :

22
Introduction
Structure d’un compilateur
Question :
Donner le résultat de l’analyse lexicale de
l’expression suivante :

23
Introduction
Structure d’un compilateur

24
Introduction
Structure d’un compilateur
Analyse syntaxique
Permet de vérifier la grammaire des unités
lexicales  est ce que les unités sont écrites
dans le bon ordre comme défini dans le langage
source?

Le résultat de cette étape est le regroupement


des unités lexicales en structure grammaticale
25
Introduction
Structure d’un compilateur

26
Introduction
Structure d’un compilateur
Analyse contextuelle
Dite aussi Analyse sémantique permet de
vérifier si la structure du texte est correcte  Est
ce qu’une unité lexicale est correcte?
 Les identificateurs sont déclarés
 Les opérantes sont ils compatible ( additionner un
float à un entier ) ?
 Les arguments des fonctions sont correctes?

Dans cette étape le compilateur vérifie le sens


des phrases
27
Introduction
Structure d’un compilateur

Code source analysé

Phase de synthèse

28
Introduction
Structure d’un compilateur
Génération de code intermédiaire et
optimisation
 Permet de transformer le code source au
programme cible ( généralement assembleur).
 L’optimisation consiste à adapter le code cible
au matérielle de la machine courante ( adapté
les adresses, éliminer les instructions inutiles.

Le résultat de cette étape est le programme


cible.
29
Introduction
Structure d’un compilateur
 En parallèle avec les phase d’analyse et
de synthèse il existe une phase
supplémentaire dite phase parallèle.
La phase parallèle comporte deux étapes:

Gestion de la table Gestion des


des symboles erreurs

30
Introduction
Structure d’un compilateur
Gestion de la table des
symboles :
 La table des symboles est Exemple :
une structure qui sert à
stocker les identificateurs.
 Le remplissage de la table
est fait dans la phase
d’analyse.
 Les informations stockés
dans la table sont
essentielles pour l’analyse
lexicale et syntaxique.
31
Introduction
Structure d’un compilateur
Gestion des erreurs
Permet d’identifier l’erreur de la manière la
plus précise possible.

Un compilateur qui se contente d’afficher


« syntax error » n’apporte pas d’aide lors
de la mise en point.

32
Introduction
Structure d’un compilateur: Exemple

33
Questions

1. Donner un exemple d’erreurs possibles


lors de l’analyse lexicale.
2. Pour l’expression suivante : if y<1.
donner le résultat de la phase d’analyse.
3. Proposer une définition d’un compilateur.
4. C’est quoi la différence entre un
interprète et un compilateur. Pour chaque
type donner un exemple de langage.
5. C’est quoi le compilateur le plus répondu
pour le langage C?
34
Questions

1. Citer les différentes phase d’un


compilateur?
2. C’est quoi le rôle de la table de symbole?
3. Expliquer la différence entre l’analyse
syntaxique et l’analyse sémantique?
4. C’est quoi l’objectif de l’étape
d’optimisation du code?
5. Donner le résultat de l’analyse lexicale.

35
Organisation du cours

1 Introduction

2 Analyse lexicale

Analyse Syntaxique
3

Analyse sémantique
4

36
Pan de la partie

I. Introduction
II. Analyseur lexicale
1. C’est quoi un analyseur lexicale ?
2. Théorie des langages
3. Mise en ouvre d’un analyseur lexicale

37
Analyseur lexicale
C’est quoi ?
Le programme source se compose de flot de
caractère.
Le rôle principale de l’analyseur lexical est de
reconnaitre dans ce flot « les unités lexicales ».
 Les unités lexicales => les mots clés du langage
que le compilateur doit reconnaitre. Les principaux
unités dans un langages sont :
• Opérateurs arithmétiques : +, -, * , /
• Opérateurs logiques : < , > , ==
• Les mots clés : if, where , while
• Les constantes , les numéros

38
Analyseur lexicale
C’est quoi ?
Généralement une unité lexicale reconnue
dans le texte source distingue quatre notions:
 L’unité lexicale représentée par un code
conventionnel ( PLUS, EGAL, PLUS PLUS …)
 « le lexème »  la chaine de caractère qui
correspond à une unité lexicale exemple « + est
PLUS ou < est INF … »
 Un attribut qui dépend de l’unité lexicale en
question  pour un nombre il s’agit de ca valeur,
pour un identificateur il s’agit d’un envoi à la table
des symboles

39
Analyseur lexicale
C’est quoi ?
Généralement une unité lexicale reconnue
dans le texte source distingue quatre notions –
suite :
 Le modèle qui permet de spécifier l’unité lexicale
 plusieurs techniques formelles existent pour
décrire un modèle.

Pr exemple le modèle sert à identifier :


 Comment décrire l’ensemble des chiffres ?
 Comment décrire à l’analyseur lexical l’ensemble
des identificateurs ?
40
Analyseur lexicale
C’est quoi ?
La tache principale de l’analyseur est la
reconnaissance des unités lexicales. Pour cela
il faut répondre à deux questions importantes :
1. Comment définir le modèle qui décrit les unités
lexicales?
2. Quelle structure utilisée pour reconnaitre les mots du
programme source à base du modèle ?

Pour répondre à ces questions l’analyse lexicale


utilise les techniques et les concepts de la
théorie des langages.

41
Pan de la partie

I. Introduction
II. Analyseur lexicale
1. C’est quoi un analyseur lexicale ?
2. Théorie des langage
1. Généralités
2. Expressions régulières
3. automates
3. Mise en ouvre d’un analyseur lexicale

42
Théorie des langages
Généralités
L'objectif de cette section est d'étudier les
notions de théorie des langages qui sont
utiles en compilation.
 Les notions de vocabulaire, de chaîne sur un
vocabulaire et de langage sur un vocabulaire,
ainsi que diverses opérations

43
Théorie des langages
Généralités- Langage sur un vocabulaire

Définition : Vocabulaire / Alphabet


• Un vocabulaire V est un ensemble fini, dont les éléments
sont appelés « caractères » ou « symboles ».
Définition : Chaîne sur un vocabulaire V
• Une chaîne ou un mot sur un vocabulaire V est une suite
finie a1 a2 ... an d'éléments de V. La longueur de la
chaîne, notée |a1 a2 ... an|, est n.
• une chaîne vide, notée , dont la longueur est 0.
Exemple
 aba est une chaîne sur le vocabulaire {a, b}, dont la
longueur est |aba| = 3.

44
Théorie des langages
Généralités- Langage sur un vocabulaire

Définition : Concaténation de deux chaînes sur V


• La concaténation de deux chaînes x et y sur V est la
chaîne x · y = x y, obtenue en mettant x et y bout à
bout.
• Formellement, soit x = a1 a2 ... an, y = b1 b2 ... bp.
Alors x · y = x y = c1 c2 ... cn+p, avec ci = ai pour 1 i n et
cn+i = bi pour 1 i p.
• Pour toute chaîne x, on note x^n la chaîne x · x · ...
· x (n fois).
Exemple
• La concaténation de a b a et a est la chaîne a b a a.

45
Théorie des langages
Généralités- Langage sur un vocabulaire

Propriété :
L'ensemble des chaînes sur V satisfait les
propriétés suivantes :
 La chaîne vide est élément neutre pour la
concaténation.
Pour toute chaîne de V*, on a : x · = · x = x.

 La concaténation des chaînes est associative.


Pour toutes chaînes x, y, z de V*, on a :
(x · y) · z = x · (y · z). V*, · , est donc un monoïde.

46
Théorie des langages
Généralités- Langage sur un vocabulaire
Définition : Préfixe.
• Soit deux chaînes x et y sur V. La chaîne x est préfixe de la
chaîne y si et seulement si il existe une chaîne z telle que x · z =
y.
• Exemple  la chaîne a b b a pour préfixes , a, a b et a b b.
Définition : Suffixe.
• Soit deux chaînes x et y sur V. La chaîne x est suffixe de la chaîne y
si et seulement si il existe une chaîne z telle que z · x = y.
• Exemple la chaîne a b b a pour suffixes , b, b b et a b b.
Définition : Sous-chaîne.
• Soit deux chaînes x et y sur V. La chaîne x est sous-chaîne
de la chaîne y si et seulement si il existe deux chaînes z et z'
telles que z · x · z'= y.
• Exemple la chaîne a b b a pour sous-chaînes , a, b, a b, b
b et a b b.
47
Théorie des langages
Généralités- Langage sur un vocabulaire

Définition : Langage.
On appelle langage sur un vocabulaire V un sous-
ensemble L de V*.
Exemples de langages
• les langages de programmation
• l'ensemble des mots de la langue française est un
langage sur le vocabulaire constitué des lettre de
l'alphabet
• l'ensemble des expressions arithmétiques est un
langage sur {num , +, - , *, /, ( , )}.

48
Théorie des langages
Généralités- Langage sur un vocabulaire

Les langages admettent plusieurs


opérations :
• L’intersection : Soit deux langages L1 et L2 sur un
vocabulaire V. L'intersection des langages L1 et L2 est
le langage L = L1 ∩ L2 = {w V* ; w L1 et w L2}.

• La réunion :Soit deux langages L1 et L2 sur un


vocabulaire V. La réunion des
langages L1 et L2 est le langage L = L1 + L2 =
L1 L2 = {w V* ; w L1 ou w L2}.

49
Théorie des langages
Généralités- Langage sur un vocabulaire

Question :
1. Donner la différence entre une sous
chaine et un suffixe ?
2. Citer des exemple de langage ?
3. Comment peut – on définir un langage?
Exercice :
1. Prouver que bc est un suffixe de la
chaine abc
2. Est-ce que ab est une sous chaine de
abc? Prouvez le.
50
Pan de la partie

I. Introduction
II. Analyseur lexicale
1. C’est quoi un analyseur lexicale ?
2. Théorie des langage
1. Généralités
2. Expressions régulières
3. automates
3. Mise en ouvre d’un analyseur lexicale

51
Théorie des langages
Expression régulière

Définition : Expression régulière


Soit un vocabulaire V. L'ensemble des
expressions régulières sur V est défini de la façon
suivante :
• Pour tout élément a de V, a est une expression
régulière ;
• si x et y sont des expressions régulières, alors x + y
est une expression régulière ;
• si x et y sont des expressions régulières, alors x · y
est une expression régulière ;
• si x est une expression régulière, alors x* est une
expression régulière.
52
Théorie des langages
Expression régulière

Les expressions peuvent être parenthèses.


La priorité des opérateurs est la suivante :
* est prioritaire sur ·
L’opérateur . Est prioritaire sur +.

Exemple :
L’opérateur peut être laissé implicite

53
Théorie des langages
Expression régulière

Une expression régulière définit un langage :


 Pour tout a V, l'expression régulière a définit le
langage { a } ;
 soit e1 et e2 deux expressions régulières, définissant
les langages L1 et L2. Alors l'expression régulière
e1 + e2 définit le langage L1 + L2.
 soit e1 et e2 deux expressions régulières, définissant
les langages L1 et L2. Alors l'expression régulière
e1 · e2 définit le langage L1 · L2.
 soit e une expression régulière, définissant le langage
L. Alors l'expression régulière e* définit le langage L*.

54
Théorie des langages
Généralités- Expression régulière

Il existe aussi les expressions régulières dérivées:


 x+ = x · x*. Si x définit le langage L, alors x+ définit le
langage L+.
Exemple d’expressions régulières
 L'expression régulière (0 + 1)* définit le langage des
constantes binaires.
 L'expression régulière 0 + 1(0 + 1)* définit le langage
des constantes binaires sans 0 inutile en tête.
 Lettre = A + B + ... + Z + a + b + ... + z
 Chiffre = 0 + 1 + ...+ 9

55
Théorie des langages
Spécification des expression régulière
Soit L = {A,B,...,Z} U {a,b,...,z} et C = {0,1,...9}
deux langages.
A partir de L et C, nous pouvons produire
d'autres langages.
 L U C : ensemble des lettres et chiffres,
 LC : ensemble des chaînes constituées d'une lettre
suivie d'un chiffre,
 : ensemble des chaînes constituées de 4 lettres,
 : ensemble des entiers naturels, -
 L(LUC)* : ensemble des chaînes constituées d'une
lettre suivie d'une chaîne de lettres et de chiffres ou
d'une chaîne vide.
56
Théorie des langages
Spécification des expression régulière
Exemple:
Un nombre entier non signé (en C) est
une chaîne constituée d'une suite de
chiffres, au moins un.
L'expression régulière associée est:
+ est un opérateur unaire post-fixe qui
veut dire un ou plusieurs fois.

57
Théorie des langages
Spécification des expression régulière
Soit r et s deux expressions régulières qui
dénotent les langages L(r) et L(s), alors:
 (r) | (s) est une expression régulière qui
dénote (L(r)) U (L(s)).
 (r)(s) dénote (L(r))(L(s)).
 (r)* dénote (L(r))*.

Les langages dénotés par les expressions


régulières sont appelés langages réguliers
58
Théorie des langages
Spécification des expression régulière
Définition:
Si deux expressions r et s engendrent le
même langage, on dit qu'elles sont
équivalentes et on écrit: r=s.
Exemple: (a|b)= (b|a)
Question : Donner les mots appartenant
au langage L(r).

59
Théorie des langages
Spécification des expression régulière
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 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 : ε est l'élément neutre de la
concaténation.

60
Théorie des langages
Spécification des expression régulière
Notation
* est un opérateur unaire poste-fixe qui
veut dire zéro, un ou plusieurs fois.
 + est un opérateur unaire poste-fixe qui
veut dire un ou plusieurs fois.
r+ = r r* = r*r r* = r+|ε
? est un opérateur unaire poste-fixe qui
veut dire zéro ou une fois: r? = r|ε
[a-z] désigne un élément (une lettre) de
cette classe. [a-z] = a|b|c...|z
61
Théorie des langages
Spécification des expression régulière
Les priorités des opérateurs
 L' opérateur * a la plus haute priorité et est
associatif à gauche.
 Les opérateurs + et ? ont la même priorité et
la même associativité que *.
 La concaténation a la deuxième priorité et est
associative à gauche.
 Le | a la plus faible priorité et est associatif à
gauche.

(a)|((b)*(c)) est équivalente à a|b*c


62
Théorie des langages
Expression régulière- Utilisation

Les expressions régulières sont utilisés


dans plusieurs domaine en informatique :
 La recherche des mots clés
 Les expressions POSIX sous linux pour la
recherche dans les fichiers ( grep et sed)
 Dans les langages de programmation ( PHP
et JAVA).

63
Théorie des langages
Expression régulière

Questions :
1. Proposer une définition de l’expression régulière
2. C’est quoi la différence entre un Vocabulaire et un
langage?
3. Donner les propriétés algébriques des
expressions régulières.
4. Donner les propriétés de la concaténations
5. C’est quoi l’ intérêt de l’utilisation des expressions
régulières dans le processus de compilation.

64
Théorie des langages
Expression régulière
Exercice :
1. Proposer l’expression régulière des mots qui se
terminent par aba sur le vocabulaire V= {a,b}
2. Proposer l’expression régulière des mots qui
commencent par a sur le vocabulaire V=
{a,b,c}.
3. Proposer l’expression régulières des chiffres
signés.
4. L’ER du langage L des mots binaires.
5. L’ER du langage L des identificateurs.
6. L’ER des chiffres non signés acceptant la
division sur 2.
65
Pan de la partie

I. Introduction
II. Analyseur lexicale
1. C’est quoi un analyseur lexicale ?
2. Théorie des langage
1. Généralités
2. Expressions régulières
3. Automate
3. Mise en ouvre d’un analyseur lexicale

66
Théorie des langages
Automates- Introduction

La notion d'automate a été introduite pour


formaliser le concept d'algorithme et celui de
calculabilité
Les automates sont définis sur la base de la
machine de Turing.
 C’est une structure mathématique utilisé dans plusieurs
domaines – définir la stabilité des systèmes , le traçage
de l’évolution des phénomènes …)
 Dans cette section du cours nous allons nous
intéresser à la structure des automates et à leur
utilisation dans le cadre de la théorie des langages.

67
Théorie des langages
Automates- Introduction
 En 1936, Alan Turing (1912-1954), présente sa
machine (appelée depuis machine de Turing). Elle est
composée :
 d'une unité centrale se trouvant dans un état qi, pris parmi
l'ensemble fini de ses états internes, noté Q={q1, q2, ..., qn}. Parmi
les états, on distingue un état initial (état au lancement de la
machine) et des états finaux (états de la machine en situation de
terminaison)
 d'un ruban de taille illimitée divisé en cases, contenant au départ
les données à traiter, et à l'arrivée les résultats des calculs
 d'une tête de lecture-écriture qui assure la communication entre
l'unité centrale et le ruban

68
Théorie des langages
Automates- Introduction

69
Théorie des langages
Automates- Introduction – M T
Le rôle de la machine est d’identifier le
comportement d’un programme ( la figure)
 Pour ce faire la machine identifie pour un
programme et pour un état qi et pour un symbole
aj situé devant la tête de lecture-écriture, le
nouvel état dans lequel passe la machine.

Si l'état courant est un état final alors l'exécution


est réussie et le programme s'est déroulé
normalement. Le cas contraire est une situation
d'échec.
70
Théorie des langages
Automates- Introduction – M T
Les différents types d'automates sont des
cas particuliers de la machine de Turing.
 Parmi ceux-ci, on trouve les automates :
linéairement bornés, à pile, finis...

Les automates finis sont des machines de


Turing très spécifiques. Leurs
caractéristiques, leur manipulation et leurs
applications sont présentés en détail dans la
suite de la section.
71
Théorie des langages
Automates- AFN
Définition théorique

Un automate fini, très souvent appelé


"automate d'état fini" , ("finite-state machine",
"finite automaton", est une machine de Turing
dont le ruban se déplace toujours vers la
gauche et case par case.

72
Théorie des langages
Automates- AFN
Définition mathématique
Un automate fini est un quintuple A = (Q,V,I,F) où
 Q est un ensemble fini dont les éléments sont
appelés états ;
 V est un vocabulaire ;
 I est l'ensemble des états initiaux ;
 F est l'ensemble des états terminaux (ou finaux) ;
 appartient à Q × (V × { }) × Q est la relation de
transition.

73
Théorie des langages
Automates- AFN
On définit un automate A1 comme suit:
 Q={p, q}
 V={a, b}
 I={p}
 F={q}
 ={(p, a, q), (q, b, q)}

La notation graphique de A1 est :

74
Théorie des langages
Automates- AFN
Exercice
Donner la représentation graphique de
l’automate à état fini défini par :
 Q={1, 2,3}
 V={a, b,c}
 I={1}
 F={3}
 ={(1, a, 2), (1,b,1),(2, b, 3), (3,c,3) }

75
Théorie des langages
Automates- AFN
Définition : Chemin, trace
Un chemin de l'automate A de
longueur n est une suite de transitions
• (r0, a1, r1), (r1, a2, r2), ... (rn-1, an, rn)
On dit que ce chemin mène de l'état r0 à
l'état rn avec la trace a1 a2 ... an.

Par convention, pour tout état p, le chemin


de longueur 0 mène de p à p avec la
trace .
76
Théorie des langages
Automates- AFN
Définition Mot reconnu par un automate.
Un mot x appartient à
V* est reconnu (ou accepté) par un automate si
et seulement si il existe un chemin de
trace x menant d'un état initial à un état final.

Exemple
Les mots a, a b, a b b sont reconnus par
l'automate A1.

77
Théorie des langages
Automates- AFN
Définition : Langage reconnu par un automate.
L'ensemble des chaînes reconnues par un
automate est appelé langage reconnu par
l'automate.

Exemple
Le langage reconnu par l'automate A1 est le
langage défini par l'expression régulière a b*.

78
Théorie des langages
Automates- AFN
Soit l’automate suivant :

1. Est-ce que les mots suivant sont reconnu


par l’automate : 010 , 01, 01222 ?
2. Donner l’ensemble Q, F et I.
3. Proposer l’expression régulière du langage
que l’automate reconnait.

79
Théorie des langages
Automates- AFN
Exercice
On veut définir l’automate définissant les
chiffres binaires
a. Identifier le vocabulaire
b. Proposer une expression régulière
c. Proposer un automate a état fini.

80
Théorie des langages
Automates- AFN
Définition : Automates équivalents
 Deux automates sont équivalents si et seulement si ils ont
le même vocabulaire et reconnaissent le même langage.
Exemple
 Le langage défini par l'expression régulière num ( ('+' + '-
' ) num )* est reconnu par l'automate suivant.

81
Théorie des langages
Automates- AFN
Il existe plusieurs sous types des
automates à état fini :
 Automate avec états inaccessibles
 Automate fini déterministe /non déterministe

?
82
Théorie des langages
AFN- sans état inaccessible
 Soit l’automate fini A = (Q,V,I,F) .
Définition : État accessible.
 On dit Un état p de l'automate A est accessible si et
seulement si il existe un chemin d'un état initial
vers p.
 Un état inaccessible est un état qui n'est pas
accessible.

83
Théorie des langages
AFN- sans état inaccessible
Théorème (1)
 Soit R appartient à Q l'ensemble des états accessibles
de A. Soit B l'automate obtenu à partir de A en
supprimant les états inaccessibles .
Alors les automates A et B sont équivalents.

Exemple

84
Théorie des langages
AFN- sans -transition
Définition
 Une -transition est une transition de la forme (p, ,
q).
Théorème (2)
 Si L est un langage sur V reconnu par un automate
fini, alors L est un langage sur V reconnu par un
automate sans -transition.

85
Théorie des langages
AF- déterministe
Définition
 Un automate A = (Q, V, I, F, ) est déterministe si et
seulement si
 I contient un seul élément
 A n'a pas d‘ -transition
 p appartient à Q, a appartient à V, il existe un unique
état q appartient à Q tel que ( p, a, q) . Cet unique état
est noté (p, a).

Un automate déterministe ne comporte pas des états


inaccessibles et des états -transitions et à partir d’un état
p et un alphabet a il existe une seule possibilité.

86
Théorie des langages
AF- déterministe
Exemple

 Il y a deux transitions étiquetées par a qui partent de


l'état q0.

L’automate n’est pas déterministe

87
Théorie des langages
AF- déterministe
Les automate déterministe sont plus facile à
implémenter et à manipuler que les automates non
déterministes.
D’après les théorème (1) et (2) pour tout automate
non déterministe il existe un automate déterministe
équivalent.

Comment peut-on retrouver un automate


déterministe à partir d’un automate non
déterministe ?
88
Théorie des langages
AF- déterministe
Après avoir introduit les automates finis non
déterministes (AFN) et déterministes (AFD) nous
allons tout d'abord présenter un algorithme
permettant de passer d'un AFN à un AFD.

Il en existe plusieurs, plus ou moins performants.


Nous ne présenterons dans ce cours qu'un seul
algorithme qui nous semble suffisamment simple
pour avoir une idée de la méthode abordée.

89
Théorie des langages
AF- déterministe
 La première étape consiste à enlever les ε-
transitions.
 A tout AFN comportant des ε-transitions, il est
possible de faire correspondre un AFN équivalent
théorème (1), c'est-à-dire reconnaissant le même
langage, sans ε-transition.

La première étape consiste à enlever les états


inaccessibles et les états ε-transitions.

90
Théorie des langages
AF- déterministe
Comment enlever les ε-transition ?
A tout automate T=(A, Q, I, F, μ) comportant des
ε-transitions existe un automate T'=(A, Q, I, F', ε-
fermeture μ) équivalent, sans ε-transition, avec
F' = F ∪ {I} s'il existe une chaîne de ε-
transitions entre I et un état q ∈ F et F' = F sinon.

Comment enlever les états inaccessibles ?


Il suffit de les enlever de l’automate.

91
Théorie des langages
AF- déterministe
Passage d’un AFN à un AFD
 Nous allons présenter dans ce cours une méthode
simple appelée la méthode par construction des sous-
ensembles.
 L'idée générale sur laquelle se base la transformation d'un
AFN en AFD est que chaque état de l'AFD correspond à un
ensemble d'états de l'AFN.
 Un état courant de l'AFD correspond à l'ensemble des états
possibles de l'AFN qui sont atteints avec la même chaîne
d'entrée.
 L’AFD "simule" le parcours "en parallèle" des états pour un
mot donné

92
Théorie des langages
AFN- déterministe
Exemple
 Soit l’automate suivant :

 La construction de l'AFD équivalent commence par la


détermination de l'état initial
 Celui-ci est construit à partir de l'ε-fermeture de tous
les états initiaux. Donc ici, I'={0}. A partir de là, on
construit la table des transitions.

93
Théorie des langages
AF- déterministe
 Puis, on regarde vers quels états l'automate se trouve
pour chacun des symboles de l'alphabet à partir de I‘

 Puis on fait la même chose pour chacun des états


pas encore traités

C contient l'état 2 qui


est final dans l'automate
de départ. Donc C est un
état final dans l'AFD
obtenu.
94
Théorie des langages
AF- déterministe
 on fait la même chose pour chacun des états pas
encore traités

 Finalement, le tableau est rempli, l'automate est


terminé. On obtient l'automate suivant :

95
Théorie des langages
AF- déterministe
Exemple 2
 Soit l’automate suivant :

 Phase 1 : Phase 2

96
Théorie des langages
AF- déterministe
 Phase 3

 Phase 4

97
Théorie des langages
AF- déterministe
 Phase 5

 L’automate obtenu est :

C est un état
inaccessible

98
Théorie des langages
AF- déterministe
L’automate déterministe équivalent est :

99
Théorie des langages
Automates- AFD
Exercice
Soit le vocabulaire suivant V={a,b,c}
a. Proposer une expression régulière du
langage des mots qui se terminent par
« ab »
b. Proposer un automate a état fini.
c. En utilisant l’algorithme de construction des
sous-ensembles proposer un automate fini
déterministe équivalent.

100
Théorie des langages
AFD- Minimal
Certains AFDs possèdent un nombre d'états et
de transitions important  typiquement, cette
situation a lieu lorsque l'automate est construit à
l'aide d'algorithmes automatiques.
 La transformation d’un AFN à un AFD.
Pour des raisons d’optimisation il est intéressant
d'essayer de minimiser un AFD.

Comment retrouver un automate minimal


d’un AFD?
101
Théorie des langages
AFD- Minimal
Théorème
Pour tout automate fini déterministe il existe un
automate fini déterministe minimal

Procédure
Il existe de nombreuses stratégies pour
minimiser un AFD.
Dans ce cours nous verrons l’algorithme basé
sur les classes d'équivalence d'états

102
Théorie des langages
AFD- Minimal
Procédure
 L'algorithme de minimisation du nombre d'états d'un
AFD fonctionne en déterminant tous les groupes
d'états qui peuvent être distingués par une chaîne
d'entrée.
 Chaque groupe d'états in distinguables est alors
fusionné en un état unique
 L'algorithme travaille en mémorisant et en raffinant
une partition de l'ensemble des états.
 Chaque groupe d'états à l'intérieur de la partition
correspond aux états qui n'ont pas encore été
distingués les uns des autres
103
Théorie des langages
AFD- Minimal
Procédure – suite
 Initialement, la partition consiste à former deux
groupes : les états d'acceptation et les autres.
 L'étape fondamentale prend un groupe d'états et un
symbole puis étudie les transitions de ces états sur
ce symbole
 Si ces transitions conduisent à des états qui
tombent dans au moins deux groupes différents de
la partition courante, alors on doit diviser ce groupe
 Ce processus de division est répété jusqu'à ce
qu'aucun groupe n'ait plus besoin d'être divisé

104
Théorie des langages
AFD- Minimal
Exemple
 On suppose l’automate AFD suivant :

 la phase d'initialisation permet d'obtenir la table de


transition suivante
A et C ne sont pas des état
finaux. Ils sont donc dans le
même ensemble (noté I). *
De même, B et C sont finaux.
Ils sont donc dans le même
ensemble (noté II).

105
Théorie des langages
AFD- Minimal
Exemple – suite
 pour chaque couple (état, symbole), on regarde vers
quel ensemble nous mène la transition de l'automate
(si elle existe, sinon on ne met rien).

Deux états sont


dans un même
ensemble s'ils
étaient déjà dans
le même ensemble
et si les transitions
mènent dans les
mêmes ensembles
106
Théorie des langages
AFD- Minimal
Exemple – suite
 Dans cet exemple, B et D se comportent exactement
de la même manière, donc ils restent ensemble. Par
contre, A et C qui faisaient partie du même ensemble
se comportent différemment sur le symbole "a". Par
conséquent, l'ensemble noté I se divise en deux.
Nous obtenons donc :

107
Théorie des langages
AFD- Minimal
Exemple – suite
 La situation courante (la ligne Bilan 1) est différente
que la situation de départ. Donc il faut recommencer !

La ligne "Bilan 2" est


identique à la ligne
"Bilan 1". Par
conséquent, dans
chacun des
ensembles restants,
les états ne sont pas
distinguables

108
Théorie des langages
AFD- Minimal
Exemple - suite
 Nous pouvons donc construire le nouvel automate en
associant un état à chaque ensemble.

 Les transitions sont indiquées par le tableau. L'état initial


est celui contenant l'état initial de l'automate de départ.
Les états finaux sont les états dont l'ensemble
correspondant contient au moins un état final

109
Théorie des langages
AFD- Minimal
Exemple - suite
 Cependant, l'algorithme n'est pas encore terminé ! Pour
l'instant, nous avons "fusionné" les états in distinguables.
Il faut maintenant supprimer tous les états inutiles
restant.
 Dans notre exemple, l'état III est un état stérile, donc
inutile. Il faut donc le supprimer

 L’automate minimal est :

110
Théorie des langages
AFD- Minimal
Exercice
Donner l’automate minimal équivalent à
l’automate suivant :

Solution : l’automate est minimal car il y a


autant de classe que d’état

111
Théorie des langages
AFD- Minimal
Propriétés :
1. Pour vérifier si un automate déterministe est minimal, il
suffit d'appliquer l'algorithme de minimisation. Ensuite, si
les deux automates sont identiques (à la numérotation
des états près) alors l'automate d'origine est minimal.

2. Deux automates finis sont équivalents s'ils reconnaissent


le même langage.

3. Pour comparer deux automates, il suffit, pour chacun


d'eux, de calculer l'automate déterministe minimal
équivalent et de comparer ces deux automates.

112
Théorie des langages
AFD- Minimal

Exercice
Soit l’automate :

a. En utilisant l’algorithme de construction des


sous-ensembles proposer un automate fini
déterministe équivalent.
b. Minimiser l’automate déterministe.

113
Pan de la partie

I. Introduction
II. Analyseur lexicale
1. C’est quoi un analyseur lexicale ?
2. Théorie des langage
3. Mise en ouvre d’un analyseur lexicale
1. Spécification des unités lexicales
2. Les attributs
3. Analyseur lexical
4. Erreurs lexicales

114
Mise en œuvre d’un AL
Spécifications des unités lexicales

Comme c’est déjà définis dans ce cours


l’unité lexicale c’est le mot qui doit être
reconnu dans une expression.
Les unités lexicales doivent être décrites
dans un langage

Exemple: le langage C
 Un identificateur
 Les chiffres
 Les instruction de contrôles
115
Mis en œuvre d’un AL
Spécifications des unités lexicales

Étant donné un langage, comment


décrire tout les mots acceptables par
le langage ?

Des modèles de descriptions des


unités lexicales

116
Mise en œuvre d’un AL
Spécifications des unités lexicales
Définition :
Un langage régulier L sur un alphabet est
défini récursivement de la manière suivante :
 { } est un langage régulier .
 Si a est une lettre de alors {a} est un langage
régulier.
 Si R est un langage régulier sur alors et
sont des langages réguliers.
 Si R1 et R2 sont des langages réguliers sur alors
R1 R2 et R1.R2 sont des langages réguliers.

117
Mise en œuvre d’un AL
Spécifications des unités lexicales

Propriété
Les langages réguliers se décrivent facilement
par une expression régulière

Pour décrire les unités lexicales nous


utilisons les expressions régulières

118
Mise en œuvre d’un AL
Spécifications des unités lexicales
Exemple :
 dénote l’ensemble de tous les mots formés
de a et de b ou le mot vide.
 dénote l‘ensemble des mots
sur {a,b} ayant le facteur abb
Identificateur sous C :

Illisible et très difficile à implémenter

119
Mise en œuvre d’un AL
Spécifications des unités lexicales
L’ ER est un mécanisme de base pour décrire
des unités lexicales.
Pour éviter les expressions régulières difficile 
on utilise les définitions régulières.

Une définition régulière est une suite de


définition de la forme :

ri est une expression régulière


chaque di est un nom différent

120
Mise en œuvre d’un AL
Spécifications des unités lexicales
Exemple :
définition régulière pour les identificateurs
dans le langage C :

121
Mise en œuvre d’un AL
Les attributs
Pour ce qui est des symboles ( <; ==; >; .. )
l’analyseur syntaxique a juste besoin de savoir
que cela correspond a l’unité lexicale OPREL
(opérateur relationnel).
 C’est seulement lors de la génération de code que
l’on aura besoin de distinguer < de > par exemple.

Cette information supplémentaire inutile pour


l’analyseur syntaxique mais utile pour les autres
phases du compilateur est appelée attribut
122
Pan de la partie

I. Introduction
II. Analyseur lexicale
1. C’est quoi un analyseur lexicale ?
2. Théorie des langage
3. Mise en ouvre d’un analyseur lexicale
1. Spécification des unités lexicales
2. Les attributs
3. Analyseur lexical
4. Erreurs lexicales

123
Mise en œuvre d’un AL
Analyseur lexical
 Le rôle d’un analyseur lexical est la reconnaissance
des unités lexicales
 Une unité lexicale peut être exprimée sous forme de de
définition régulière / expression régulière.
 Une expression régulière peut être reconnu par un automate
fini.

Pour la mise en place d’un analyseur lexical, il


suffit de définir l’expression régulière/définition
régulière du langage avant de décrire
l’automate fini décrivant le langage.

124
Mise en œuvre d’un AL
Analyseur lexical

125
Mise en œuvre d’un AL
Analyseur lexical
Exemple :
 Soit le langage régulier L sur l’alphabet {a,b,c}.
 Le langage L reconnait les mots commençant par abbcc
ou baccc et qui peut se terminer par c ou bb.

 L’expression régulière reconnaissant L est :

 L’automate est déterministe minimal est :

126
Mise en œuvre d’un AL
Analyseur lexical
 Exemple de morceau d’analyseur lexical pour le langage
Pascal en C :

127
Mise en œuvre d’un AL
Analyseur lexical
Il n ‘est pas évident de se retrouver si on veut
modifier l’analyseur ou le compléter si on
l’implémente manuellement.

Heureusement il existe des outils pour


écrire des programmes simulant des
automates a partir de simples dénitrions
régulières  flex

128
Pan de la partie

I. Introduction
II. Analyseur lexicale
1. C’est quoi un analyseur lexicale ?
2. Théorie des langage
3. Mise en ouvre d’un analyseur lexicale
1. Spécification des unités lexicales
2. Les attributs
3. Analyseur lexical
4. Erreurs lexicales

129
Mise en œuvre d’un AL
Erreurs lexicales
Peu d’erreurs sont détectables au seul niveau
lexical  car un analyseur lexical a une vision
très locale du programme source.

 Les erreurs se produisent lorsque l’analyseur


est confronté a une suite de caractères qui ne
correspond a aucun des modèles d’unité
lexicale qu’il a à sa disposition.
 Par exemple dans un programme C si l’analyseur
rencontre esle s’agit -il du mot clef else mal
orthographié ou d’un identificateur.
 Dans ce cas aucune erreur ne sera détectée !!
130
Mise en œuvre d’un AL
Erreurs lexicales
Lorsque l’analyseur est confronté à une suite de
caractères qui ne correspond à aucun de ses
modèles plusieurs stratégies sont possibles :
 Mode panique : on ignore les caractères qui posent
problème et on continue
 La transformations du texte source : insérer un
caractère, remplacer, échanger …
 La correction d’erreur par transformations du texte source
se fait en calculant le nombre minimum de transformations
a apporter au mot qui pose problème pour en obtenir un
qui ne pose plus de problèmes
 La stratégie la plus simple est le mode panique.

131
Mise en œuvre d’un AL

Exercice
Soit l’alphabet A={0,1}
Soit le langage L sur l’alphabet A, qui décrit les
mots commencent par 10 et qui se terminent par
01

Question
Modéliser l’analyseur lexical qui reconnait le
langage L.

132

Vous aimerez peut-être aussi