Pres-Lex Utf8 2
Pres-Lex Utf8 2
Pres-Lex Utf8 2
Compilation
Présentation de Lex
Lex est un générateur de programme pour le traitement lexical de chaı̂nes de caractères, en particulier pour l’analyse
lexicale. Un source Lex est une spécification de haut niveau sous forme d’expressions rationnelles décrivant les classes
de tokens et d’actions à exécuter à la reconnaissance d’un token. Ces actions sont écrites en C.
Attention : à la compilation,
ne pas oublier l’appel à la bibliothèque lex ! !
cc lex.yy.c -lfl -o analyseur
et correspondent respectivement à :
– " " : tout ce qui se situe entre ” ” est pris comme chaı̂ne
3 Cas des règles ambiguës
de caractères. Ainsi ”.” désigne le caractère . et ” ”
désigne un blanc significatif (par exemple a" "b permet On peut avoir plusieurs expressions rationnelles qui re-
de reconnaitre le token a b). connaissent la même chaı̂ne d’entrée. Dans ce cas Lex lève
– \ : placé devant un méta-symbole, il le transforme en l’ambiguité en appliquant les règles suivantes :
caractère (comme \. ). 1. le plus long préfixe est retenu ;
– [ ] définit une classe de caractères (i.e. représente un 2. parmi plusieurs expressions rationnelles qui recon-
caractère). Par exemple, [ab+] reconnaı̂t l’un des ca- naissent le même préfixe, la première est choisie.
ractères a, b et + ; x[ab+]y reconnait l’une des chaines
xay, xby ou x+y. Exemple : Considérons le source Lex suivant :
Les seuls opérateurs ou métasymboles actifs entre [ ]
sont \, - et ^ . Le symbole - désigne un intervalle, integer action1; {action correspondant
le symbole ^ désigne le complémentaire et \ sert à au mot réservé integer}
représenter les escapes \n, \t, \b. [a-z]+ action2; {action correspondant
Lorsque le caractère - doit être reconnu entre des cro- à un identificateur}
chets, il faut le placer en tête. Ainsi [0-9] désigne un
chiffre mais [-+0-9] reconnait soit un chiffre, soit le Les chaines de caractères suivantes sont reconnues ainsi :
symbole -, soit le symbole +. – "integers" est pris pour un identificateur (8 ca-
Le symbole ^ désignant le complémentaire doit être ractères : règle 1).
placé en tête. Ainsi [^abc] reconnait tout caractère sauf – "integer" est pris pour le mot réservé integer (7 ca-
a, b ou c. ractères reconnus par deux expressions : règle 2).
– ? désigne une expression optionnelle. Par exemple – "int" est pris pour un identificateur (3 caractères re-
abc ?d reconnaı̂t l’une des chaines abd et abcd. connus).
– . remplace n’importe quel caractère sauf \n.
Ce mécanisme est utilisé pour gérer les mots-clés ou
Notion de contexte sensitivité : on peut spécifier dans réservés. En listant en premier les expressions rationnelles
quelques cas précis qu’une expression ne doit être reconnue décrivant les mots réservés, ils sont reconnus comme tels
que dans un contexte donné. et non comme des identificateurs.