Upload
others
View
23
Download
0
Embed Size (px)
Citation preview
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Analyse lexicale
Mirabelle Nebut
Bureau 332 - M3mirabelle.nebut at lifl.fr
2012-2013
Mirabelle Nebut Analyse lexicale
2/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Analyse lexicale
RappelsVocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Comment se comporte un analyseur lexical ?
Construction d’un analyseur lexical
Specification d’un analyseur lexicalBases theoriques (pourquoi c’est possible et ca marche)Des expressions aux descriptions regulieres
La partie analyse lexicale est essentiellement tiree de [Wilhelm etMaurer].
Mirabelle Nebut Analyse lexicale
3/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
RappelsVocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Comment se comporte un analyseur lexical ?
Construction d’un analyseur lexical
Specification d’un analyseur lexicalBases theoriques (pourquoi c’est possible et ca marche)Des expressions aux descriptions regulieres
Mirabelle Nebut Analyse lexicale
4/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
A propos de ces rappels
Cette partie du cours est a travailler pour le TD1.
Pour ceux qui decouvrent : appeler a l’aide si brasse coulee.
Mirabelle Nebut Analyse lexicale
5/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Reference
La partie rappels est essentiellement tiree du poly de DanielHerman, Theorie des Langages et Compilation, poly 111 de l’exIFSIC (Institut de Formation Superieure en Informatique etCommunication), Universite de Rennes1.
Mirabelle Nebut Analyse lexicale
6/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
RappelsVocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Comment se comporte un analyseur lexical ?
Construction d’un analyseur lexical
Specification d’un analyseur lexicalBases theoriques (pourquoi c’est possible et ca marche)Des expressions aux descriptions regulieres
Mirabelle Nebut Analyse lexicale
7/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Langages
Le francais et Java sont des langages.
La theorie du langage fournit des modeles pour :
I decrire un langage
formalisme de description
I fabriquer une machine qui sait dire si un texte appartient a unlangage donne
formalisme executable pour la reconnaissance
Mirabelle Nebut Analyse lexicale
8/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Langage, vocabulaire et mots
Un ”texte” Java est obtenu en mettant les uns derriere les autresdes briques de base (mots-cles, identificateurs, etc).
L’ensemble tous les textes = le langage
Un texte = un mot du langage
L’ensemble des briques de base = le vocabulaire
Une brique de base = un symbole du vocabulaire
Mirabelle Nebut Analyse lexicale
9/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Langage, vocabulaire et mots, autre exemple
Langage des identificateurs Java.
Vocabulaire : { a, . . ., z, A, . . ., Z, 0, . . ., 9, }
Un mot : un identificateur, ex mon ident2
Le langage : tous les identificateurs Java
Mirabelle Nebut Analyse lexicale
10/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Vocabulaire et mots
Vocabulaire Mots{a,b} aaaa, ba
{public, Toto, class, {, }} public class Toto { }class class
Un vocabulaire ou alphabet V ou Σ est un ensemble fini desymboles.
Un mot sur un vocabulaire V est une sequence finie d’elements deV .
Mirabelle Nebut Analyse lexicale
11/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Mots
On note |m | la longueur du mot m, c’est a dire le nombre desymboles qui le composent.
Sur {a, b}, |aab | = 3
On note ε le mot vide, tel que |ε | = 0.
On note V ∗ l’ensemble des mots sur V .
Mirabelle Nebut Analyse lexicale
12/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Concatenation de mots
L’operation de concatenation est definie par :• : V ∗ × V ∗ → V ∗
m1,m2 7→ le mot commencant par les symboles de m1
suivi par les symboles de m2
en preservant leur ordre
On ecrit m1m2 pour m1 •m2.
On ecrit an le mot compose de n occurrences de a.
On a donc a0 = ε
Mirabelle Nebut Analyse lexicale
13/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Et retour aux langages
Un langage L sur V est une partie de V ∗.
L ∈ P(V ∗)
Un langage est un ensemble de mots, fini ou infini.
{an| n est pair} : infini{an| n est pair et n ≤ 100} : fini
Mirabelle Nebut Analyse lexicale
14/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
RappelsVocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Comment se comporte un analyseur lexical ?
Construction d’un analyseur lexical
Specification d’un analyseur lexicalBases theoriques (pourquoi c’est possible et ca marche)Des expressions aux descriptions regulieres
Mirabelle Nebut Analyse lexicale
15/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
A quels langages s’interesse-t-on ?
Pas tous les langages !
Pour l’analyse lexicale : langages dits reguliers.
Doivent pouvoir decrire :
I les identificateurs Java ;
I les entiers signes ;
I les mots-cles Java ;
I . . .
Mirabelle Nebut Analyse lexicale
16/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Exemple : les entiers a un ou deux chiffres
V = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}On veut pouvoir exprimer :
I un langage reduit a un symbole : { 3 }3 est un entier a un chiffre
I la notion de choix : {0} ∪ . . .∪ {9},un entier a un chiffre c’est 0 ou 1 ou . . .
I la notion de concatenation : {0, . . ., 9} {0, . . ., 9}un entier a 2 chiffres c’est un entier a 1 chiffre suivi d’unentier a un chiffre
Mirabelle Nebut Analyse lexicale
17/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Operateurs sur langages : choix et concatenation
notion de choix → union ensembliste de langagesL1 ∪ L2 = {m | m ∈ L1 ∨ L2}
notion de concatenation → produit de concatenation sur langagesL1L2 = {m1m2 | m1 ∈ L1 ∧m2 ∈ L2}
Mirabelle Nebut Analyse lexicale
18/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Exemple : les entiers
V = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}On veut pouvoir exprimer la notion de repetition non bornee :
Un entier = des chiffres repetes / une suite de chiffre
I {0, . . ., 9}I {0, . . ., 9} {0, . . ., 9}I {0, . . ., 9} {0, . . ., 9} {0, . . ., 9}I . . .
Cas particulier ici : on n’accepte pas 0 chiffres.
Mirabelle Nebut Analyse lexicale
19/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Operateur sur langage : repetition
notion de repetion / iteration → fermeture d’un langage
La fermeture L∗ de L contient les mots des langages :
I L0 = {ε}I L1 : mots obtenus en concatenant un mot de L0 avec un mot
de L, donc L1 = L0L
I . . . Li = Li−1L . . .
On a donc L∗ =⋃
i≥0 Li
Une fermeture est une union infinie, et produit un langage infini(sauf si L = ∅ ou L = {ε}).
ε ∈ L∗
Mirabelle Nebut Analyse lexicale
20/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Retour aux entiers
V = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
({0} ∪ . . .∪ {9}) ({0} ∪ . . .∪ {9})∗
Mirabelle Nebut Analyse lexicale
21/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Langages reguliers
Les langages reguliers sont les langages construits
I a partir de langages finis,I en utilisant un nombre fini de fois des operations
I d’union,I de produit,I et de fermeture de langages.
(mais un langage peut contenir un nombre infini de mots).
regulier = rationnel
Mirabelle Nebut Analyse lexicale
22/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Les langages reguliers, formellement
Les langages reguliers sur V sont definis recursivement :
I ∅, {ε} sont des langages reguliers ;
I pour tout a ∈ V , {a} est un langage regulier ;
I si L1 et L2 sont des langages reguliers sur V alors L1 ∪ L2,L1L2 et L∗1 sont aussi des langages reguliers sur V ;
I il n’y a pas d’autre langage regulier sur V .
Mirabelle Nebut Analyse lexicale
23/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
RappelsVocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Comment se comporte un analyseur lexical ?
Construction d’un analyseur lexical
Specification d’un analyseur lexicalBases theoriques (pourquoi c’est possible et ca marche)Des expressions aux descriptions regulieres
Mirabelle Nebut Analyse lexicale
24/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Principe
Expression reguliere : moyen de decrire concisement un langageregulier
Correspondance entre :
I operateur sur langage regulier
I operateur sur expression reguliere
Mirabelle Nebut Analyse lexicale
25/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Expressions regulieres : exemple
I Le chiffre 1 : 1
I Un chiffre quelconque : 0|1|2|3|4|5|6|7|8|9
I Un nombre entier :
(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*
I Un exposant eventuel :
ε | E(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)
Mirabelle Nebut Analyse lexicale
26/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Expressions regulieres
Description des langages reguliers sur V : expr regulieres (er) sur V
I ∅ est une er qui decrit le langage ∅ ;
I ε est une er qui decrit le langage {ε} ;
I a (pour a ∈ V ) est une er qui decrit le langage {a}.
Si e1 et e2 sont des er sur V , decrivant les langages L(e1) et L(e2),alors les expressions suivantes sont aussi des er :
I e1 | e2 decrit le langage L(e1) ∪ L(e2) ;
I e1e2 decrit le langage L(e1)L(e2) ;
I e1∗ decrit le langage L(e1)∗.
Il n’y a pas d’autre expression reguliere.
Mirabelle Nebut Analyse lexicale
27/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Operateurs derives
Les bibliotheques d’expressions regulieres fournissent d’autresconstructions :
I repetition finie, pour n fixe : a3 = aaa
I construction du type ”tout sauf ces symboles”
I construction du type ”au moins une fois” : a+ = a(a∗)I construction du type � la ou pas � : a? = a|εI etc
Mirabelle Nebut Analyse lexicale
28/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
RappelsVocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Comment se comporte un analyseur lexical ?
Construction d’un analyseur lexical
Specification d’un analyseur lexicalBases theoriques (pourquoi c’est possible et ca marche)Des expressions aux descriptions regulieres
Mirabelle Nebut Analyse lexicale
29/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
A propos des automates
Les automates a nombre fini d’etat reconnaissent exactement leslangages reguliers.
C’est pourquoi on les utilise dans ce cours.
Plus largement, les machines a etats sont un moyen de modeliserles systemes a etat tres repandu (cf statecharts UML).
Mirabelle Nebut Analyse lexicale
30/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Intuition
q0 q1
b b
a
a
Sur V = {a, b, c} : reconnaıt le langage des mots sans c quicontiennent un nombre impair de a.
Notion de mot sur un ruban + tete de lecture
Exemples de fonctionnement pour les 3 cas d’arret possible :
I mot m1 = ab : acceptation
I mot m2 = aab : rejet, arret ds etat pas final
I mot m3 = bca : rejet, blocage
Mirabelle Nebut Analyse lexicale
31/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
AFD, definition
Un automate a nombre fini d’etats deterministe (AFD) est untuple A = (V ,Q,∆, q0,F ) dans lequel :
I V est l’alphabet d’entree ;
I Q est un nombre fini d’etats ;
I q0 ∈ Q est l’etat initial ;
I F ⊆ Q est l’ensemble des etats finaux ;
I ∆ est une fonction de transition de Q × V vers Q.
Mirabelle Nebut Analyse lexicale
32/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Fonction de transition, exemple
q0 q1
b b
a
a
∆ a bq0 q1 q0
q1 q0 q1
Mirabelle Nebut Analyse lexicale
33/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Notion de configuration, intuition
Configuration = situation courante de l’automate= etat courant + mot restant a lire
Ex config initiale : (q0, ab)Ex config finale : (q1, ε)Ex config intermediaire : (q1, b)
q0 q1
b b
a
a
Mirabelle Nebut Analyse lexicale
34/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Configuration, definition
Soit A = (V ,Q,∆, q0,F ) un AFD :
I un couple (q,w) avec q ∈ Q et w ∈ V ∗ est une configurationde A ;
I (q0,w) est une configuration initiale ;
I (qf , ε) avec qf ∈ F est une configuration finale.
Mirabelle Nebut Analyse lexicale
35/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Relation de derivation, intuition et definition
Une transition d’un automate relie 2 configurations successives.
(q0, ab) `A (q1, b) et (q1, b) `A (q1, ε)
q0 q1
b b
a
a
On definit la relation de derivation, notee `A :
(q, aw) `A (q′,w) ssi ∆(q, a) = q′ avec a ∈ V
Mirabelle Nebut Analyse lexicale
36/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Sequence de transitions
L’automate effectue des sequences de transitions.
Ex : (q0, ab) `∗A (q1, ε)q0 q1
b b
a
a
On note `∗A la cloture reflexive et transitive de `A(qs ,m1) `∗A (qc ,m2) ssi :
I soit qc = qs et m1 = m2
I soit (qs ,m1) `A (qi ,m3) et (qi ,m3) `∗A (qc ,m2)
Mirabelle Nebut Analyse lexicale
37/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Langage accepte par un automate
Le langage accepte par A est :
L(A) = {m ∈ V ∗ | (q0,m) `∗A (qf , ε) avec qf ∈ F}
Mirabelle Nebut Analyse lexicale
38/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Vers des automates non deterministes : AFND
On n’a pas encore dit qu’un langage regulier peut se reconnaıtrepar un AFD.
De fait, quand on essaie de faire correspondre les operations deproduit, union, etc a des combinaisons simples d’automates, ontombe sur des automates non deterministes : AFND.
Non-determinisme = choix de transiter dans differentesconfigurations.
Un AFND accepte un mot si, parmi toutes les sequences detransitions possibles pour ce mot, il en existe une qui aboutit dansun etat final.
Mirabelle Nebut Analyse lexicale
39/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Sources de non-determinisme
I soit plusieurs transitions possibles pour un symbole a ∈ V .
I soit ε-transition
Ex des constantes entieres ou reelles :
1
0−9
2.
5
0−90−9
0−9
0
3
0−9
4
E
0−96
7
0−9
0−9
ε
Mirabelle Nebut Analyse lexicale
40/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Fonction de transition non deterministe
1
0−9
2.
5
0−90−9
0−9
0
3
0−9
4
E
0−96
7
0−9
0−9
ε
∆(q0, 9) = {q1, q2} : q0 a plusieurs successeurs par le symbole 9.
Pour un AFND, ∆ est une fonction de transition de Q × (V ∪ {ε})vers Q ou P(Q).
Mirabelle Nebut Analyse lexicale
41/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
ε-transition
Une transition etiquetee par ε ne fait pas bouger la tete de lecture.
Elle peut etre toujours declenchee, qq soit la tete de lecture.
Si q2 ∈ ∆(q1, ε), alors (q1,m) ` (q2,m)
Mirabelle Nebut Analyse lexicale
42/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Determinisation
Il existe un algorithme qui calcule a partir d’un AFND A un AFDA′ tel que L(A′) = L(A).
00−9
0−9
.2 31
0−9
0−9
E4
0−9
0−956
Mirabelle Nebut Analyse lexicale
43/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Vocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Retour aux langages reguliers
Un langage est regulier ssi il est reconnu par un AFND.
On a donc l’equivalence entre langages reguliers, expressionsregulieres et automates a nombre finis d’etats.
Mirabelle Nebut Analyse lexicale
44/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
RappelsVocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Comment se comporte un analyseur lexical ?
Construction d’un analyseur lexical
Specification d’un analyseur lexicalBases theoriques (pourquoi c’est possible et ca marche)Des expressions aux descriptions regulieres
Mirabelle Nebut Analyse lexicale
45/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Rappels
I Premier module du compilateur, au contact du texte source ;I decompose la suite de caracteres en une suite de symboles.I peut filtrer les symboles non pertinents pour la suite.
Ex :
program pgm;
int x,y;
Cas d’un scannerjouant le rolede filtre.
symbolereconnu
classe desymbole retournee
program PROGRAMespacepgm IDENT; FININSTR
saut de ligneint DECLINT
espace. . . . . .
Mirabelle Nebut Analyse lexicale
46/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Exemple pour ce cours
On veut reconnaıtre les classes de symboles (ou unites lexicales) :
I ENTIER : les constantes entieres (3, 11110) ;
I REEL : les constantes reelles, avec un exposant optionnel aexactement deux chiffres (3.14, 22.67E01) ;
I IDENT : les identificateurs a la Java sans (x, m5, j2sdk) ;
I IF : le mot-cle if ;
I DIESE : le diese #.
Mirabelle Nebut Analyse lexicale
47/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Sous quelle forme produire les symboles ?
Deux approches possibles pour retourner les symboles :
I un appel a une methode qui produit une liste de Token ;
I des appels repetes a une methode qui retourne un symbole ala fois (appelee par l’analyseur syntaxique) ←
Token next token()
Ex : pour l’entree "toto#1.2if"
1. next token() retourne IDENT("toto") ;
2. next token() retourne DIESE ;
3. next token() retourne REEL("1.2") ;
4. next token() retourne IF.
Mirabelle Nebut Analyse lexicale
48/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Levee des ambiguıtes
Pour l’entree "ti80" :
I IDENT("ti") ENTIER("80") ?
I IDENT("ti80") ?
Pour l’entree "if#" :
I IF DIESE ?
I IDENT DIESE ?
Mirabelle Nebut Analyse lexicale
49/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Reconnaissance du plus long prefixe
= tant qu’on peut continuer, on continue.
Pour l’entree "ti80" :
⇒ IDENT("ti80")
et non IDENT("ti") ENTIER("80")
Mirabelle Nebut Analyse lexicale
50/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Prise en compte de priorites
Pour l’entree "if#" :
I "if" respecte a la fois la description des symboles IF etIDENT ;
I le mot-cle IF est prioritaire.
⇒ IF DIESE
On doit pouvoir indiquer des priorites.
Mirabelle Nebut Analyse lexicale
51/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Marche arriere en cas d’echec (1)
Soit l’entree "2.3E5xy", et c le caractere courant :
I c=getChar() : ’2’ ⇒ reconnaissance d’un ENTIER
I c=getChar() : ’.’ ⇒ tentative pour reconnaıtre un REEL
I c=getChar() : ’3’ ⇒ reconnaissance d’un REEL
I c=getChar() : ’E’ ⇒ tentative pour reconnaıtre un REEL
I c=getChar() : ’5’ ⇒ tentative pour reconnaıtre un REEL
I c=getChar() : ’x’ ⇒ "2.3E5x" pas un REEL !
return Token.REEL("2.3") : dernier symbole reconnu
⇒ memorisation du dernier symbole reconnu
Mirabelle Nebut Analyse lexicale
52/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Marche arriere en cas d’echec (2)
I Entree a analyser : "2.3E5xy" ;
I Entree analysee : "2.3E5x" ;
I Entree reconnue : "2.3" ;
I l’analyse reprend sur ’E’ ;
I ⇒ il faut remettre "E5x" (deja lus) dans la chaıne a analyser
return Token.IDENT("E5xy")
⇒ remettre les caracteres lus mais pas reconnus dans le flotd’entree
Mirabelle Nebut Analyse lexicale
53/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
RappelsVocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Comment se comporte un analyseur lexical ?
Construction d’un analyseur lexical
Specification d’un analyseur lexicalBases theoriques (pourquoi c’est possible et ca marche)Des expressions aux descriptions regulieres
Mirabelle Nebut Analyse lexicale
54/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Mise en œuvre
A vos claviers la comme ca tout de suite ?
Faisable. . . mais perilleux !
Plus sur :
I construire l’automate a nombre fini d’etats sous-jacent(incluant les priorites) ;
I coder cet automate :I reconnaissance du plus long prefixe ;I memorisation du dernier symbole reconnu.
I optimiser (representation des tables de l’automate, techniquesde compression, pas dans ce cours).
Mirabelle Nebut Analyse lexicale
55/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Exemple d’AF
0−9
ID
a−z
ID
IF
a−eg−z
f
i
a−h j−z
0−9
a−z0−90−9
ENTIER#
DIESE0−9
0−9
0−9 E
0−9
0−9
.
REEL
REEL
(majuscules omises, supposees incluses dans a-z)Mirabelle Nebut Analyse lexicale
56/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Principes d’un an.lex. base sur un AFD - 1
Un analyseur lexical ne fonctionne pas exactement comme unautomate classique.
But de l’automate classique :
I reconnaıtre un langage ;
I accepter ou rejeter un mot d’entree.
But de l’analyseur :
I saucissonner un mot d’entree en sous-mots ;
I associer un symbole a chaque sous-mot ;
I accepter ou rejeter le mot d’entree.
On parlera dans ce cours d’automate fonctionnant comme unanalyseur lexical.
Mirabelle Nebut Analyse lexicale
57/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Principes d’un an.lex. base sur un AFD - 2
Etats finals = etats de reconnaissance d’un symbole.
Reconnaissance du plus long prefixe : tant qu’on peut transiter surun caractere, on le fait.
Memorisation du dernier etat final traverse + sous-mot associe.
Mirabelle Nebut Analyse lexicale
58/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Principes d’un an.lex. base sur un AFD - 3
Quand on ne peut pas transiter sur un caractere :
1. si etat courant = etat final :
I emission du symbole associe ;
I retour dans l’etat initial.
2. si etat courant 6= etat final :I si ∃ un etat memorise :
I emission du symbole associe ;I repositionnement de la tete de lecture ;I retour dans l’etat initial.
I sinon erreur, rejet mot d’entree.
Mirabelle Nebut Analyse lexicale
59/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Mise en œuvre
A vos claviers maintenant ?
Tout a fait faisable. . . mais :
I construction automate + codage = long et fastidieux ;
I en cas d’ajout d’un symbole, il faut tout recommencer !
Idee :
I generer automatiquement le code de l’automate ;
I a partir d’une description semi-formelle (ou specification) ducomportement de l’an.lex.
= ecrire/utiliser un compilateur qui genere un module decompilateur !
Mirabelle Nebut Analyse lexicale
60/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Comment decrire un an. lexical (semi) formellement ?
Theorie du langage :
I description formelle du langage associe aux unites lexicales ;
I utilisation d’expressions regulieres.
Genie logiciel : description (pas formelle). . .
I du type des symboles ;
I du type de l’analyseur lexical ;
I du nom de la methode next token() ;
I de ce qu’il faut faire en cas d’erreur ;
I etc.
Mirabelle Nebut Analyse lexicale
61/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Bases theoriques (pourquoi c’est possible et ca marche)Des expressions aux descriptions regulieres
RappelsVocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Comment se comporte un analyseur lexical ?
Construction d’un analyseur lexical
Specification d’un analyseur lexicalBases theoriques (pourquoi c’est possible et ca marche)Des expressions aux descriptions regulieres
Mirabelle Nebut Analyse lexicale
62/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Bases theoriques (pourquoi c’est possible et ca marche)Des expressions aux descriptions regulieres
Analyse lexicale et langages reguliers
I le langage des nombres reels ;
I le langage des identificateurs a la Java ;
I le langage contenant un mot-cle ;
I etc
sont des langages reguliers.
Le langage representant une classe de symboles est regulier.
Les langages reguliers sont clots par union.
⇒ le langage reconnu a l’an.lex. est un langage regulier.
Mirabelle Nebut Analyse lexicale
63/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Bases theoriques (pourquoi c’est possible et ca marche)Des expressions aux descriptions regulieres
Analyse lexicale et expressions regulieres
Un langage regulier peut etre decrit par une expression reguliere.
⇒ justifie l’utilisation des expressions regulieres pour decrire unanalyseur lexical.
Mirabelle Nebut Analyse lexicale
64/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Bases theoriques (pourquoi c’est possible et ca marche)Des expressions aux descriptions regulieres
Analyse lexicale et AF
Tout langage regulier est reconnu par un automate a nombred’etat fini (AF - AFD si deterministe, AFND sinon).
⇒ justifie l’utilisation d’un automate pour construire un an.lex.
Il existe des algorithmes :
I pour transformer une expression reguliere en AFND ;
I pour determiniser un AFND (⇒ AFD).
⇒ permet la generation automatique de code a partir des expr. reg.
Mirabelle Nebut Analyse lexicale
65/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Bases theoriques (pourquoi c’est possible et ca marche)Des expressions aux descriptions regulieres
De la specification a l’analyseur
I donner une expression reguliere Ei pour chaque unite lexicale ;
I indiquer eventuellement des priorites ;
I engendrer un AFND fonctionnant comme un an.lex quireconnaıt le langage :
(L(E1) | . . . | L(En))∗I determiniser l’AFND (algorithme standard) ;
I minimiser l’AFD (algorithme standard) ;
I enrober tout ca dans un programme suivant le parametragelogiciel indique.
C’est ce que fait l’outil JFlex pour Java (appreciable, non ?).
Mirabelle Nebut Analyse lexicale
66/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Bases theoriques (pourquoi c’est possible et ca marche)Des expressions aux descriptions regulieres
RappelsVocabulaire, mots, langagesLangages reguliersExpressions regulieresAutomates a nombre fini d’etats
Comment se comporte un analyseur lexical ?
Construction d’un analyseur lexical
Specification d’un analyseur lexicalBases theoriques (pourquoi c’est possible et ca marche)Des expressions aux descriptions regulieres
Mirabelle Nebut Analyse lexicale
67/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Bases theoriques (pourquoi c’est possible et ca marche)Des expressions aux descriptions regulieres
Les expressions regulieres c’est bien. . .
. . . mais c’est lourd !
Les constantes reelles :
(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*
.(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*
(ε|E(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9))
I ⇒ besoin d’augmenter le confort de specification ;I lisibilite ;I concision.
I sans toucher a l’expressivite (garder un langage regulier).
⇒ classes de caracteres et descriptions regulieres.
Mirabelle Nebut Analyse lexicale
68/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Bases theoriques (pourquoi c’est possible et ca marche)Des expressions aux descriptions regulieres
Classes de caracteres
Pour rassembler et nommer des ensembles de caracteres.
Ex :
I chiffre = [0 - 9]
I lettre = [a-z A - Z]
I etoile = ”*”
On respire deja mieux :
chiffre chiffre* .chiffre chiffre* (ε|E chiffre chiffre)
Mirabelle Nebut Analyse lexicale
69/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Bases theoriques (pourquoi c’est possible et ca marche)Des expressions aux descriptions regulieres
Descriptions regulieres - 2
Pour nommer des expressions regulieres et s’en resservir :
const entiere = chiffre chiffre*const reelle = const entiere.const entiere(E chiffre chiffre|ε)
Formellement : pour un alphabet d’entree Σ
nom1 = ER1(Σ)nom2 = ER2(Σ, nom1)
. . .nomn = ERn(Σ, nom1, . . . , nomn−1)
ou :
I les nomi sont des noms distincts 2 a 2 ;
I les ERi sont des expr. reg. sur Σ ∪ {nom1, . . . , nomi−1}.Mirabelle Nebut Analyse lexicale
70/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Bases theoriques (pourquoi c’est possible et ca marche)Des expressions aux descriptions regulieres
Descriptions regulieres - 2
Pas de descriptions recursives !
Pas de const entiere = chiffre | chiffre const entiere
Pas non plus de recursivite indirecte.
Le langage engendre par une description reguliere avec recursiviten’est pas necessairement regulier.
Mirabelle Nebut Analyse lexicale
71/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Bases theoriques (pourquoi c’est possible et ca marche)Des expressions aux descriptions regulieres
Specifications a la JFlex
I nommage de classes de caracteres et descriptions regulieres ;
ident = lettre (lettre | chiffre)*blanc = [ \n\t]
I symboles du + au - prioritaires, association d’une action a uneclasse de symbole ;"if" {return new Symbol(IF);}
// IF prioritaire sur IDENT
ident {return new Symbol(IDENT);}blanc { // rien, retenu par le crible}
Rendez-vous en TD et TP !
Mirabelle Nebut Analyse lexicale
72/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Bases theoriques (pourquoi c’est possible et ca marche)Des expressions aux descriptions regulieres
Aparte (1) sur la generation automatique de code
Avant d’ecrire un generateur, se demander si c’est :
1. possible ;
2. rentable.
Possible :
I existence d’un algorithme fonde rigoureusement ;
I oui dans le cas d’un analyseur lexical, grace aux fondementsde theorie du langage (sem. operationnelle).
Rentable :
I le generateur devra etre utilise plusieurs fois !
I modifications demandant regeneration, ou generation dedifferents analyseurs.
Mirabelle Nebut Analyse lexicale
73/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Bases theoriques (pourquoi c’est possible et ca marche)Des expressions aux descriptions regulieres
Aparte (2) sur la generation automatique de code
Dans votre cas, le generateur est deja ecrit.
Choisir le plus rentable en considerant :
I temps d’apprentissage de l’outil ;
I utilisation des interfaces imposees par l’outil ;
I debogage pas toujours evident ;
I versus tout faire a la main, mais tout controler.
En TP je vous force la main : tout le monde utilisera JFlex.
Mirabelle Nebut Analyse lexicale
74/74
RappelsComment se comporte un analyseur lexical ?
Construction d’un analyseur lexicalSpecification d’un analyseur lexical
Bases theoriques (pourquoi c’est possible et ca marche)Des expressions aux descriptions regulieres
Apparte (3) sur les specifications formelles
Avantage : oblige a tout decrire, lever toute ambiguıte.
Ex :
I pour les constantes reelles : chiffres avant le . ?
I pour les constantes reelles : chiffres apres le . ?
I pour les identificateurs : majuscules ?
I etc.
Mirabelle Nebut Analyse lexicale