Techniques de compilation

Programming, Compiler Theory · course

Browse all programmation documents

Techniques de compilation

Leila Jemni Ben Ayed

Ecole Nationale des Sciences de lInformatique

Ecole Nationale des Sciences de lInformatique

Lobjectif de ce cours est d tendre les connaissances en th orie des

Lobjectif de ce cours est d tendre les connaissances en th orie des

langages et des automates la description des

langages de

programmation et leur analyse syntaxique en vue de leur compilation. Ce

cours d crit les concepts fondamentaux des langages de programmation

en commen ant, dans une premi re partie, par donner la syntaxe et la

s mantique, en insistant davantage sur la syntaxe. La traduction en code

interm diaire et lenvironnement dex cution font lobjet de la deuxi me

partie.

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

1

Techniques de compilation

Introduction la compilation

I.

II. Compilateur en une seule passe

II. Compilateur en une seule passe

III. Analyse syntaxique

III. Analyse syntaxique

IV. Analyse s mantique

V. Traduction en code pour

machine abstraite pile

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

2

I. Introduction la Compilation

Plan

I.1. Compilateurs

I.2. Les Grammaires non contextuelles

I.3. Phases de Compilation

I.4. Qualit dun Compilateur

I.5. Outils pour la construction de Compilateurs

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

3

I.1. Compilateurs

volution des langages:

" Langage machine

" Langage assembleur

" Langages volu s : C, PASCAL, ADA (Algorithmiques)

PROLOG (Logiques)

" Langages de 4 me g n ration

Un compilateur est un programme qui

lit un

programme crit dans un premier langage(langage

source) et le traduit en un programme quivalent

crit dans un autre langage (le langage cible).

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

4

I.1. Compilateurs

Au cours de ce processus de traduction, un r le du

compilateur est de signaler son utilisateur la

pr sence derreurs dans le programme source.

PSource

Compilateur

PAssembleur

Messages

derreur

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

5

I.2. Exemples de grammaires non

I.2.

contextuelles

contextuelles

1) Une grammaire qui g n re lensemble des expressions arithm tiques utilisant les op rateurs + et * et

les chiffres {0,1,...9}

G = ({Exp}, {+, *, (, ), 0, 1, &9}, Exp, R}

R = {

Exp

Exp

Exp

Exp

Exp

Exp

Exp

Exp

Exp

Exp

Exp

Exp

Exp

Exp

Exp + Exp

Exp * Exp

(Exp)

0

1

1

2

3

4

5

6

7

8

9 }

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

6

I.2. Exemples de grammaires non

I.2.

contextuelles

contextuelles

2) Une grammaire qui g n re lensemble des expressions bool ennes utilisant les op rateurs

arithm tiques (oparith), les op rateurs relationnels (oprel) et les op rateurs bool ens (non, et et

ou) sur les identificateurs (id) et les nombres entiers (nb)

R = {

Expb

Expb

Expb

Expb

Expb

Expr

Expr

Expa

Expa

Expa

Expa

}

Expr

non(Expb)

Expb et Expb

Expb ou Expb

Expb ou Expb

Expa oprel Expa

(Expr)

Expa oparith Expa

(Expa)

id

nb

G = (V, T, Expb, R)

V = {Expb, Expr, Expa}

T = {id, nb, oprel, oparith, non, et, ou, (, )}

T = {id, nb, oprel, oparith, non, et, ou, (, )}

o

{<, >, <=, >=, <>, =}

oprel

oparith

{+, *, /, -}

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

7

I.2. Exemples de grammaires non

I.2.

contextuelles

contextuelles

3) Une grammaire qui g n re une s quence non vide de d clarations suivie de D but, suivie

dune s quence non vide dinstructions suivie de Fin . Chaque instruction peut tre une

instruction daffectation (se termine par ;) ou une instruction conditionnelle avec ou sans

