Analyse lexicale - univ-lille.fr

74
Rappels Comment se comporte un analyseur lexical ? Construction d’un analyseur lexical Sp´ ecification d’un analyseur lexical Analyse lexicale Mirabelle Nebut Bureau 332 - M3 mirabelle.nebut at lifl.fr 2012-2013 Mirabelle Nebut Analyse lexicale

Transcript of Analyse lexicale - univ-lille.fr

Page 1: Analyse lexicale - univ-lille.fr

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

Page 2: Analyse lexicale - univ-lille.fr

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

Page 3: Analyse lexicale - univ-lille.fr

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

Page 4: Analyse lexicale - univ-lille.fr

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

Page 5: Analyse lexicale - univ-lille.fr

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

Page 6: Analyse lexicale - univ-lille.fr

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

Page 7: Analyse lexicale - univ-lille.fr

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

Page 8: Analyse lexicale - univ-lille.fr

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

Page 9: Analyse lexicale - univ-lille.fr

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

Page 10: Analyse lexicale - univ-lille.fr

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

Page 11: Analyse lexicale - univ-lille.fr

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

Page 12: Analyse lexicale - univ-lille.fr

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

Page 13: Analyse lexicale - univ-lille.fr

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

Page 14: Analyse lexicale - univ-lille.fr

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

Page 15: Analyse lexicale - univ-lille.fr

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

Page 16: Analyse lexicale - univ-lille.fr

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

Page 17: Analyse lexicale - univ-lille.fr

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

Page 18: Analyse lexicale - univ-lille.fr

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

Page 19: Analyse lexicale - univ-lille.fr

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

Page 20: Analyse lexicale - univ-lille.fr

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

Page 21: Analyse lexicale - univ-lille.fr

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

Page 22: Analyse lexicale - univ-lille.fr

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

Page 23: Analyse lexicale - univ-lille.fr

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

Page 24: Analyse lexicale - univ-lille.fr

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

Page 25: Analyse lexicale - univ-lille.fr

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

Page 26: Analyse lexicale - univ-lille.fr

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

Page 27: Analyse lexicale - univ-lille.fr

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

Page 28: Analyse lexicale - univ-lille.fr

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

Page 29: Analyse lexicale - univ-lille.fr

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

Page 30: Analyse lexicale - univ-lille.fr

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

Page 31: Analyse lexicale - univ-lille.fr

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

Page 32: Analyse lexicale - univ-lille.fr

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

Page 33: Analyse lexicale - univ-lille.fr

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

Page 34: Analyse lexicale - univ-lille.fr

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

Page 35: Analyse lexicale - univ-lille.fr

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

Page 36: Analyse lexicale - univ-lille.fr

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

Page 37: Analyse lexicale - univ-lille.fr

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

Page 38: Analyse lexicale - univ-lille.fr

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

Page 39: Analyse lexicale - univ-lille.fr

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

Page 40: Analyse lexicale - univ-lille.fr

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

Page 41: Analyse lexicale - univ-lille.fr

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

Page 42: Analyse lexicale - univ-lille.fr

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

Page 43: Analyse lexicale - univ-lille.fr

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

Page 44: Analyse lexicale - univ-lille.fr

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

Page 45: Analyse lexicale - univ-lille.fr

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

Page 46: Analyse lexicale - univ-lille.fr

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

Page 47: Analyse lexicale - univ-lille.fr

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

Page 48: Analyse lexicale - univ-lille.fr

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

Page 49: Analyse lexicale - univ-lille.fr

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

Page 50: Analyse lexicale - univ-lille.fr

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

Page 51: Analyse lexicale - univ-lille.fr

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

Page 52: Analyse lexicale - univ-lille.fr

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

Page 53: Analyse lexicale - univ-lille.fr

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

Page 54: Analyse lexicale - univ-lille.fr

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

Page 55: Analyse lexicale - univ-lille.fr

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

Page 56: Analyse lexicale - univ-lille.fr

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

Page 57: Analyse lexicale - univ-lille.fr

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

Page 58: Analyse lexicale - univ-lille.fr

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

Page 59: Analyse lexicale - univ-lille.fr

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

Page 60: Analyse lexicale - univ-lille.fr

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

Page 61: Analyse lexicale - univ-lille.fr

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

Page 62: Analyse lexicale - univ-lille.fr

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

Page 63: Analyse lexicale - univ-lille.fr

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

Page 64: Analyse lexicale - univ-lille.fr

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

Page 65: Analyse lexicale - univ-lille.fr

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

Page 66: Analyse lexicale - univ-lille.fr

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

Page 67: Analyse lexicale - univ-lille.fr

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

Page 68: Analyse lexicale - univ-lille.fr

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

Page 69: Analyse lexicale - univ-lille.fr

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

Page 70: Analyse lexicale - univ-lille.fr

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

Page 71: Analyse lexicale - univ-lille.fr

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

Page 72: Analyse lexicale - univ-lille.fr

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

Page 73: Analyse lexicale - univ-lille.fr

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

Page 74: Analyse lexicale - univ-lille.fr

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