Compilation
Chapitre2 : Analyse lexical SMI/S5 Compilation Prof. : M. BENADDY A.U. 2015201!
Introduction
Rôle de l’analyseur lexicale : lire les caractères d’entrée (programme source) et de produire comme résultat une suite d’unités lexicales appelées TOKEN !ue l’analyseur syntaxi!ue syntax i!ue "a utiliser# utiliser# $es TOKEN sont constitués au %ur et & mesure de la lecture du texte source' on distingue deux types d’unités lexicales# $es unités propres au langage' les mots clés' les séparateurs' les opérateurs' ###etc# $es unités personnalisées !ui sont crées par le programmeur (les constantes' les identi%icateurs)#
Prof. M. BENADDY
Compilation
2
Introduction
Rôle de l’analyseur lexicale : lire les caractères d’entrée (programme source) et de produire comme résultat une suite d’unités lexicales appelées TOKEN !ue l’analyseur syntaxi!ue syntax i!ue "a utiliser# utiliser# $es TOKEN sont constitués au %ur et & mesure de la lecture du texte source' on distingue deux types d’unités lexicales# $es unités propres au langage' les mots clés' les séparateurs' les opérateurs' ###etc# $es unités personnalisées !ui sont crées par le programmeur (les constantes' les identi%icateurs)#
Prof. M. BENADDY
Compilation
2
Introduction Tale des symoles -rogramme source
nalyseur lexical
*nité lexicale nalyseur syntaxi!ue +onner l,unité lexicale sui"ante (type' "al) Tale des erreurs
Remarque : l’analyseur lexical de certains compilateurs procèdent & l’élimination dans le programme source des commentaires et des espaces !u’apparaissent sous %orme de caractères lanc ou de taulation ou ien les sauts de lignes#
Prof. M. BENADDY
Compilation
3
Unités lexicales, lexèmes, modèles
Token : unité lexicale' est une paire de nom et d’une "aleur optionnelle# $e nom du to.en est un symole astrait !ui représente une unité lexicale' (mot clé' suite de caractère dénotant un identi%iant' ###)# Le modèle : est une description de la %orme !ue peut prendre les lexèmes d’une unité lexicale# /’est une règle !ui décrit l’ensemle des lexèmes pou"ant représenter une unité lexicale particulière dans le programme source# +ans le cas des mots clés' le modèle est 0uste une sé!uence de caractères !ui %orme le mot clé# -our les identi%icateurs et d’autres unités lexicales' le modèle est une structure plus complexes# Lexème : est une suite de caractères dans le programme sources !ui concorde a"ec le modèle#
1l est identi%ié par l’analyseur lexical comme instance d’un to.en#
Prof. M. BENADDY
Compilation
4
Unités lexicales, lexèmes, modèles
Exemple :
Prof. M. BENADDY
Compilation
5
Unités lexicales, lexèmes, modèles
Remarques : +ans la plupart des langages de programmation' les classes sui"antes cou"rent la ma0orité des to.ens (unités lexicales)# *n to.en (unité lexicale) pour c2a!ue mot clé# $e modèle pour le mot clé est le m3me !ue le mot clé# $es to.ens pour les opérateurs' soit indi"iduelle soit par classes (exemple comparaison de l’exemple précédent)# *ne unité lexicale pour tous les identi%icateurs (nom des "ariales' des %onctions' des classes' taleaux' structures###)# *ne ou plusieurs unités lexicales (to.ens) pour les constantes' les nomres et les c2a4nes de caractères# *ne unité lexicale pour c2a!ue symole de ponctuation' tels !ue' la "irgule' le point "irgule' les parent2èses' les accolades'###
Prof. M. BENADDY
Compilation
6
Unités lexicales, lexèmes, modèles
Exemple : %loat pi 5 6#78 9
$a sous c2a4ne pi est un lexème d’unité lexicale identi%icateur' cette unité lexicale est retournée & l’analyseur syntaxi!ue' le retour est sou"ent réalisé en passant un entier correspondant & l’unité lexicale# $e modèle de l’unité lexicale %loat est l’unité correspondant & la simple c2a4ne %loat !ui "éri%ie l’ort2ograp2e des mots clés#
Prof. M. BENADDY
Compilation
7
Attributs des unités lexicales
$’analyseur lexical réduit les in%ormations sur les unités lexicales dans les attriuts !ui leur sont associés# En prati!ue une unité lexicale a en général un seul attriut : un pointeur "ers l’entrée dans la tale des symoles dans la!uelle l’in%ormation sur l’unité lexicale est conser"ée' le pointeur de"ient alors l’attriut de l’entité lexicale#
Prof. M. BENADDY
Compilation
8
Attributs des unités lexicales
Exemple : en ortran E 5 ; < / < < = (<
$es unités lexicales et les "aleurs des attriuts sont donnés par :
>id' pointeur "ers l’entrée de la tale des symoles associé & E? >op@a%%ectation? >id' pointeur "ers l’entrée de la tale des symoles associé & ;? >op@multiplication? >id' pointeur "ers l’entrée de la tale des symoles associé & /? >op@exposant? >nomre' "aleur entière =? Prof. M. BENADDY
Compilation
9
Les mots réservés
/ertains langages ne tolèrent pas !ue les mots clés soient utilisés comme des identi%icateurs# /e !ui "eut dire !ue leur signi%ication est prédé%inie et ne peut pas 3tre c2angé par le programmeur# $es mots clés sont installés dans la tale des symoles et !uand un identi%icateur est rencontré il est comparé a"ec les mots clés de la tale de symoles' s’il coAncide a"ec un des mots clés de la tale le scanner (analyseur lexicale) génère le code de ce mot clés' sinon le code de l’identi%icateur est transmis#
Exemples : -ascal et /
Prof. M. BENADDY
Compilation
10
Les erreurs lexicales
-eu d’erreurs sont détectées au ni"eau lexicale' car un analyseur lexical d’une "ision très localisée du programme source#
Exemple : si on rencontre la c2a4ne %i dans un programme a"ec %i(i550) l’analyseur lexical ne peut pas dire s’il s’agit du mot clé i% mal écrit ou d’un identi%icateur non déclaré# /omme %i est un identi%icateur "alide' l’analyseur lexical doit retourner l’unité lexicale d’un identi%icateur et laisse une autre p2ase du compilateur traiter cette erreur é"entuelle' supposant !u’une situation se présente oB l’analyseur lexical est incapale de continuer car aucun de ces modèles des unités lexicales ne %iltre le pré%ixe du reste du texte d’entrée# Exemple : une "ariale !ui commence par un caractère non "alide (Cx' Dy' ###) & ce momentl& l’analyseur lexical déclenc2e une erreur !ui indi!ue la non "alidité du nom de la "ariale#
Prof. M. BENADDY
Compilation
11
Spécifcation des unités lexicales
$a procédure d’un analyseur lexical consiste dans un premier temps en la description des unités lexicales & l’aide des expressions régulières # $es expressions régulières sont une notation importante pour spéci%ier les modèles' c2a!ue modèle reconna4t un ensemle de c2a4nes appelés aussi mot' ces expressions régulières seront trans%ormées en des automates !ui seront implémentés sur mac2ine#
Prof. M. BENADDY
Compilation
12
Spécifcation des unités lexicales
Mots et langage : Lettre et mots :
oit un ensemle %ini appelé alp2aet' les éléments de sont appelés des lettres' exemple : 5Fa''c'7'6'2G# *n mot ou une c2a4ne sur un alp2aet est une sé!uence %inie de symoles extrait de cet ensemle# On dé%init H l’ensemle des mots non "ides comme le plus petit ensemle tel !ue : -our toute lettre ℓ appartenant & l’alp2aet ' ℓ appartiendra & H# -our tout mot m ϵ H et toute lettre I ϵ ' le mot m ℓ ϵ H' (m ℓ représente la concaténation du mot m et de la lettre ℓ )# oit un mot m ϵ H' on dira !ue m constitue un mot sur (mot %ait & partir de l’alp2aet )#
Prof. M. BENADDY
Compilation
13
Spécifcation des unités lexicales
Mots et langage : Opérations sur les langages : -lusieurs opérations peu"ent s’appli!uer aux langages# -our l’analyse lexicale on s’intéresse principalement & l’union' la concaténation et la %ermeture (de Kleene)' on peut aussi généraliser l’opération exponentiation aux langages en dé%inissant $ J5 F Ԑ G' $i5$$i7 ainsi $i est la concaténation de $' i7 %ois a"ec lui m3me#
Remarque : /es notations sont employées dans l’écriture des expressions régulières#
Prof. M. BENADDY
Compilation
14
Spécifcation des unités lexicales
Mots et langage : Opérations sur les langages : Exemple : $ 5 Fa' ####'''###'LG' /5FJ'###'MG' on peut créer de nou"eaux langages & partir des langages $ et /' en appli!uant les opérateurs précédents#
$ * / est l’ensemle des lettres et des c2i%%res#
$/ est l’ensemle des mots %ormés d’une lettre sui"ie d’un c2i%%re#
$8 est l’ensemle des mots %ormés de 8 lettres#
$< est l’ensemle de tout les mots de lettres' y compris le mot "ide' Ԑ#
$($*+)< est l’ensemle des mots de lettres et de c2i%%res commenant par une lettre# /H est l’ensemle des mots !ui sont constitués d’au moins d’un c2i%%re#
Prof. M. BENADDY
Compilation
15
Spécifcation des unités lexicales
Expressions régulières : On construit une expression régulière & partir d’expressions régulières plus simples' en utilisant les règles de dé%initions du langage concerné# /2a!ue expression régulière r dénote un langage $( r )# $es règles de dé%inition spéci%ient comment $( r ) est %ormé en cominant de manière "ariée les langages dénotés par les sousexpressions de r # $es expressions régulières sont construites récursi"ement & partir d’expressions régulières plus simples' en utilisant des règles# /2a!ue expression régulière r dénote un langage $(r)' !ui est aussi dé%init récursi"ement & partir des langages dénotés par les sous expressions de r# $es règles !ui dé%inissent les expressions régulières sur un alp2aet et les langages dénotés par ces expressions#
Prof. M. BENADDY
Compilation
16
Spécifcation des unités lexicales
Expressions régulières :
Règles :
Ԑ est une expression régulière' et $(Ԑ ) 5 FԐ G' le langage dont le seule memre est le mot "ide Ԑ #
i a est un symole de ' alors a est une expression régulière' et $(a) 5 FaG' c&d le langage a"ec une seule c2a4ne de caractère' de longueur 7#
Prof. M. BENADDY
Compilation
17
Spécifcation des unités lexicales
Expressions régulières :
Induction :
On suppose !ue r et s sont deux expressions régulières dénotant les deux langages $(r) et $(s) respecti"ement# 1l existe !uatre règles d’induction !ui permettent de construire des expressions complexes & partir d’expressions régulières plus simples# (r)P(s) est l’expression régulière !ui dénote le langage $(r)*$(s) (r)(s) est l’expression régulière !ui dénote le langage $(r)$(s)' (r)< est l’expression régulière dénotant le langage ($(r))<' (r) est l’expression régulière !ui dénote $(r)# /ette règle signi%ie !u’on peut a0outer des parent2èses sans c2anger le langage !u’elle dénote#
Prof. M. BENADDY
Compilation
18
Spécifcation des unités lexicales
Expressions régulières :
Priorité des opérateurs :
$’opérateur < a la plus 2aute priorité et est associati% & gauc2e# $a concaténation a la deuxième priorité et est associati% & gauc2e# $e ou (P) a la %aile priorité# En considérant ces con"entions' par exemple l’expression régulière (a)P(()<(c) est é!ui"alente & aP
Prof. M. BENADDY
Compilation
19
Spécifcation des unités lexicales
Expressions régulières :
Exemple : soit l’alp2aet 5Fa'G
$’expression régulière aP dénote le langage Fa'G (aP)(aP) dénote Faa'a'a'G' le langage de mots de longueur = sur l’alp2aet ' une autre expression régulière est aaPaPaP # a< dénote le langage des mots %ormés de éro ou plus de a' FԐ' a' aa' aaa' ###G# (aP)< dénote l’ensemle des mots %ormés de éro ou plusieurs a ou ' FԐ' a' ' aa' a' a' ' aaa' ###G# (aP)< 5 (a<<)<5(a
Prof. M. BENADDY
Compilation
20
Spécifcation des unités lexicales
Expressions régulières : Remarque : *n langage !ui peut 3tre dé%init par une expression régulière est appelé un ensemle régulier# i deux expressions régulières r et s dénotent le m3me ensemle régulier' on dit !u’ils sont é!ui"alents r=s.
-ropriétés algéri!ues des expressions régulières :
Prof. M. BENADDY
Compilation
21
Spécifcation des unités lexicales
Expressions régulières :
Propriétés algébriques des expressions régulières :
Prof. M. BENADDY
Compilation
22
Spécifcation des unités lexicales Expressions régulières :
é!initions régulières : *ne dé%inition régulière est une suite de dé%initions de la %orme :
oB
/2a!ue d est un nou"eau symole distinct !ui n,appartient pas & Q i
/2a!ue r est une expression régulière sur les symoles : Q * Fd 'd '###'d G i
7
Prof. M. BENADDY
=
iE7
Compilation
23
Spécifcation des unités lexicales
Expressions régulières :
é!initions régulières :
Exemple " : les identi%icateurs en / sont des mots %ormés de lettres' c2i%%res' et underscore (@)# *ne dé%inition régulière de cet ensemle est la sui"ante : lettre PSP###PLPaPP###PP @ c2i%%re JP7P###PM id lettre(lettrePc2i%%re)<
Prof. M. BENADDY
Compilation
24
Spécifcation des unités lexicales
Expressions régulières :
é!initions régulières :
Exemple # : $es nomres non signés (entiers ou réels) sont des c2a4nes' comme =UJ' J#J7=68' V#66VE8' ou 7#UME8# $a dé%inition régulière de cette catégorie est donnée par l’expression sui"ante :
Prof. M. BENADDY
Compilation
25
Spécifcation des unités lexicales
Expressions régulières :
Extensions aux expressions régulières :
$es opérateurs de ase (l’union' la concaténation et la %ermeture) ont été introduites par Kleene "ers 7MJ' des extensions on été a0outées par la suite pour pou"oir dé%inir !uel!ues modèles de c2a4nes# $es extensions sui"antes sont incorporées dans utilitaires sous *N1W tel !ue $ex' !ui sont utiles dans l’écriture d’analyseurs lexicaux#
Prof. M. BENADDY
Compilation
26
Spécifcation des unités lexicales
Expressions régulières :
Extensions aux expressions régulières : –
$’opérateur unaire H représente' la %ermeture positi"e H de l’expression régulière et son langage# i r est une expression régulière' alors (r)+ dénote le langage (L(r))+. $’opérateur H a la m3me priorité et associati"ité !ue l’opérateur < (Kleene closure)' on peut écrire alors' r* = r +PԐ et r + = rr* =r*r. Léro ou une instance# $’opérateur unaire X signi%ie Y’éro ou une occurrence’’# /&d r X est é!ui"alente & r PԐ' d’une autre %aon L(r X )=L(r)*FԐG# $’opérateur X a les m3mes priorité et associati"ité !ue < et H# /lasses de caractères# $’expression régulière a1Pa 2P###Pan' oB les ai sont des symoles de l’alp2aet' on peut alors les remplacer par Z a1a 2###an[# !uand a1'a 2'###'an %orm une sé!uence logi!ue' c&d des lettres ma0uscules consécuti"es' des lettres minuscules' ou des c2i%%res' on peut les remplacer par a1an' (on prend 0uste le premier et dernier élément séparés par un tiret )# -ar consé!uent Zac[ \ aPPc' et Za[ \ aPP###P#
Prof. M. BENADDY
Compilation
27
Spécifcation des unités lexicales
Expressions régulières :
Extensions aux expressions régulières : r* = r +PԐ et r + = rr* =r*r
ermeture de
rX 5 r PԐ Zac[ \ aPPc' et Za[ \ aPP###P
Léro ou une instance *n élément de la classe
Prof. M. BENADDY
Compilation
28
Spécifcation des unités lexicales
Expressions régulières :
Extensions aux expressions régulières :
Exemple : en utilisant ces %ormes arégées réécrire les expressions régulières sui"antes : lettre PSP###PLPaPP###PP @ c2i%%re JP7P###PM id lettre(lettrePc2i%%re)<
Prof. M. BENADDY
Compilation
29
Spécifcation des unités lexicales
Expressions régulières :
Extensions aux expressions régulières :
Exemple : en utilisant ces %ormes arégées réécrire les expressions régulières sui"antes : lettre ZLa@[ c2i%%re ZJM[ id lettre(lettrePc2i%%re)<
Prof. M. BENADDY
Compilation
30
Reconnaissance de unités lexicales
/omment utiliser les modèles des unités lexicales' pour construire un programme !ui examinera le texte d’entrée pour décider si les lexèmes se sont con%orme a"ec les modèles# /onsidérons cet exemple :
Prof. M. BENADDY
Compilation
31
Reconnaissance de unités lexicales
$es unités lexicales concernées par l’analyseur lexical sont i!' t$en' else' relop' id' et number' ils sont aussi les terminaux de la grammaire pour les instructions de ranc2ement conditionnel# $es dé%initions régulières dé%inissant les modèles de ces unités lexicales sont :
Prof. M. BENADDY
Compilation
32
Reconnaissance de unités lexicales
-our ignorer les commentaires et les lancs l’analyseur lexical doit les reconna4tre pour cela' on dé%init l’unité lexicale Y’]s’’ comme suite : $es caractères lancs (lan.)' taulation (ta) et nou"elle ligne (ne]line) sont des symoles astraits utilisés pour exprimer les caractères /11 désignant la m3me c2ose# $’unité lexicale ws est reconnue par l’analyseur lexical' mais elle ne sera pas retournée & l’analyseur syntaxi!ue' mais' on reprend l’analyse !ui suit l’espace lanc#
Prof. M. BENADDY
Compilation
33
Reconnaissance de unités lexicales
$e ut de l’analyseur lexicale est résumé dans le taleau cidessous !ui montre pour c2a!ue lexème ou %amille de lexèmes' !u’elle unité lexicale (to.en) !ui sera retournée & l’analyseur syntaxi!ue ainsi !ue sa "aleur d’attriut# Lexèmes
%om de l&unité lexicale
'aleur de l&attribut
N’importe !uel ws i! t$en else N’importe !uel id N’importe !uel
( i! t$en else id number
( ( ( ( Pointeur )ers la table des s*mboles Pointeur )ers la table des s*mboles
relop relop relop relop relop relop
LT LE E%E /T /E
number
+ +, , +. . Prof. M. BENADDY .,
Compilation
34
Reconnaissance de unités lexicales
iagramme de transition : *ne étape pour la construction d’un analyseur lexical' est de con"ertir les modèles en des diagrammes' appelés Y’diagrammes de transition’’# *n diagramme de transition est une collection d’états' reliés par des arcs# *n les états dans un diagramme de transition sont dé%inis comme suite :
$’état de départ est représenté par un cercle oB appara4t une %lèc2e entrante $es états d’acceptation (lexème reconnue) est représentés par un cercle doule < i un état d’acceptation admet un recul on lui a0oute une étoile (<) *n état !uelcon!ue est représenté par un cercle *n arc est représenté par une %lèc2e !uittant un état "ers un autre > a"ec une éti!uette
Prof. M. BENADDY
Compilation
35
Reconnaissance de unités lexicales
iagramme de transition : +iagramme de transition de relop
Prof. M. BENADDY
Compilation
36
Reconnaissance de unités lexicales
iagramme de transition : Reconnaissance des mots réser"és et des identi%icateurs $a reconnaissance des mots clés et des identi%icateur présente un prolème# En e%%et' les mots clés (i%' t2en) sont réser"és' il ne sont pas des identi%icateurs' mais ils se "oient comme des identi%icateurs# -our reconna4tre les identi%icateurs on peut utiliser le diagramme cidessous' !ui reconnectera aussi les mots clés if, then, else de notre exemple#
Prof. M. BENADDY
Compilation
37
Reconnaissance de unités lexicales
iagramme de transition : Reconnaissance des mots réser"és et des identi%icateurs
1l existe deux solutions pour reconna4tre les mots réser"és !ui ressemle aux identi%icateurs : 1nitialement 1nstaller les mots clés (mots réser"és) dans la tale des symoles# *n c2amp d’entrée dans ladite tale indi!uera !ue ses c2a4nes ne seront pas utilisées comme des identi%icateurs ordinaires' et indi!ue !uelle unité lexicale il représente# ^uand on rencontre un identi%icateur' l’appel & installID le met dans la tale des symoles s’il n’est pas encore inséré# $a %onction getToken examine la tale des symoles du lexème trou"é' et retourne son entrée dans ladite tale# /réer des diagrammes de transition séparés pour c2a!ue mot clé#
●
Prof. M. BENADDY
Compilation
38
Reconnaissance de unités lexicales
iagramme de transition : +igramme de reconnaissance des c2i%%res
Prof. M. BENADDY
Compilation
39
Reconnaissance de unités lexicales
iagramme de transition : +iagramme de reconnaissance des lancs
+ans ce diagramme on c2erc2e un ou plusieurs lancs (espaces)' représentés par delim dans le diagramme# Typi!uement ces caractères peu"ent 3tre des lancs' taulation' ou des retours & la ligne ou ien d’autres caractères !ui ne sont pas considérés par le langage comme des unités lexicales#
Prof. M. BENADDY
Compilation
40
Le générateur d’analyseur lexicale Lex!lex
$ex_lex est un outil de génération automatisée d’analyseur lexical' & partir de la spéci%ication des expressions régulières pour décrire les modèles des unités lexicales# $ex_lex trans%orme les modèles (expressions régulières et dé%initions régulières) en entrée en un diagramme de transition et généré le code source correspondant' dans un %ic2ier appelé lex#yy#c' !ui simule le diagramme de transition généré# /e %ic2ier écrit en langage / doit 3tre compilé pour le compilateur du / pour produire un exécutale !ui sera l,analyseur lexical du langage décrit par les modèles en !uestion#
Prof. M. BENADDY
Compilation
41
Le générateur d’analyseur lexicale Lex!lex
-lusieurs langages déri"és de $ex existent :
lex produit du code écrit en /_/HH `lex produit du code écrit en `a"a $ecl produit du code écrit en /aml mllex produit du code en ;$ alex produit du code écrit en as.ell tlctc$ex produit du code écrit en tcl
Prof. M. BENADDY
Compilation
42
Le générateur d’analyseur lexicale Lex!lex
0tilisation de Lex :
*n %ic2ier lex.l écrit en langage $ex' !ui décrit l’analyseur lexical & générer est présenté au compilateur $ex en entrée# $e compilateur $ex trans%orme lex.l en un programme écrit en / dans un %ic2ier appelé lex#yy#c# /e %ic2ier est compilé par le compilateur / et produit un %ic2ier exécutale a.out !ui est le %ic2ier du compilateur exécutale' il prendra en paramètre un %ic2ier écrit dans le langage source et produira en sortie une sé!uence des unités lexicales#
Prof. M. BENADDY
Compilation
43
Le générateur d’analyseur lexicale Lex!lex
0tilisation de Lex :
Prof. M. BENADDY
Compilation
44
Le générateur d’analyseur lexicale Lex!lex
1tructure d&un programme Lex :
*n %ic2ier de description pour $ex est %ormé de trois parties' séparées par des lignes contenant seulement b b' aligné & gauc2e' selon le sc2éma sui"ant : // Parties d éclarations %{ //(variables, constantes, biblioth èques C, etc.) %} //expressions r égulières, définitions régulières %% // Partie productions (expressions r égulières) %% // code de service (fonctions utilitaires)
Prof. M. BENADDY
Compilation
45
Le générateur d’analyseur lexicale Lex!lex
1tructure d&un programme Lex : $a partie déclarations comporte les déclarations des "ariales' structures' unions' déclarations régulières' déclaration des iliot2è!ues en / $a partie productions' les déclarations prennent la %orme sui"ante :
m m ### m ### m 7 =
i
n
Prof. M. BENADDY
Faction G Faction G ### Faction G ### Faction G 7 =
$es m sont des expressions régulières ou des dé%initions régulières de la partie déclaration# i
i
n
Les action i sont les actions & réaliser par
l’analyseur lexical si un lexème est accepté par mi . énéralement écrites en langage /' mais d’autres langages peu"ent 3tre utilisés# Compilation
46
Le générateur d’analyseur lexicale Lex!lex
1tructure d&un programme Lex : $a 6ème partie contient des %onctions !ui peu"ent 3tre utilisées dans les actions de la = ème partie# E"entuellement ces %onctions peu"ent 3tre compilées séparément et c2argées a"ec l,analyseur lexical# /ette partie peut aussi contenir la %onction principale main pour une é"entuelle exécution du programme produit# Remarque : *n %ic2ier source en $ex doit a"oir l,extension #l (exemple#l)# eulement la partie production est oligatoire dans $ex#
Prof. M. BENADDY
Compilation
47
Le générateur d’analyseur lexicale Lex!lex
1tructure d&un programme Lex : Exemple " : *n programme $ex !ui a%%ic2e le contenu de son entrée standard "ers l,écran#
%% .|\n ECHO; %%
Exemple # : un programme $ex !ui supprime tout les espaces et taultations# %% [ \t] {/* supprime les espaces et tabulations */} bye {exit(0);}
Prof. M. BENADDY
Compilation
48
Le générateur d’analyseur lexicale Lex!lex
1tructure d&un programme Lex : Exemple 2 : *n programme $ex !ui reconna4t les "eres en anglais# On considère la liste des "eres sui"ants :
is ]as do ]ould 2as
Prof. M. BENADDY
am e does s2ould 2a"e
are eing did can 2ad
]ere een ]ill could go
Compilation
49
Le générateur d’analyseur lexicale Lex!lex
1tructure d&un programme Lex : Exemple 2 : *n programme $ex !ui reconna4t les "eres en anglais#
]ill 1 bF ]ould 1 _< s2ould 1 < programme $ex !ui reconna4t les "eres en nglais can 1 <_ could 1 bG 2as 1 Zt [H _< ignorer les espaces et taulations <_ 2a"e 1 is 1 2ad 1 am l go Fprint%(,,bs : is a "ern,,' are 1 yytext)9G ]ere 1 ZaL[H Fprint%(,,bs:is not a ]as 1 "ern,,' yytext)9G e l #Pn FE/O 9 _< autres c2oses eingeen 1 ou retour & la ligne <_ do 1 bb does 1 main() did 1 F Prof. M. BENADDY Compilation 50 yylex() 9
Le générateur d’analyseur lexicale Lex!lex
1tructure d&un programme Lex : Remarques : yylex() : la %onction principale du programme écrit en $EW# yytext : pointeur sur le déut de la c2a4ne analysée (unité lexicale) Exécution : $ex : lex verbes.l produit un %ic2ier lex#yy#c gcc : gcc o "eres lex#y#c ll (ll : lirary lex) lex : lex verbes.l produit un %ic2ier lex#yy#c gcc : gcc o "eres lex#yy#c l%l (l%l : lirary %ast lex)
Prof. M. BENADDY
Compilation
51
Le générateur d’analyseur lexicale Lex!lex
1tructure d&un programme Lex : Exercice d3application : écrire un programme en lex !ui reconna4t les identi%icateurs' mot clès et opérateurs en -/$
Prof. M. BENADDY
Compilation
52
Le générateur d’analyseur lexicale Lex!lex %{ /*definitions des constantes LT, LE, EQ, NE, GT, GE, IF, THEN, ELSE, ID, NUMBER, RELOP*/ %} /*definitions régulières*/ delim [ \t\n] ws {delim}+ letter [A-Za-z] digit [0-9] id {letter}({letter}|{digit})* number (\+|\-)?{digit}+(\.{digit}+)? (E[+-]?{digit}+)? %% {ws} {/*no action and no return*/} if {printf("mot clé IF\n");} then {printf("mot clé TEHN\n");} else {printf("mot clé ELSE\n");} {id} {printf("identificateur %s\n",yytext);} {number} {printf("nombre %s\n",yytext);} Prof. M. BENADDY
Compilation
"<" {printf("relop LT\n");} "<=" {printf("relop LE\n");} "=" {printf("relop EQ\n");;} "<>" {printf("relop NE\n");} ">" {printf("relop GT\n");} ">=" {printf("relop GE\n");} . {printf("non reconnue %s\n",yytext);} %% int main(int argc,char *argv[]) { yyin=fopen(argv[1],"r"); yylex(); fclose(yyin); return 0; } 53
Les automates " états fnis
*n reconnaisseur pour un langage est un programme !ui prend en entrée une c2a4ne x et répond oui si x est une p2rase du langage et non autrement# On compile une expression régulière en un reconnaisseur en construisant un diagramme de transition appelé automate %ini# *n automate %ini est capale de reconna4tre précisément les ensemles réguliers# 1l existe types d,automates & états %inis: Les automates 4 états !inis non déterministes (56%) n,ont aucune restrictions sur les éti!uettes de leurs arcs# *n symole peut éti!ueter plusieurs arcs partant d,un m3me état' et la c2a4ne "ide f est une éti!uette possile# Les automates 4 états !inis déterministes (56)' pour les!uels' ne peu"ent pas partir plusieurs transitions du m3me état a"ec le m3me caractère et n,accepte pas d,ftransition#
Prof. M. BENADDY
Compilation
54
Les automates " états fnis
5utomates !inis non déterministes 756%8 : *n automate %ini non déterministe noté N' noté par l,expression aut 5 >Q'E'+''T? a"ec : *n ensemle Q de symoles d,entrée' l,alp2aet du langage# On considère !ue la c2a4ne "ide f' n,est 0amais un memre de Q# $,ensemle %ini E d,états# *ne %onction de transition !ui donne pour c2a!ue état et pour c2a!ue symole de Q*FfG' l,ensemle des états sui"ants T' sous ensemle de ExQxE# $,ensemle + sousensemle de E' des états de départ# $,ensemle des états ' sousensemle de E' l,ensemle des états d,acceptation ou états %inaux ou états terminaux#
Prof. M. BENADDY
Compilation
55
Les automates " états fnis
5utomates !inis non déterministes 756%8 : Exemple : Q 5 Fa''cG 9 E5F7' =' 6' 8G 9 +5F7G 9 5 F6'8G ' T 5F(7'a'=)' (=''6)'(7'c'8)'(6'c'=)G
Prof. M. BENADDY
Compilation
56
Les automates " états fnis
5utomates !inis non déterministes 756%8 : /rap$e d3états : *n grap2e d,états ressemle & un diagramme de transition' mais dans le cas des N' le m3me caractère peut éti!ueter deux transitions ou plus en sortie d,un m3me état et les arcs peu"ent 3tre éti!uetés par le m3me symole spéciale f# Tous les états de départ sont représentés par un cercle oB appara4t une %lèc2e entrante : $es états terminaux sont représentés par un cercle doule ,il existe un arc éti!ueté par un a entre l,état i et l,état 0' si le triplet (i' a' 0) ϵ T on dessine cet arc comme suite :
Prof. M. BENADDY
Compilation
57
Les automates " états fnis
5utomates !inis non déterministes 756%8 : /rap$e d3états : Exemple : soit le langage (aP)
Prof. M. BENADDY
Compilation
58
Les automates " états fnis
5utomates !inis non déterministes 756%8 : /rap$e d3états : %otation : est é!ui"alent &
si tout état d,un ensemle donné Q éti!uettent des transitions d,un état i "ers un état 0 on notera Q5Fa' ' cG Exemple : Q 5 Fx' yG 9 E 5F7' = '6G 9 + 5F7G 9 5F6G 9 T 5F(7' y' 7)' (7' x' =)' (=' y' =)' (=' x' 6)' (6' x' 6)' (6' y' 6)G
Prof. M. BENADDY
Compilation
59
Les automates " états fnis
Table de transition : *ne autre mét2ode de représentation d,un automate est la tale de transitions' pour décrire la %onction de transition T on utilisera une tale ; indicée par E et Q' tel !ue si e ϵ
E, a ϵ Σ, e' ϵ M(e,a) ssi (e, a, e') ϵ T
Exemple : tale de transition correspondante &
l,expression régulière (aP)
a FJ'7G Compilation
b FJG F=G F6G
60
Les automates " états fnis
5cceptation d3une c$a
Prof. M. BENADDY
Compilation
61
Les automates " états fnis
5cceptation d3une c$a
/et automate n,accepte pas la c2a4ne x# i on considère a
/et automate accepte la c2a4ne x5a en parcourant le c2amin 7'='6'8#
Prof. M. BENADDY
Compilation
62
Les automates " états fnis
5utomates !inis déterministes : *n automate %ini déterministe (+) est un cas particulier d,un automate %ini non déterministe (N) dans le!uel : ucun état n,a une ftransition (une transition sur l,entrée f)# -our c2a!ue état e et c2a!ue symole a' il existe un et un seul arc éti!ueté a !ui !uitte e# *n + a au plus une transition & partir de c2a!ue état sur n,importe !uel symole' en consé!uence il est très %acile de déterminer si un + accepte une c2a4ne d,entrée' étant donné !u,il existe au plus un c2emin depuis l,état de départ éti!ueté par cette c2a4ne# i on utilise une tale de transition pour représenter un +' c2a!ue entrée est un état singleton# *n N est une représentation astraite d,un algorit2me de reconnaissance des c2a4nes d,un langage# *n + est un algorit2me concret de reconnaissance de c2a4nes# N,importe !uel N ou expression régulière peu"ent 3tre trans%ormées en un +#
Prof. M. BENADDY
Compilation
63
Les automates " états fnis
1imulation d3un 56 : oit x une c2a4ne d,entrée !ui se termine par un caractère de %in de %ic2ier (%d% ou eo%)' soit e un état de départ et l,ensemle des états terminaux# oit la %onction transiter(e'c) !ui donne l,état "ers le!uel il y a une transition depuis l,état e sur le caractère d,entrée c' la %onction carsui"(x) retourne le proc2ain caractère de la c2a4ne d,entrée x# $a simulation d,un + est donnée par l,algorit2me sui"ant : 0
e=e0 c=carsuiv(x) tant que (c!=fdf){ e = transiter(e,c) c = carsuiv(x) } si (e ϵ F) alors retrouner ''oui'' sinon retourner ''non''
Prof. M. BENADDY
Compilation
64
Les automates " états fnis
1imulation d3un 56 : Exercice d3application : dessiner l,+ correspondant au langage $((aP)
Prof. M. BENADDY
Compilation
65
Les automates " états fnis
1imulation d3un 56 :
Exercice d'application : dessiner l,+ correspondant
au langage $((aP)
/et automate accepte la c2a4ne x en parcourant les états J'7'='7'='6
Prof. M. BENADDY
Compilation
66
Automates " états fnis aux expressions régulières
Trans!ormation d3un 56% en un 56 : oit les automates sui"ants : ut7
ut= :
Prof. M. BENADDY
Compilation
67
Automates " états fnis aux expressions régulières
Trans!ormation d3un 56% en un 56 : $,automate 7 a deux transitions de l,état 7 sur la c2a4ne d,entrée a !ui signi%ie !u,on peut aller "ers l,état J ou 7# +e m3me l,automate = a deux transitions sur f & partir de l,état J# +ans le cas oB la %onction de transition est multi"aluée' il est di%%icile de simuler un N & l,aide d,un programme# $,acceptation d,une c2a4ne d,entrée suppose !u,il puisse exister un c2emin éti!ueté par cette c2a4ne !ui m3ne depuis l,état de départ 0us!u,& un état d,acceptation# ;ais il existe dans un N plusieurs c2emins !ui épellent la m3me c2a4ne d,entrée' on doit les prendre en considération a"ant de décider d,accepter ou non la c2a4ne d,entrée#
Prof. M. BENADDY
Compilation
68
Automates " états fnis aux expressions régulières
Trans!ormation d3un 56% en un 56 : $,idée générale de la trans%ormation d,un N en un + est !u,un état de l,+ correspond & un ensemle d,états de l,N# $,+ utilise un état pour garder trace de tout les états possiles !ue l,N peut atteindre après a"oir lu c2a!ue symole d,entrée#
Prof. M. BENADDY
Compilation
69
Automates " états fnis aux expressions régulières
Trans!ormation d3un 56% en un 56 : lgorit2me : +onnée : un N Résultat : un + !ui accepte le m3me langage de l,N# ;ét2ode : l,algorit2me construit une tale de transition +trans pour l,+# /2a!ue état de l,+ est un ensemle d,états de l,N# On construit +trans de telle manière !ue l,+ simulera tous les déplacements possile !ue l,N peut e%%ectuer sur une c2a4ne d,entrée donnée#
Prof. M. BENADDY
Compilation
70
Automates " états fnis aux expressions régulières
Trans!ormation d3un 56% en un 56 : lgorit2me : -our garder trace des ensemle des états de l,N on utilisera les opérations sui"antes : oit e et T tels !ue e représente un état de l,N et T représente un ensemle d,états de l,N#
Opération f%ermeture(e)
escription Ensemle des états de l,N accessiles depuis l,état e Noté aussi f%(e) de l,N par des ftransition uni!uement# f%ermeture(T) Ensemle des états de l,N accessiles depuis un état Noté aussi f%(T) e ϵ T par des ε-transition uniquement. transiter(T'a) Ensemle des états de l,N "ers les!uels il existe une Noté aussi tran(T'a) transition sur a Prof. M. BENADDY
Compilation
71
Automates " états fnis aux expressions régulières
Trans!ormation d3un 56% en un 56 : Exemple d,application : soit l,N sui"ant !ui accepte le langage (aP)
Prof. M. BENADDY
Compilation
72
Automates " états fnis aux expressions régulières
Trans!ormation d3un 56% en un 56 : Exemple d,application : $,état de départ de l,+ 5f%(J)5FJ'7'='6'8G $,alp2aet Q 5 Fa' G S5f%(tran('a))5f%(F6'UG)5F6'7'='8'V''UG 5? +trans('a)5S# /5f%(tran('))5f%(FG)5F7'='8''V'G 5? +trans(')5/# f%(tran(S'a))5f%(F6'UG)5F6'7'='8'V''UG 5? +trans(S'a)5S# f%(tran(S'))5f%(F'MG)5F7'='8''V''MG 5? +trans(S')5+# f%(tran(/'a))5f%(F6'UG)5F6'7'='8'V''UG 5? +trans(/'a)5S# f%(tran(/'))5f%(FG)5F7'='8''V'G 5? +trans(/')5/# f%(tran(+'a))5f%(F6'UG)5F6'7'='8'V''UG 5? +trans(+'a)5S# f%(tran(+'))5f%(F'7JG)5F7'='8''V''7JG 5? +trans(+')5E# f%(tran(E'a))5f%(F6'UG)5F6'7'='8'V''UG 5? +trans(E'a)5S# f%(tran(E'))5f%(FG)5F7'='8''V'G 5? +trans(E')5/#
Prof. M. BENADDY
Compilation
73
Automates " états fnis aux expressions régulières
Trans!ormation d3un 56% en un 56 : Exemple d,application : $,état E est l,état de %in de l,+ car E contient l,état 7J !ui est l,état d,acceptation de l,N# Règle : un état de l,+ est un état d,acceptation si c,est un ensemle d,états de l,N !ui contient au moins un état d,acceptation de l,N# $,+ é!ui"alent & l,N est :
Prof. M. BENADDY
Compilation
74