sinon (qui se termine par FinSi). Les types utilis s sont entier et r el. La s quence g n r e

commence par program suivi dun nom.

R = {

Program id S_DCL D but S_INST Fin

G = (V, T, P, R)

V = {P, S_DCL, DCL, S_INST, INST, Expb, Expr, Expa}

T = {Program, D but, Fin, Var, :, id, :=, ;, Si, Sinon, Fin Si, (, ),

oparith, oprel, non, et, ou, entier, r el}

oparith, oprel, non, et, ou, entier, r el}

INST | INST S_INST

Var L_id : TYPE;

id | id, L_id

id | id, L_id

entier | r el

P

S_DCL DCL | DCL S_DCL

DCL

L_id

L_id

TYPE

S_INST

INST

INST

INST

Expb

Expr

Expr

Expa

Expa

Expa

Expa

}

id := Expa;

Si Expb alors S_INST Fin Si

Si Expb alors S_INST Sinon S_INST Fin Si

Expr | non(Expb) | Expb et Expb | Expb ou Expb

Expa oprel Expa

(Expr)

Exp oparith Exp

(Expa)

id

nb

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

8

I.2. Exemples de grammaires non

I.2.

contextuelles

contextuelles

V rifier que la grammaire pr c dente g n re le

programme suivant :

Program test

Var a, b : entier;

D but

a:= 10;

Si a>= 10 alors a:= 20; Fin Si

Fin

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

9

I.2. Exemples de grammaires non

I.2.

contextuelles

contextuelles

Le programme est transform en une s quence de

terminaux.

Program id

Var id, id : entier;

D but

id:= nb;

Si id oprel nb alors id:= nb; Fin Si

Fin

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

10

I.2. Exemples de grammaires non

I.2.

contextuelles

contextuelles

P

S_DCL

Program

id

DCL D but

S_INST Fin

Var L_id : TYPE ;

Var L_id : TYPE ;

INST S_INST

INST S_INST

id , L_id entier

id := Expa ;

INST

En parcourant les feuilles

de larbre de gauche

droite, on trouve le

programme analyser

Donc ce programme est

syntaxiquement correct

id

nb Si Expb alors S_INST Fin Si

Expr

INST

Expa oprel Expa

id := Expa ;

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

id

nb

nb

11

I.3. Phases de Compilation

On distingue deux parties:

Analyse

" Partitionne le programme source en ses constituants et

en cr e une repr sentation interm diaire.

Synth se

Synth se

" Construit

le programme

cible

partir de

la

repr sentation interm diaire.

" Lanalyse

utilise

dune

grammaire non contextuelle qui g n re des

programmes du langage utilis .

constituants

les

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

12

I.3. Phases de compilation

PSource

Analyse lexicale

Analyse Syntaxique

Analyse s mantique

G n ration de code

interm diaire

Optimisation de code

G n ration de code

machine

Gestion de la

table de

symboles

Table des

identificateurs,

mots r serv s

et constantes

Advertisement

Gestion des

Gestion des

erreurs

Leila Jemni Ben Ayed

PCible

Cours Techniques de Compilation-2012-

2013

13

I.3. Phases de compilation

Les compilateurs

comportent ces deux

parties.

on

change

de

Si

machine, on peut ne

machine, on peut ne

modifier que la partie

terminale

Psource

Analyse

Partie frontale

G n ration de

code

interm diaire

PLI

P

Partie terminale

G n rateur de code

machine

PASS

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

14

I.3. Phases de compilation

Interface avec lanalyseur lexical

Type dun id

Valeur dun nb

Op rateur PPQ pour oprel

Lire caract re

Entr e

Rendre

caract re

Passer unit

lexicale et ses

attributs

Analyseur

lexical

lexical

Analyseur

syntaxique

syntaxique

" Pour lAS, lAL retourne lUL

" Pour lAsem, il retourne le type, la port e, &

" Pour le traducteur, il retourne la valeur du nombre, lop rateur utilis , &

