Académique Documents
Professionnel Documents
Culture Documents
Compilation 3 PDF
Compilation 3 PDF
Cours de Compilation
SMI - S5
Prof. M.D. RAHMANI
mrahmani@fsr.ac.ma
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1
III- L'analyse lexicale - Plan:
1- Le rle d'un analyseur lexical
2- Terminologie
3- Spcification des units lexicales
3.1- Chanes et langages
3.2- Oprations sur les langages
3.3- Expressions rgulires
3.4- Dfinitions rgulires
4- Reconnaissance des units lexicales
5- Le langage FLEX
5.1- Structure d'un programme FLEX
5.2- Ecriture d'un analyseur lexical avec FLEX
De plus, il doit:
- liminer les blancs (espaces, tabulations, fin de lignes)
et les commentaires.
- dtecter les erreurs et associer des messages d'erreurs.
unit lexicale
texte Analyse et attributs Analyse reste
d'entre lexicale prochaine syntaxique
unit lexicale
traitement
des erreurs
- Union de L et M : L U M = { s / s L ou s M}
- Concatnation de L et M : LM = { st / s L et t M}
- Fermeture de Kleene de L : L* =Ui =0 Li
L* dnote un nombre quelconque (mme nul) de
concatnation de L.
On note L0 = {}
- Fermeture positive de L : L = Ui =1 Li
+
(r) | (s) est une expression rgulire qui dnote (L(r)) U (L(s)).
Dfinition:
Si deux expressions r et s dnotent le mme langage, on
dit qu'elles sont quivalentes et on crit: r=s
Exemple: (a|b)= (b|a)
Un identificateur: lettre(lettre|chiffre)*
= [a-zA-Z][a-zA-Z0-9]*
Un rel:
(+|-)?(chiffre)+(.(chiffre)+)?((e|E)(+|-)?(chiffre)+)?
= [+-]?[0-9]+(.[0-9]+)?((e|E)(+|-)?[0-9]+)?
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 20
3- Spcification des units lexicales
3.4- Dfinitions rgulires:
Une dfinition rgulire est une suite de dfinitions de la
forme:
d1 r1 Chaque di est un nom distinct
d2 r2 et chaque ri est une expression
. . rgulire sur les symboles :
. . U {d1,d2,...,di-1}
dn rn
delim
dbut delim autre *
0 1 2
(ne rien retourner)
Remarque: autre veut dire, autre que les autres arcs sortants du
mme tat.
lettre|chiffre
dbut lettre autre *
3 4 5
retourne(id,pointeur sur lexme)
chiffre
autre
c c c
dbut +|- c . c e|E +|- c autre *
6 7 8 9 10 11 12 13 14
c e|E c
autre
A l'tat 14 d'acceptation avec recul, nous retournons l'unit lexicale
nb et un pointeur sur le lexme reconnu.
16
> 18 * (operel, PGQ)
autre
dbut =
19
= 20 (operel, EGA)
15
26
'(' (po)
dbut 25
')' 27
(pf)
Fonction inserer
dbut
indice indice+1;cration d'une nouvelle entre de la TS
TS[indice].ptrlex l'adresse du dbut du lexme dans le
tampon lexmes
TS[indice].unilex l'unit lexicale associe
retourner(indice)
fin inserer
lex.yy.c
gcc excutable
autres modules
source
analyser excutable rsultats de l'analyse
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 42
5- Le langage FLEX
5.1- Structure d'un programme FLEX:
Un programme source en langage lex est constitu de 3 sections
dlimites par %%:
//1re partie: dclarations
%{
dclarations pour le compilateur C
%}
dfinitions rgulires
%%
// 2me partie: rgles de traduction
expressions rgulires + actions raliser
%%
// 3me partie fonctions en C
Fonctions annexes en langage C
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 43
5- Le langage FLEX
- La 1re partie est constitue de:
- dclarations en langage C des bibliothques, variables,
structures, unions...
- dclarations de dfinitions rgulires utilisables par les
rgles de traduction.
int main()
{
FILE *fichier;
printf("Nom du fichier analyser");
scanf("%s",&fichier);
yyin=fichier;
yylex();
return 0;
}
a
dbut a 1 b 2 b 3
0
b
Remarque: Le non dterminisme ici est associ deux arcs
sortants de l'tat 0 avec le mme symbole a.
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 52
6- Automates tats finis (AEF)
6.2- Tables de transition:
Nous pouvons reprsenter un AFN par une table de
transition, dont les lignes correspondent aux tats et les colonnes
aux symboles d'entre et .
L'entre pour un tat donn et une entre donne est la valeur
de la fonction de transition applique ces arguments.
Exemple: soit l'AFN prcdant
Symbole a b
Etat
0 {0,1} {0} -
1 - {2} -
2 - {3} -
3 - - -
Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 53
6- Automates tats finis (AEF)
6.3- Automates tats finis dterministes (AFD):
Un AFD est un cas particulier d'un AFN o:
- il n'y a aucun arc tiquet par ,
- pas plus d'un arc avec le mme symbole sortant d'un tat.
a a
dbut a 1 b 2 b 3
0
a
b b
autre
autre
dbut / /
0 1 2 3
/ autre
5 7
autre
Donne:
Une chane d'entre x termine par un caractre de fin eof.
Un AFD D dont l'tat initial est e0, les tats finaux sont F et
la fonction de transition est trans.
Rsultat:
"oui" si D accepte x
"non" dans le cas contraire.
A aB
ou A a
A Ba
ou A a
Remarque:
Les grammaires rgulires sont une sous-classe des
grammaires hors contextes.
Elles permettent de dcrire les langages rguliers.
Algorithme de Mc Naughton-Yamada-Thomson:
Donnes: Une expression rgulire r sur un alphabet .
Mthode:
- Dcomposer r en sous expressions constitutives.
- Les rgles de construction d'un AFN contiennent des rgles
de base pour traiter les sous-expressions .
dbut dbut
i f
ou
si r = a , l'automate est:
dbut a
i f
r1
dbut
i f
r2
dbut r1 r2
dbut r1
i f
La rptition non nulle (+) consiste relier l'tat final de
l'automate de r1 son tat initial.
Pour ajouter au langage reconnu par l'automate, il suffit de
crer un nouvel tat initial et un tat final et de les relier avec une
transition .
dbut a
1 2
dbut b
4 5
dbut 7 c
8
- Pour b c* , on a:
dbut b c
4 5 6 7 8 9
dbut a
0 1 2 3
b c
4 5 6 7 8 9
L'expression rgulire quivalente:
a|b|bcc* = a|b|bc+ = a|bc*
x
i j
x
k
dbut a
0 1 2 3
b c
4 5 6 7 8 9
b c c
c
dbut a
0 1 2 3
b c
4 5 6 7 8 9
b c c
c
dbut
0 2
5 8
b c
c
Mthode:
1- Faire deux classes, A contenant les tats finaux et B
contenant les tats non finaux.
2- S'il existe un symbole....