Lex est un utilitaire fourni avec Unix ;
sa variante Flex est disponible sous Linux.
Il permet de créer automatiquement le code source d'un analyseur
lexical, à partir d'instructions contenues dans un fichier construit
par l'utilisateur. Le code source (en C) obtenu peut être complété
par celui d'un analyseur syntaxique construit grâce à l'utilitaire
Yacc.
L'utilisateur peut ainsi créer un compilateur correspondant à
son projet. Lex peut aussi être utilisé, indépendamment
de Yacc, dans toutes les situations où on veut éviter d'écrire
directement le code de l'analyseur lexical. Plus généralement,
il peut être intéressant d'utiliser Lex pour tout programme
où l'analyse du flot d'entrée constitue le plus gros travail.
Le fichier d'instructions, appelé ici
"fichier-lex"
permet à Lex de construire l'analyseur est écrit dans un
méta-langage propre à Lex et qui décrit essentiellement des
expressions rationnelles augmentées.
Une expression rationnelle augmentée
est une expression rationnelle à laquelle on a associé un
ensemble d'actions. Quand l'expression rationnelle est rencontrée,
ces actions sont exécutées. Pour Lex, les actions sont écrites
en code C ou C++.
L'utilitaire Lex lit ce fichier-lex et construit le fichier lex.yy.c
(nom imposé par Lex) qui contient le code source de l'analyseur.
Comme la quantité de code qu'on peut rajouter au fichier-lex n'est
pas limitée, on peut construire, avec l'aide de Lex, des programmes
qui dépassent largement la puissance de l'analyse lexicale.
Avantages : gain de temps à la conception ; souplesse ;
optimisation des flux dans l'analyseur ; avantages du C.
Inconvénients : code source volumineux ; méta-langage difficile
à maitriser et parfois peu cohérent ; inconvénients du C.
Utilisation de Lex :