" Si C est une variable caract re et le prog source est dans lentr e standard alors

linstruction C = getchar(); affecte le prochain caract re dentr e C et

linstruction ungetc(C, stdin); rend lentr e standard stdin la valeur de C.

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

15

I.3. Phases de compilation

Implantation des interactions avec lanalyseur lexical

Utilise getchar();

pour lire un

caract re

Rendre caract re

En utilisant ungetc(C, stdin)

AnalLex()

analyseur

analyseur

lexical

Retourne une

unit lexicale

lappelant

ValLex

Positionne la

variable globale la

valeur de lunit

lexicale

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

16

I.3. Phases de compilation

Analyse du programme source :

A chaque langage de programmation est associ e une

grammaire non contextuelle.

Lanalyse comprend quatre phases :

Phase1: analyse lin aire (ou lexicale) au cours de laquelle

Phase1: analyse lin aire (ou lexicale) au cours de laquelle

le flot de caract res formant le programme source est lu

de gauche droite et group en unit s lexicales qui sont

une suite de caract res ayant une signification collective.

Ces unit s lexicales sont les terminaux de la grammaire.

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

17

I.3. Phases de compilation

LAl retourne une UL pour lAS

Pour lAsem, si lUL est id alors il retourne une entr e dans

la table des identificateurs pour lidentificateur trouv .

Pour le traducteur, si lUL est nb, alors il retourne sa valeur

" si lUL est oprel alors il retourne lop rateur en question

" si lUL est oprel alors il retourne lop rateur en question

lUL est oparith alors il retourne lop rateur en

" Si

question

Quand lanalyseur lexical rencontre un identificateur non

mot cl , il le cherche dans la table des id. Sil existe alors il

retourn lentr e associ e sinon il lui cr t une entr e et

retourne le num ro dentr e.

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

18

I.3. Phases de compilation

par exemple si on dispose de la grammaire avec les r gles

id opaff Exp

suivantes:

P

Exp

Les unit s lexicales associ es au mot :

Les unit s lexicales associ es au mot :

id | nb | (Exp) | Exp oparith Exp

position := initiale + vitesse * 60

Sont:

1)

3)

5)

6)

lidentificateur position

Lidentificateur initiale

Lidentificateur vitesse

Le signe de multiplication oparith 7) Le nombre nb

2) Le symbole daffectation opaff

4) Le signe daddition oparith

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

19

I.3. Phases de compilation

Le lex me est la suite de caract res du fichier source qui forme lunit

lexicale. Le tableau suivant pr sente les lex mes et les unit s lexicales

associ es au mot position := initiale + vitesse * 60

R sultat

de lAL

lex me

position

:=

:=

initiale

+

vitesse

*

60

id

1

opaff

:=

id

2

oparith

+

Unit lexicale

Id

Opaff

Opaff

Id

Oparith

Id

Oparith

nb

id

3

oparith

*

nb

60

Pour lAS

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

20

I.3. Phases de compilation

par exemple si on dispose de la grammaire avec les r gles

suivantes:

DCL

Var L_ID : TYPE;

| Var L_ID : TYPE; DCL

| e

| e

L_ID

TYPE

id | id, L_ID

entier | r el

Les unit lexicales associ es au mot (retourn es par lAL lAS):

Var a, b: entier; var c: r el;

Sont les suivantes :

Var

id

,

id

:

entier

;

Var

id

:

r el

;

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

21

e

e

e

e

e

e

I.3. Phases de compilation

par exemple si on dispose de la grammaire avec les r gles

suivantes:

DCL

Var L_ID : TYPE;

| Var L_ID : TYPE; DCL

| e

| e

L_ID

TYPE

id | id, L_ID

entier | r el

Table des id de variables

N

Lex me

Type

1

2

2

3

a

b

b

c

entier

entier

entier

r el

Si lAL retourne un r sultat lAS et lAsem alors le r sultat de

lAL pour le mot Var a, b: entier; var c: r el; sera :

Var

0

Id

1

,

0

Id

2

:

0

entier

0

;

0

Var

0

Id

3

:

0

r el

0

;

0

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

22

e

e

e

e

e

e

I.3. Phases de compilation

Soit le mot a := c + 34; lAL retourne

Pour lAS : id := id oparith nb;

Pour lAsem : 1 := 3 oparith nb;

Id

Advertisement

1

:=

0

R sultat de lAL

Id

3

oparith

+

nb

34

;

0

c-a-d entier := r el oparith entier

Pour le traducteur : @a := @c + 34;

Pour le traducteur : @a := @c + 34;

N

1

2

3

Table des id de variables

Lex me

a

b

c

Type

entier

entier

r el

Adresse

@a

@b

@c

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

23

I.3. Phases de compilation

par exemple si on dispose de la grammaire avec les r gles

suivantes:

P

DCL

DCL L_I

Var L_ID : TYPE;

| Var L_ID : TYPE; DCL

| Var L_ID : TYPE; DCL

| e

id | id, L_ID

entier | r el

L_ID

TYPE

L_I

Table des id de variables

N

Lex me

Type

1

2

2

3

a

b

b

c

entier

entier

entier

r el

id := nb; | id := id; | id := nb; L_I | id := id; L_I

Si lAL retourne un r sultat lAS, lAsem et le traducteur alors le r sultat de

lAL pour le mot Var a, b: entier; var c: r el; b := 10; sera :

Var

0

Id

1

,

0

Id

2

:

0

entier

0

;

0

Var

0

Id

3

:

0

r el

0

;

0

id

2

:=

0

nb

10

;

0

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

24

I.3. Phases de compilation

Var a, b: entier; var c: r el; b := 10;

Table des id de variables

N

Lex me

Type

1

2

2

3

a

b

b

c

entier

entier

entier

r el

Var

0

Id

1

,

0

Id

2

:

0

entier

0

;

0

Var

0

Id

3

:

0

r el

0

;

0

id

2

:=

0

nb

10

;

0

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

25

I.3. Phases de compilation

Analyse du programme source :

les

sont

unit s

lexicales

Phase2: analyse hi rarchique (ou syntaxique) au cours de

regroup es

laquelle

hi rarchiquement en structure grammaticale.

Lanalyse syntaxique consiste v rifier que la suite dunit s

Lanalyse syntaxique consiste v rifier que la suite dunit s

lexicales est g n r e par la grammaire du langage.

Ceci revient construire un arbre danalyse (ou syntaxique)

dont les feuilles concordent avec la suite dunit s lexicales

en les parcourant de gauche droite.

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

26

I.3. Phases de compilation

Analyse du programme source :

Phase3: analyse s mantique au cours de laquelle on

op re certain contr le pour sassurer que lassemblage des

constituants du programme a un sens. Une des op rations

principales dun Asem est

le contr le de type des

le contr le de type des

principales dun Asem est

op randes dune op ration, le contr le de la port e des

identificateurs

sous

programme, &.

au moment

lappel

dun

de

Dans le contr le de type,

lanalyseur s mantique peut

ins rer des op rations de conversion pour les expr dentier

vers r el.

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

27

I.3. Phases de compilation

Analyse du programme source :

Phase3: analyse s mantique

Nous distinguons deux types derreurs s mantiques:

" s mantique statique, contr l e au moment de la compilation telle

que :

que :

Variable non d clar e

lincompatibilit de type,

la port e dune variable&

" S mantique dynamique, contr l e au moment de lex cution telle

que :

la division par z ro

les boucles infinies

le d bordement m moire

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

28

I.3. Phases de compilation

Analyse du programme source :

Phase4: traduction en code interm diaire au cours de

laquelle la s quence dinstructions du programme est

traduite en une s quence dinstructions dans un langage

interm diaire. Par exemple : le langage pour machine

interm diaire. Par exemple : le langage pour machine

pile, le langage C, &

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

29

I.3. Phases de compilation

Analyse du programme source :

La table des symboles contient des informations sur les

diff rents symboles et les attributs associ s. Par exemple

les identificateurs de

les mots cl s (ou r serv s) et

variables en sp cifiant lunit lexicale id et leurs attributs:

variables en sp cifiant lunit lexicale id et leurs attributs:

type, adresse, etc&

A chaque fois quune unit lexicale id est trouv e par lAL,

le lex me associ est ins r dans la table des symboles sil

na pas t d j ins r et lAL retourne id et un pointeur

vers une entr e de la table des symboles.

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

30

I.3. Phases de compilation

Exemple

On veut illustrer les phases de compilation sur lexemple

suivant :

Position := Initiale + Vitesse * 60;

id := Exp;

id := Exp;

La grammaire est la suivante :

P

P

Exp

id | nb | (Exp) | Exp + Exp | Exp * Exp

Une Contrainte s mantique doit tre v rifi e :

Lop rateur de multiplication doit tre appliqu deux

op randes de m me type (entier, entier) ou (r el, r el)

Pour notre exemple, Vitesse est un r el et 60 est un nombre

entier, il faut alors convertir 60 dentier vers r el (60.0)

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

31

I.3. Phases de compilation

" Analyse lexicale

id1 := id2 + id3 * nb;

" Analyse syntaxique

P

id := Exp

;

Exp + Exp

id Exp * Exp

id nb

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

32

I.3. Phases de compilation

" Analyse s mantique

Comme vitesse est un r el, un compilateur peut convertir le nombre

entier nb en r el pour pouvoir utiliser lop rateur de multiplication

Var position, Initiale,

Vitesse : r el;

P

Analyseur

S mantique

id := Exp

Table des id de variables

Exp + Exp

N

Lex me

Type

1

2

3

Position

Initiale

Vitesse

R el

R el

R el

id Exp * Exp

Advertisement

id

60

entier vers r el

60.0

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

33

I.3. Phases de compilation

" G n ration de code interm diaire

Temp1 := Entier vers r el(60);

Temp2 := Temp1*id3;

Temp3 := id2 + Temp2;

id1 := Temp3;

" Optimisation de code Analyse syntaxique

" Optimisation de code Analyse syntaxique

Temp1 := id3*60.0;

id1 := id2 + Temp1;

" G n ration de code interm diaire (Machine VON NEUMAN)

Machin registres

MOVF id3, R2

MULF #60.0, R2

MOVF id2, R1

ADDF R2, R1

MOVF R1, id1

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

34

I.4. Qualit dun compilateur

Fournir le maximum derreurs en

une seule compilation

une seule compilation

Rapidit

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

35

I.5. Outils pour la construction de

I.5. Outils pour la construction de

compilateurs

compilateurs

Assembleur

Assembleur

Ecriture en langage volu

Constructeurs automatiques de compilateurs : LEX et YACC

Grammaire non

Grammaire non

contextuelle du

langage

Description

des unit s

lexicales du

langage

Leila Jemni Ben Ayed

G n rateur automatique

danalyseur syntaxique

Analyseur Syntaxique

crit en C ou en LPascal

G n rateur automatique

danalyseur lexical

Analyseur lexical

crit en C ou en LPascal

Yacc

Lex

Cours Techniques de Compilation-2012-

2013

36

II. Analyse lexicale

Plan

II.1. Pr sentation g n rale

II.2. Automates finis et expressions r guli res

II.2. Automates finis et expressions r guli res

II.3. Sp cification des unit s lexicales

II.4. Reconnaissance des unit s lexicales

II.5. Conception dun g n rateur dun analyseur

lexical

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

37

II.1. Pr sentation g n rale

" Lanalyseur

lexical constitue la premi re phase dun

compilateur. Sa t che principale est de lire les caract res

dentr e et de produire comme r sultat une suite dunit s

lexicales que lanalyseur syntaxique va utiliser.

Programme

Source

Lire caract re

Rendre

caract re

Analyseur

lexical

Passer unit

lexicale et ses

lexicale et ses

attributs

Obtenir

prochaine

unit lexicale

Table des

symboles

Analyseur

syntaxique

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

38

II.1. Pr sentation g n rale

"

Rq. LAL est un sous programme de lAS. A la r ception de

prochaine unit , lAL lit les caract res dentr e jusqu ce quil puisse identifier

la prochaine unit lexicale.

Unit lexicale : produite la m me pour un ensemble de chaines de caract res

Mod le dune unit lexicale : r gle qui d crit une unit lexicale (Expression r guli re)

Lex me : une suite de caract res du PS qui concorde avec le mod le dune unit

lexicale.

Unit Lexicale

Lex mes

Description formelle des

mod les

const

if

oprel

id

nb

const

if

const

If

< <= = <> > >=

(<+<=+=+<>+>+>=)

Pi compte D2

3 6.780 6.0

lettre(lettre+chiffre)*

Chiffre+ + chiffre+.chiffre+

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

39

II.2. Automates finis et expressions

II.2. Automates finis et expressions

r guli res

r guli res

" Un analyseur lexical est bas sur les syst mes de transition (ou bien les

automates finis)

Un diagramme de transition pour la reconnaissance de >=

D but

0

>

=

1

autre

2

3

return(oprel, PGE)

*

return(oprel, PGQ)

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

40

II.2. Automates finis et expressions

II.2. Automates finis et expressions

r guli res

r guli res

Un diagramme de transition pour la reconnaissance

de >=

D but

>

0

=

1

autre

2

3

return(oprel, PGE)

*

return(oprel, PGQ)

Ce diagramme fonctionne comme suit:

Son tat de d part est l tat 0. Dans l tat 0, on lit le prochain caract re de lentr e. On suit larc

> depuis l tat 0 vers l tat 1 si le caract re dentr e est >. Sinon, on na r ussi reconna tre ni >

ni >=. En atteignant l tat 1, on lit le prochain caract re dentr e. Larc tiquet = entre l tat 1

et l tat 2 doit tre suivi si le caract re dentr e est = et le diagramme reconna t >= (PGE).

Autrement, larc tiquet autre conduit l tat 3. Le diagramme reconna t ainsi > (PGQ) et

recule dun caract re dans lentr e. On utilise une * pour signaler les tats dans lesquels ce

recul dans lentr e doit tre fait.

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

41

II.2. Automates finis et expressions

II.2. Automates finis et expressions

r guli res

r guli res

Un diagramme de transition pour la

reconnaissance des op rateurs de relation

D but

0

<

1

=

>

=

>

autre

2

3

4

return(oprel, PPE)

return(oprel, DIF)

*

return(oprel, PPQ)

5

return(oprel, EGA)

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

6

=

autre

return(oprel, PGE)

*

return(oprel, PGQ)

42

7

8

II.2. Automates finis et expressions

II.2. Automates finis et expressions

r guli res

r guli res

Un diagramme de transition pour la reconnaissance

des identificateurs et des mots cl s

lettre, chiffre

D but

0

lettre

autre

1

*

*

2

return(UnilexId(), RangerId())

Laction sp cifi e par le symbole * permet de reculer dune position sur le

fichier source apr s la consommation dun symbole autre quune lettre ou

un chiffre.

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

43

II.2. Automates finis et expressions

II.2. Automates finis et expressions

r guli res

r guli res

Les fonctions RangerId() et UnilexId()

-

-

La fonction RangerId() a acc s au tampon o lunit lexicale identificateur a t

localis e. On examine la table des symboles et si on trouve le lex me avec

lidentificateur mot cl , RangerId() rend 0. Si on trouve le lex me comme variable du

programme, RangerId() rend un pointeur vers une entr e dans la table des symboles. Si

on ne trouve pas le lex me dans la table des symboles, il y est plac en tant que

variable et un pointeur vers cette nouvelle entr e est retourn .

variable et un pointeur vers cette nouvelle entr e est retourn .

La fonction UnilexId() recherche le lex me dans la table des symboles. Si le lex me est

un mot cl , lunit lexicale correspondante est retourn e; autrement, lunit lexicale id

est retourn e.

NB.

1)

2)

Le diagramme de transition ne change pas si on doit reconna tre de nouveaux mots

cl s; on initiale simplement la table des symboles avec les nouvelles chaines et les

nouvelles unit s lexicales.

En pratique, la table des symboles peut tre r partie sur deux tables: table des

mots cl s et table des identificateurs de variables.

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

44

II.3. Sp cification des unit s lexicales

Expressions r guli res

Les expressions r guli res sont une notation importante pour

sp cifier des mod les dunit s lexicales.

Exemples:

Soit L lensemble {A, B, &, Z, a, b, &z} et C lensemble {0, 1, &9}

L+C ou(L C) est lensemble des lettres et des chiffres

L+C ou(L C) est lensemble des lettres et des chiffres

1.

1.

LC est lensemble des chaines form es dune lettre suivie

2.

dun chiffre

L4 est lensemble des chaines de quatre lettres

L* est lensemble de toutes les lettres, y compris e , la

chaine vide.

L(L+C)* est lensemble de toutes les chaines de lettres et

de chiffres commen ant par une lettre.

C+ est lensemble de toutes les chaines dau moins un

chiffre (repr sentations d cimales des entiers naturels)

3.

4.

6.

5.

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

45

II.3. Sp cification des unit s lexicales

D finitions r guli res

Soit S un alphabet de symboles de base, une d finition r guli re est une suite de

d finitions de la forme :

r1

r2

d1

d2

&&

dn

Advertisement

O chaque di est un nom distinct et chaque ri est une expression r guli re sur les

rn

symboles de S

{d1, d2, &, di-1}

Exemples:

Lettre

chiffre

id

A|B|&|Z|a|b|&|z

0|1|&|9

Lettre(Lettre + Chiffre)*

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

46

II.4. Reconnaissance des unit s

II.4. Reconnaissance des unit s

lexicales

lexicales

Nous utilisons les diagrammes de transition pour reconna tre des unit s lexicales

Exemple:

Consid rons le fragment de la grammaire suivant:

Instr

si expr alors instr

| si expr alors instr sinon instr

| id opaff id pv

| id opaff nb pv

| id opaff nb pv

terme oprel terme

| terme

id

| nb

expr

terme

O si, alors, sinon, oprel, id et nb engendrent les ensembles de chaines donn es par

les d finitions r guli res suivantes:

si

si

alors

sinon

oprel

id

alors

sinon

< | <= | = | <> | > | >=

lettre(lettre|chiffre)*

nb

opaff

pv

chiffre+

:=

;

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

47

II.4. Reconnaissance des unit s

II.4. Reconnaissance des unit s

lexicales

lexicales

Le mot en entr e dans le fichier source est le suivant :

si a1 >= b alors a1

10;

:=

N

lex me

type

Mots cl s

1

1

2

3

a1

a1

b

&

&

&

&

&

si

si

alors

Lanalyseur lexical retourne la s quence suivante dunit s

lexicales avec leurs attributs:

si

0

id

1

oprel

PGE

id

2

alors

0

id

1

opaff

:=

nb

10

pv

;

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

48

II.4. Reconnaissance des unit s

II.4. Reconnaissance des unit s

lexicales

lexicales

Rq. On suppose que les lex mes sont s par s par un

espace consistant dune suite non vide de blancs,

tabulations et fins de lignes. Notre analyseur lexical

doit liminer ces espaces en comparant une chaine

avec la d finition r guli re suivante :

D lim

D lim

bl

d lim+

blanc | tabulation | fin de ligne

blanc | tabulation | fin de ligne

Si lanalyseur lexical trouve une correspondance avec

bl, il ne retourne pas lunit lexicale lanalyseur

lunit

syntaxique.

lexicale qui suit le blanc et le retourne lanalyseur

syntaxique.

Il continue pour

rechercher

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

49

II.4. Reconnaissance des unit s lexicales

Syst me de transition associ un analyseur lexical

bl, tab, \n

l

D but

0

Echec()

autre

EOF

l, c

3

1

5

c

<

<

=

>

autre

c

2

autre

=

=

>

autre

9

*

return(UnilexId(), RangerId())

4

*

return(nb, val)

return(oprel, PPE)

return(oprel, PPE)

return(oprel, DIF)

6

7

*

return(oprel, PPQ)

8

return(oprel, EGA)

14

13

return(EOF, 0)

10

=

autre

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

return(oprel, PGE)

*

return(oprel, PGQ)

50

11

12

II.4. Reconnaissance des unit s lexicales

Syst me de transition associ un analyseur lexical

Init(Val)

bl, tab, \n

l

l, c

1

D but

0

Add(Val, c)

c

3

autre

2

Add(Val, c)

c

autre

*

return(UnilexId(), RangerId())

4

*

return(nb, conv(val))

return(oprel, PPE)

return(oprel, PPE)

return(oprel, DIF)

6

7

Erreur()

autre

EOF

5

<

<

=

>

=

=

>

autre

9

*

return(oprel, PPQ)

8

return(oprel, EGA)

14

13

return(EOF, 0)

10

=

autre

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

return(oprel, PGE)

*

return(oprel, PGQ)

51

11

12

II.4. Reconnaissance des unit s lexicales

Code C dun analyseur lexical

Unilex AnalLex() / Unilex est une chaine si Alalex retourne uniquement lunit lexicale/

{

/* Unilex est un entier si Analex retourne lunit lexicale et chaque unit est d finie comme une

constante*/

While(1)

/* Unilex est un enregistrement si Analex

retourne lunit lexicale et un attribut*/

{

Switch(etat)

Switch(etat)

{

case 0: Init(Chaine); car = carsuivant();

if(car == || car == \t || car = \n)

{ etat = 0; debutlex ++; }

else if( car == <) etat = 5;

else if (car == =) etat = 9;

else if (car == >) etat = 10;

else if (isletter(car)) Ajouter(car, chaine);

etat = 1;

else if(isdigit(car)) Ajouter(car, chaine);

etat = 3;

else if(car == EOF) etat = 13;

else Erreur();

case 1: car = carsuiv();

if(isletter(car) || isdigit(car))

ajouter(car, chaine);;

else etat = 2;

break;

case 2: Reculer(1); RangerId(); return(UniLexId()); /*

cas o lanalyseur lexical retourne uniquement

cas o lanalyseur lexical retourne uniquement

*/lunit lexicale sinon, il faut utiliser un

enregistrement (symbole)*/

&&&&.

case 3: car = carsuiv();

if(isdigit(car)) ajouter(car, chaine);

else etat = 4;

break;

case 4 : Reculer(1); Return(NB); case 6: Return(Oprel);

&&&&&

case 13: Return(EOF);

}

Leila Jemni Ben Ayed

Cours Techniques de Compilation-2012-

2013

52

II.4. Reconnaissance des unit s lexicales

Code C dun analyseur lexical (cas du retour dun enregistrement dans une

variable globale symbole deux champs (UL, Att))

Unilex AnalLex() / Unilex est une chaine si Alalex retourne uniquement lunit lexicale/

{

/* Unilex est un entier si Analex retourne lunit lexicale et chaque unit est d finie comme une

constante*/

While(1)...